summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Analysis')
-rw-r--r--clang/test/Analysis/main.c32
-rw-r--r--clang/test/Analysis/main.cpp22
2 files changed, 54 insertions, 0 deletions
diff --git a/clang/test/Analysis/main.c b/clang/test/Analysis/main.c
new file mode 100644
index 00000000000..aa4c5060960
--- /dev/null
+++ b/clang/test/Analysis/main.c
@@ -0,0 +1,32 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s
+
+int x = 1;
+
+struct {
+ int a, b;
+} s = {2, 3};
+
+int arr[] = {4, 5, 6};
+
+void clang_analyzer_eval(int);
+
+int main() {
+ // In main() we know that the initial values are still valid.
+ clang_analyzer_eval(x == 1); // expected-warning{{TRUE}}
+ clang_analyzer_eval(s.a == 2); // expected-warning{{TRUE}}
+ clang_analyzer_eval(s.b == 3); // expected-warning{{TRUE}}
+ clang_analyzer_eval(arr[0] == 4); // expected-warning{{TRUE}}
+ clang_analyzer_eval(arr[1] == 5); // expected-warning{{TRUE}}
+ clang_analyzer_eval(arr[2] == 6); // expected-warning{{TRUE}}
+ return 0;
+}
+
+void foo() {
+ // In other functions these values may already be overwritten.
+ clang_analyzer_eval(x == 1); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(s.a == 2); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(s.b == 3); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[0] == 4); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[1] == 5); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[2] == 6); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+}
diff --git a/clang/test/Analysis/main.cpp b/clang/test/Analysis/main.cpp
new file mode 100644
index 00000000000..c230c389cad
--- /dev/null
+++ b/clang/test/Analysis/main.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s
+
+int x = 1;
+
+struct {
+ int a, b;
+} s = {2, 3};
+
+int arr[] = {4, 5, 6};
+
+void clang_analyzer_eval(int);
+
+int main() {
+ // Do not trust global initializers in C++.
+ clang_analyzer_eval(x == 1); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(s.a == 2); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(s.b == 3); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[0] == 4); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[1] == 5); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ clang_analyzer_eval(arr[2] == 6); // expected-warning{{TRUE}} // expected-warning{{FALSE}}
+ return 0;
+}
OpenPOWER on IntegriCloud