diff options
Diffstat (limited to 'clang/test/Analysis/casts.c')
-rw-r--r-- | clang/test/Analysis/casts.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/clang/test/Analysis/casts.c b/clang/test/Analysis/casts.c index 938a6eb106c..3e6a9e05951 100644 --- a/clang/test/Analysis/casts.c +++ b/clang/test/Analysis/casts.c @@ -1,5 +1,6 @@ -// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin9 -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -analyzer-config eagerly-assume=false -verify %s -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin9 -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -analyzer-config eagerly-assume=false -verify %s +// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin9 -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify -analyzer-config eagerly-assume=false %s +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin9 -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify -analyzer-config eagerly-assume=false %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core,debug.ExprInspection -verify -DEAGERLY_ASSUME=1 -w %s extern void clang_analyzer_eval(_Bool); @@ -16,6 +17,8 @@ struct sockaddr_storage {}; void getsockname(); +#ifndef EAGERLY_ASSUME + void f(int sock) { struct sockaddr_storage storage; struct sockaddr* sockaddr = (struct sockaddr*)&storage; // expected-warning{{Casting data to a larger structure type and accessing a field can lead to memory access errors or data corruption}} @@ -188,3 +191,21 @@ void testSwitchWithSizeofs() { case sizeof(char):; // no-crash } } + +#endif + +#ifdef EAGERLY_ASSUME + +// expected-no-diagnostics + +int globalA; // TODO: the example is not representative. +extern int globalFunc(); +void no_crash_on_symsym_cast_to_long() { + char c = globalFunc() - 5; + c == 0; + globalA -= c; + globalA == 3; + (long)globalA << 48; // no-crash +} + +#endif |