summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-01-18 21:18:58 +0000
committerTed Kremenek <kremenek@apple.com>2011-01-18 21:18:58 +0000
commitb63931eef6bfcf900216dc1a180b29dcaa287090 (patch)
tree274fd855e7ac9f49a9a7884ba31a5c2be6d361de /clang/test
parente86a7ad01afca08f48ebf7b99f2a76204c963fa3 (diff)
downloadbcm5719-llvm-b63931eef6bfcf900216dc1a180b29dcaa287090.tar.gz
bcm5719-llvm-b63931eef6bfcf900216dc1a180b29dcaa287090.zip
Teach UninitializedValuesV2 to implicitly reason about C++
references by monitoring whether an access to a variable is solely to compute it's lvalue or to do an lvalue-to-rvalue conversion (i.e., a load). llvm-svn: 123777
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Sema/uninit-variables.c9
-rw-r--r--clang/test/SemaCXX/uninit-variables.cpp15
2 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/Sema/uninit-variables.c b/clang/test/Sema/uninit-variables.c
index aabb97634ba..58bcbb01d07 100644
--- a/clang/test/Sema/uninit-variables.c
+++ b/clang/test/Sema/uninit-variables.c
@@ -102,3 +102,12 @@ void test16() {
for (unsigned i = 0 ; i < 100 ; i++)
p[i] = 'a'; // no-warning
}
+
+void test17() {
+ // Don't warn multiple times about the same uninitialized variable
+ // along the same path.
+ int *x;
+ *x = 1; // expected-warning{{use of uninitialized variable 'x'}}
+ *x = 1; // no-warning
+}
+
diff --git a/clang/test/SemaCXX/uninit-variables.cpp b/clang/test/SemaCXX/uninit-variables.cpp
new file mode 100644
index 00000000000..e971357ca78
--- /dev/null
+++ b/clang/test/SemaCXX/uninit-variables.cpp
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -fsyntax-only -Wuninitialized-experimental -fsyntax-only %s -verify
+
+int test1_aux(int &x);
+int test1() {
+ int x;
+ test1_aux(x);
+ return x; // no-warning
+}
+
+int test2_aux() {
+ int x;
+ int &y = x;
+ return x; // no-warning
+}
+
OpenPOWER on IntegriCloud