brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 28da8a7 Raw
48 lines · cpp
1// RUN: %check_clang_tidy %s readability-redundant-string-cstr %t2 3namespace std {4template <typename T>5class allocator {};6template <typename T>7class char_traits {};8template <typename C, typename T, typename A>9struct basic_string {10  basic_string();11  // MSVC headers define two constructors instead of using optional arguments.12  basic_string(const C *p);13  basic_string(const C *p, const A &a);14  const C *c_str() const;15  const C *data() const;16};17typedef basic_string<char, std::char_traits<char>, std::allocator<char>> string;18}19namespace llvm {20struct StringRef {21  StringRef(const char *p);22  StringRef(const std::string &);23};24}25 26void f1(const std::string &s) {27  f1(s.c_str());28  // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant call to 'c_str' [readability-redundant-string-cstr]29  // CHECK-FIXES: f1(s);30  f1(s.data());31  // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant call to 'data' [readability-redundant-string-cstr]32  // CHECK-FIXES: f1(s);33}34void f2(const llvm::StringRef r) {35  std::string s;36  f2(s.c_str());37  // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant call {{.*}}38  // CHECK-FIXES: std::string s;39  // CHECK-FIXES-NEXT: f2(s);40}41void f3(const llvm::StringRef &r) {42  std::string s;43  f3(s.c_str());44  // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant call {{.*}}45  // CHECK-FIXES: std::string s;46  // CHECK-FIXES-NEXT: f3(s);47}48