diff options
Diffstat (limited to 'test/Analysis/uninit-const.cpp')
-rw-r--r-- | test/Analysis/uninit-const.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/test/Analysis/uninit-const.cpp b/test/Analysis/uninit-const.cpp new file mode 100644 index 0000000..56bfa08 --- /dev/null +++ b/test/Analysis/uninit-const.cpp @@ -0,0 +1,128 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,core,alpha.core.CallAndMessageUnInitRefArg -analyzer-output=text -verify %s +// Passing uninitialized const data to unknown function + +#include "Inputs/system-header-simulator-cxx.h" + +void doStuff6(const int& c); +void doStuff4(const int y); +void doStuff3(int& g); +void doStuff_uninit(const int *u); + + +int f10(void) { + int *ptr; + + ptr = new int; // + if(*ptr) { + doStuff4(*ptr); + } + delete ptr; + return 0; +} + +int f9(void) { + int *ptr; + + ptr = new int; // + + doStuff_uninit(ptr); // no warning + delete ptr; + return 0; +} + +int f8(void) { + int *ptr; + + ptr = new int; + *ptr = 25; + + doStuff_uninit(ptr); // no warning? + delete ptr; + return 0; +} + +void f7(void) { + int m = 3; + doStuff6(m); // no warning +} + + +int& f6_1_sub(int &p) { + return p; +} + +void f6_1(void) { + int t; + int p = f6_1_sub(t); //expected-warning {{Assigned value is garbage or undefined}} + //expected-note@-1 {{Calling 'f6_1_sub'}} + //expected-note@-2 {{Returning from 'f6_1_sub'}} + //expected-note@-3 {{Assigned value is garbage or undefined}} + int q = p; + doStuff6(q); +} + +void f6_2(void) { + int t; //expected-note {{'t' declared without an initial value}} + int &p = t; + int &s = p; + int &q = s; //expected-note {{'q' initialized here}} + doStuff6(q); //expected-warning {{Function call argument is an uninitialized value}} + //expected-note@-1 {{Function call argument is an uninitialized value}} +} + +void doStuff6_3(int& q_, int *ptr_) {} + +void f6_3(void) { + int *ptr; //expected-note {{'ptr' declared without an initial value}} + int t; + int &p = t; + int &s = p; + int &q = s; + doStuff6_3(q,ptr); //expected-warning {{Function call argument is an uninitialized value}} + //expected-note@-1 {{Function call argument is an uninitialized value}} + +} + +void f6(void) { + int k; // expected-note {{'k' declared without an initial value}} + doStuff6(k); // expected-warning {{Function call argument is an uninitialized value}} + // expected-note@-1 {{Function call argument is an uninitialized value}} + +} + + + +void f5(void) { + int t; + int* tp = &t; // expected-note {{'tp' initialized here}} + doStuff_uninit(tp); // expected-warning {{Function call argument is a pointer to uninitialized value}} + // expected-note@-1 {{Function call argument is a pointer to uninitialized value}} +} + + +void f4(void) { + int y; // expected-note {{'y' declared without an initial value}} + doStuff4(y); // expected-warning {{Function call argument is an uninitialized value}} + // expected-note@-1 {{Function call argument is an uninitialized value}} +} + +void f3(void) { + int g; + doStuff3(g); // no warning +} + +int z; +void f2(void) { + doStuff_uninit(&z); // no warning +} + +void f1(void) { + int x_=5; + doStuff_uninit(&x_); // no warning +} + +void f_uninit(void) { + int x; + doStuff_uninit(&x); // expected-warning {{Function call argument is a pointer to uninitialized value}} + // expected-note@-1 {{Function call argument is a pointer to uninitialized value}} +} |