aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis/initialization.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/initialization.c')
-rw-r--r--test/Analysis/initialization.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/Analysis/initialization.c b/test/Analysis/initialization.c
new file mode 100644
index 000000000000..c1d6361f1245
--- /dev/null
+++ b/test/Analysis/initialization.c
@@ -0,0 +1,28 @@
+// RUN: %clang_cc1 -triple i386-apple-darwin10 -analyze -analyzer-checker=core.builtin,debug.ExprInspection -verify %s
+
+void clang_analyzer_eval(int);
+
+void initbug() {
+ const union { float a; } u = {};
+ (void)u.a; // no-crash
+}
+
+int const parr[2] = {1};
+void constarr() {
+ int i = 2;
+ clang_analyzer_eval(parr[i]); // expected-warning{{UNDEFINED}}
+ i = 1;
+ clang_analyzer_eval(parr[i] == 0); // expected-warning{{TRUE}}
+ i = -1;
+ clang_analyzer_eval(parr[i]); // expected-warning{{UNDEFINED}}
+}
+
+struct SM {
+ int a;
+ int b;
+};
+const struct SM sm = {.a = 1};
+void multinit() {
+ clang_analyzer_eval(sm.a == 1); // expected-warning{{TRUE}}
+ clang_analyzer_eval(sm.b == 0); // expected-warning{{TRUE}}
+}