diff options
author | Rafael Stahl <r.stahl@tum.de> | 2018-05-29 14:14:22 +0000 |
---|---|---|
committer | Rafael Stahl <r.stahl@tum.de> | 2018-05-29 14:14:22 +0000 |
commit | 0137aa8679d6675b2440c1e19943b23cee4dc794 (patch) | |
tree | c7659e120ba6d9bdabab409664555a469217fb9b /clang/test/Analysis/initialization.c | |
parent | 48bf43df8a92057feaad1142d0e251f7a160ab12 (diff) | |
download | bcm5719-llvm-0137aa8679d6675b2440c1e19943b23cee4dc794.tar.gz bcm5719-llvm-0137aa8679d6675b2440c1e19943b23cee4dc794.zip |
[analyzer] const init: handle non-explicit cases more accurately
Summary: If the access is out of bounds, return UndefinedVal. If it is missing an explicit init, return the implicit zero value it must have.
Reviewers: NoQ, xazax.hun, george.karpenkov
Reviewed By: NoQ
Subscribers: szepet, rnkovacs, a.sidorin, cfe-commits
Differential Revision: https://reviews.llvm.org/D46823
llvm-svn: 333417
Diffstat (limited to 'clang/test/Analysis/initialization.c')
-rw-r--r-- | clang/test/Analysis/initialization.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/clang/test/Analysis/initialization.c b/clang/test/Analysis/initialization.c index a6fe9be2b70..c1d6361f124 100644 --- a/clang/test/Analysis/initialization.c +++ b/clang/test/Analysis/initialization.c @@ -1,7 +1,28 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s -// expected-no-diagnostics +// 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}} +} |