Mercurial > hg > CbC > CbC_llvm
view clang/test/Analysis/global-region-invalidation.c @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -disable-free -verify %s \ // RUN: -analyzer-checker=core,deadcode,alpha.security.taint,debug.TaintTest,debug.ExprInspection void clang_analyzer_eval(int); // Note, we do need to include headers here, since the analyzer checks if the function declaration is located in a system header. #include "Inputs/system-header-simulator.h" // Test that system header does not invalidate the internal global. int size_rdar9373039 = 1; int rdar9373039(void) { int x; int j = 0; for (int i = 0 ; i < size_rdar9373039 ; ++i) x = 1; // strlen doesn't invalidate the value of 'size_rdar9373039'. int extra = (2 + strlen ("Clang") + ((4 - ((unsigned int) (2 + strlen ("Clang")) % 4)) % 4)) + (2 + strlen ("1.0") + ((4 - ((unsigned int) (2 + strlen ("1.0")) % 4)) % 4)); for (int i = 0 ; i < size_rdar9373039 ; ++i) j += x; // no-warning return j; } // Test stdin does not get invalidated by a system call nor by an internal call. void foo(void); int stdinTest(void) { int i = 0; fscanf(stdin, "%d", &i); foo(); int m = i; // expected-warning + {{tainted}} fscanf(stdin, "%d", &i); int j = i; // expected-warning + {{tainted}} return m + j; // expected-warning + {{tainted}} } // Test that const integer does not get invalidated. const int x = 0; int constIntGlob(void) { const int *m = &x; foo(); return 3 / *m; // expected-warning {{Division by zero}} } extern const int y; int constIntGlobExtern(void) { if (y == 0) { foo(); return 5 / y; // expected-warning {{Division by zero}} } return 0; } static void * const ptr = 0; void constPtrGlob(void) { clang_analyzer_eval(ptr == 0); // expected-warning{{TRUE}} foo(); clang_analyzer_eval(ptr == 0); // expected-warning{{TRUE}} } static const int x2 = x; void constIntGlob2(void) { clang_analyzer_eval(x2 == 0); // expected-warning{{TRUE}} foo(); clang_analyzer_eval(x2 == 0); // expected-warning{{TRUE}} } void testAnalyzerEvalIsPure(void) { extern int someGlobal; if (someGlobal == 0) { clang_analyzer_eval(someGlobal == 0); // expected-warning{{TRUE}} clang_analyzer_eval(someGlobal == 0); // expected-warning{{TRUE}} } } // Test that static variables with initializers do not get reinitialized on // recursive calls. void Function2(void); int *getPtr(void); void Function1(void) { static unsigned flag; static int *p = 0; if (!flag) { flag = 1; p = getPtr(); } int m = *p; // no-warning: p is never null. m++; Function2(); } void Function2(void) { Function1(); } void SetToNonZero(void) { static int g = 5; clang_analyzer_eval(g == 5); // expected-warning{{TRUE}} }