summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/bool-assignment.cpp
diff options
context:
space:
mode:
authorRyan Govostes <rzg@apple.com>2012-02-11 16:32:09 +0000
committerRyan Govostes <rzg@apple.com>2012-02-11 16:32:09 +0000
commit55011c017cd4be28ca7cc199c0e50ffbe890b1e4 (patch)
treeabd01d30801d92dc92c7a976f07caaea26fde5ac /clang/test/Analysis/bool-assignment.cpp
parent915e3d9568ec0a397e45b18bf69d6d858472b372 (diff)
downloadbcm5719-llvm-55011c017cd4be28ca7cc199c0e50ffbe890b1e4.tar.gz
bcm5719-llvm-55011c017cd4be28ca7cc199c0e50ffbe890b1e4.zip
[analyzer] New checker for assignment of non-0/1 values to Boolean variables.
llvm-svn: 150306
Diffstat (limited to 'clang/test/Analysis/bool-assignment.cpp')
-rw-r--r--clang/test/Analysis/bool-assignment.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/clang/test/Analysis/bool-assignment.cpp b/clang/test/Analysis/bool-assignment.cpp
new file mode 100644
index 00000000000..e5731299944
--- /dev/null
+++ b/clang/test/Analysis/bool-assignment.cpp
@@ -0,0 +1,87 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core.BoolAssignment -analyzer-store=region -verify %s
+
+// Test C++'s bool
+
+void test_cppbool_initialization(int y) {
+ if (y < 0) {
+ bool x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ bool x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ bool x = y; // no-warning
+}
+
+void test_cppbool_assignment(int y) {
+ bool x = 0; // no-warning
+ if (y < 0) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ x = y; // no-warning
+}
+
+// Test Objective-C's BOOL
+
+typedef signed char BOOL;
+
+void test_BOOL_initialization(int y) {
+ if (y < 0) {
+ BOOL x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ BOOL x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ BOOL x = y; // no-warning
+}
+
+void test_BOOL_assignment(int y) {
+ BOOL x = 0; // no-warning
+ if (y < 0) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ x = y; // no-warning
+}
+
+
+// Test MacTypes.h's Boolean
+
+typedef unsigned char Boolean;
+
+void test_Boolean_initialization(int y) {
+ if (y < 0) {
+ Boolean x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ Boolean x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ Boolean x = y; // no-warning
+}
+
+void test_Boolean_assignment(int y) {
+ Boolean x = 0; // no-warning
+ if (y < 0) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ if (y > 1) {
+ x = y; // expected-warning {{Assignment of a non-Boolean value}}
+ return;
+ }
+ x = y; // no-warning
+}
OpenPOWER on IntegriCloud