brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · e127788 Raw
112 lines · cpp
1// RUN: %check_clang_tidy %s bugprone-string-integer-assignment %t -- -- -fno-delayed-template-parsing2 3namespace std {4template<typename T>5struct basic_string {6  basic_string& operator=(T);7  basic_string& operator=(basic_string);8  basic_string& operator+=(T);9  basic_string& operator+=(basic_string);10  const T &operator[](int i) const;11  T &operator[](int i);12};13 14typedef basic_string<char> string;15typedef basic_string<wchar_t> wstring;16 17int tolower(int i);18int toupper(int i);19}20 21int tolower(int i);22int toupper(int i);23 24typedef int MyArcaneChar;25 26constexpr char kCharConstant = 'a';27 28int main() {29  std::string s;30  std::wstring ws;31  int x = 5;32  const char c = 'c';33 34  s = 6;35// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a character code when assigning {{.*}} [bugprone-string-integer-assignment]36// CHECK-FIXES: s = '6';37  s = 66;38// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a chara39// CHECK-FIXES: s = "66";40  s = x;41// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a chara42// CHECK-FIXES: s = std::to_string(x);43  s = 'c';44  s = static_cast<char>(6);45 46// +=47  ws += 6;48// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara49// CHECK-FIXES: ws += L'6';50  ws += 66;51// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara52// CHECK-FIXES: ws += L"66";53  ws += x;54// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara55// CHECK-FIXES: ws += std::to_wstring(x);56  ws += L'c';57  ws += (wchar_t)6;58 59  std::basic_string<MyArcaneChar> as;60  as = 6;61  as = static_cast<MyArcaneChar>(6);62  as = 'a';63 64  s += toupper(x);65  s += tolower(x);66  s += (std::tolower(x));67 68  s += c & s[1];69  s += c ^ s[1];70  s += c | s[1];71 72  s[x] += 1;73  s += s[x];74  as += as[x];75 76  // Likely character expressions.77  s += x & 0xff;78  s += 0xff & x;79  s += x % 26;80  s += 26 % x;81  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: an integer is interpreted as a chara82  // CHECK-FIXES: s += std::to_string(26 % x);83  s += c | 0x80;84  s += c | 0x8000;85  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: an integer is interpreted as a chara86  // CHECK-FIXES: s += std::to_string(c | 0x8000);87  as += c | 0x8000;88 89  s += 'a' + (x % 26);90  s += kCharConstant + (x % 26);91  s += 'a' + (s[x] & 0xf);92  s += (x % 10) + 'b';93 94  s += x > 255 ? c : x;95  s += x > 255 ? 12 : x;96  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: an integer is interpreted as a chara97  // CHECK-FIXES: s += std::to_string(x > 255 ? 12 : x);98}99 100namespace instantiation_dependent_exprs {101template<typename T>102struct S {103  static constexpr T t = 0x8000;104  std::string s;105  void f(char c) { s += c | static_cast<int>(t); }106  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: an integer is interpreted as a chara107  // CHECK-FIXES: void f(char c) { s += std::to_string(c | static_cast<int>(t)); } 108};109 110template struct S<int>;111}112