1*febd89caSVadim D // RUN: %check_clang_tidy %s readability-string-compare %t -- -config='{CheckOptions: {readability-string-compare.StringLikeClasses: "CustomStringTemplateBase;CustomStringNonTemplateBase"}}' -- -isystem %clang_tidy_headers
2*febd89caSVadim D #include <string>
3*febd89caSVadim D 
4*febd89caSVadim D struct CustomStringNonTemplateBase {
compareCustomStringNonTemplateBase5*febd89caSVadim D   int compare(const CustomStringNonTemplateBase& Other) const {
6*febd89caSVadim D     return 123;  // value is not important for check
7*febd89caSVadim D   }
8*febd89caSVadim D };
9*febd89caSVadim D 
10*febd89caSVadim D template <typename T>
11*febd89caSVadim D struct CustomStringTemplateBase {
compareCustomStringTemplateBase12*febd89caSVadim D   int compare(const CustomStringTemplateBase& Other) const {
13*febd89caSVadim D     return 123;
14*febd89caSVadim D   }
15*febd89caSVadim D };
16*febd89caSVadim D 
17*febd89caSVadim D struct CustomString1 : CustomStringNonTemplateBase {};
18*febd89caSVadim D struct CustomString2 : CustomStringTemplateBase<char> {};
19*febd89caSVadim D 
CustomStringClasses()20*febd89caSVadim D void CustomStringClasses() {
21*febd89caSVadim D   std::string_view sv1("a");
22*febd89caSVadim D   std::string_view sv2("b");
23*febd89caSVadim D   if (sv1.compare(sv2)) {  // No warning - if a std class is not listed in StringLikeClasses, it won't be checked.
24*febd89caSVadim D   }
25*febd89caSVadim D 
26*febd89caSVadim D   CustomString1 custom1;
27*febd89caSVadim D   if (custom1.compare(custom1)) {
28*febd89caSVadim D   }
29*febd89caSVadim D   // CHECK-MESSAGES: [[@LINE-2]]:7: warning: do not use 'compare' to test equality of strings; use the string equality operator instead [readability-string-compare]
30*febd89caSVadim D 
31*febd89caSVadim D   CustomString2 custom2;
32*febd89caSVadim D   if (custom2.compare(custom2)) {
33*febd89caSVadim D   }
34*febd89caSVadim D   // CHECK-MESSAGES: [[@LINE-2]]:7: warning: do not use 'compare' to test equality of strings; use the string equality operator instead [readability-string-compare]
35*febd89caSVadim D }
36