summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2015-12-15 08:47:20 +0000
committerGabor Horvath <xazax.hun@gmail.com>2015-12-15 08:47:20 +0000
commit454564a2d940e28577ef110474b026c568e60f46 (patch)
treece5e40ba1ac16818229d4ad181522d156e6d9951 /clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp
parent6015f5c8237c259ac04c539d55d200baa885a807 (diff)
downloadbcm5719-llvm-454564a2d940e28577ef110474b026c568e60f46.tar.gz
bcm5719-llvm-454564a2d940e28577ef110474b026c568e60f46.zip
[clang-tidy] Check for suspicious string assignments.
It is possible to assign arbitrary integer types to strings. Sometimes it is the result of missing to_string call or apostrophes. Reviewers: alexfh Differential Revision: http://reviews.llvm.org/D15411 llvm-svn: 255630
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp')
-rw-r--r--clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp b/clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp
new file mode 100644
index 00000000000..cb823410777
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/misc-string-integer-assignment.cpp
@@ -0,0 +1,53 @@
+// RUN: %check_clang_tidy %s misc-string-integer-assignment %t
+
+namespace std {
+template<typename T>
+struct basic_string {
+ basic_string& operator=(T);
+ basic_string& operator=(basic_string);
+ basic_string& operator+=(T);
+ basic_string& operator+=(basic_string);
+};
+
+typedef basic_string<char> string;
+typedef basic_string<wchar_t> wstring;
+}
+
+typedef int MyArcaneChar;
+
+int main() {
+ std::string s;
+ std::wstring ws;
+ int x = 5;
+
+ s = 6;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a character code when assigning {{.*}} [misc-string-integer-assignment]
+// CHECK-FIXES: {{^}} s = '6';{{$}}
+ s = 66;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} s = "66";{{$}}
+ s = x;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} s = std::to_string(x);{{$}}
+ s = 'c';
+ s = static_cast<char>(6);
+
+// +=
+ ws += 6;
+// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} ws += L'6';{{$}}
+ ws += 66;
+// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} ws += L"66";{{$}}
+ ws += x;
+// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} ws += std::to_wstring(x);{{$}}
+ ws += L'c';
+ ws += (wchar_t)6;
+
+ std::basic_string<MyArcaneChar> as;
+ as = 6;
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: an integer is interpreted as a chara
+// CHECK-FIXES: {{^}} as = 6;{{$}}
+
+}
OpenPOWER on IntegriCloud