diff options
author | Artem Dergachev <artem.dergachev@gmail.com> | 2017-10-13 20:54:56 +0000 |
---|---|---|
committer | Artem Dergachev <artem.dergachev@gmail.com> | 2017-10-13 20:54:56 +0000 |
commit | cd25c38dc0e4e6a0afd940295aad60f3589dc69f (patch) | |
tree | bf3ee71cd0d987aa905acd7da603b03a1cebfbdf /clang/test/Analysis/compound-literals.c | |
parent | 9f21ca6361ad3f87f7bb3f27370c9feb79ccfb39 (diff) | |
download | bcm5719-llvm-cd25c38dc0e4e6a0afd940295aad60f3589dc69f.tar.gz bcm5719-llvm-cd25c38dc0e4e6a0afd940295aad60f3589dc69f.zip |
[analyzer] pr28449: Fix support for various array initializers.
In some cases the analyzer didn't expect an array-type variable to be
initialized with anything other than a string literal. The patch essentially
removes the assertion, and ensures relatively sane behavior.
There is a bigger problem with these initializers. Currently our memory model
(RegionStore) is being ordered to initialize the array with a region that
is assumed to be storing the initializer rvalue, and it guesses to copy
the contents of that region to the array variable. However, it would make
more sense for RegionStore to receive the correct initializer in the first
place. This problem isn't addressed with this patch.
rdar://problem/27248428
Differential Revision: https://reviews.llvm.org/D23963
llvm-svn: 315750
Diffstat (limited to 'clang/test/Analysis/compound-literals.c')
-rw-r--r-- | clang/test/Analysis/compound-literals.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/test/Analysis/compound-literals.c b/clang/test/Analysis/compound-literals.c new file mode 100644 index 00000000000..a2556d2a795 --- /dev/null +++ b/clang/test/Analysis/compound-literals.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -triple=i386-apple-darwin10 -analyze -analyzer-checker=debug.ExprInspection -verify %s +void clang_analyzer_eval(int); + +// pr28449: Used to crash. +void foo(void) { + static const unsigned short array[] = (const unsigned short[]){0x0F00}; + // FIXME: Should be true. + clang_analyzer_eval(array[0] == 0x0F00); // expected-warning{{UNKNOWN}} +} |