summaryrefslogtreecommitdiffstats
path: root/test/Analysis/logical-ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/logical-ops.c')
-rw-r--r--test/Analysis/logical-ops.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/Analysis/logical-ops.c b/test/Analysis/logical-ops.c
new file mode 100644
index 0000000..a1223b3
--- /dev/null
+++ b/test/Analysis/logical-ops.c
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s
+
+void clang_analyzer_eval(int);
+
+void testAnd(int i, int *p) {
+ int *nullP = 0;
+ int *knownP = &i;
+ clang_analyzer_eval((knownP && knownP) == 1); // expected-warning{{TRUE}}
+ clang_analyzer_eval((knownP && nullP) == 0); // expected-warning{{TRUE}}
+ clang_analyzer_eval((knownP && p) == 1); // expected-warning{{UNKNOWN}}
+}
+
+void testOr(int i, int *p) {
+ int *nullP = 0;
+ int *knownP = &i;
+ clang_analyzer_eval((nullP || knownP) == 1); // expected-warning{{TRUE}}
+ clang_analyzer_eval((nullP || nullP) == 0); // expected-warning{{TRUE}}
+ clang_analyzer_eval((nullP || p) == 1); // expected-warning{{UNKNOWN}}
+}
+
+
+// PR13461
+int testTypeIsInt(int i, void *p) {
+ if (i | (p && p))
+ return 1;
+ return 0;
+}
OpenPOWER on IntegriCloud