summaryrefslogtreecommitdiffstats
path: root/test/Analysis/uninit-const.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/uninit-const.cpp')
-rw-r--r--test/Analysis/uninit-const.cpp128
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}}
+}
OpenPOWER on IntegriCloud