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 0000000000000..56bfa08e41767 --- /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}} +}  | 
