summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/Inputs/ctu-other.cpp14
-rw-r--r--clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt1
-rw-r--r--clang/test/Analysis/ctu-main.cpp14
-rw-r--r--clang/test/Analysis/func-mapping-test.cpp7
4 files changed, 36 insertions, 0 deletions
diff --git a/clang/test/Analysis/Inputs/ctu-other.cpp b/clang/test/Analysis/Inputs/ctu-other.cpp
index a9ff6b5a93a..c2410ced35d 100644
--- a/clang/test/Analysis/Inputs/ctu-other.cpp
+++ b/clang/test/Analysis/Inputs/ctu-other.cpp
@@ -131,3 +131,17 @@ union U {
const unsigned int b;
};
U extU = {.a = 4};
+
+class TestAnonUnionUSR {
+public:
+ inline float f(int value) {
+ union {
+ float f;
+ int i;
+ };
+ i = value;
+ return f;
+ }
+ static const int Test;
+};
+const int TestAnonUnionUSR::Test = 5;
diff --git a/clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt b/clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt
index 3df181b29d5..da95098f4c8 100644
--- a/clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt
+++ b/clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt
@@ -25,3 +25,4 @@ c:@extSCN ctu-other.cpp.ast
c:@extSubSCN ctu-other.cpp.ast
c:@extSCC ctu-other.cpp.ast
c:@extU ctu-other.cpp.ast
+c:@S@TestAnonUnionUSR@Test ctu-other.cpp.ast
diff --git a/clang/test/Analysis/ctu-main.cpp b/clang/test/Analysis/ctu-main.cpp
index 1cb0d4a9d77..aae4808e90f 100644
--- a/clang/test/Analysis/ctu-main.cpp
+++ b/clang/test/Analysis/ctu-main.cpp
@@ -112,6 +112,19 @@ void test_virtual_functions(mycls* obj) {
clang_analyzer_eval(obj->fvcl(1) == 8); // expected-warning{{FALSE}} expected-warning{{TRUE}}
}
+class TestAnonUnionUSR {
+public:
+ inline float f(int value) {
+ union {
+ float f;
+ int i;
+ };
+ i = value;
+ return f;
+ }
+ static const int Test;
+};
+
int main() {
clang_analyzer_eval(f(3) == 2); // expected-warning{{TRUE}}
clang_analyzer_eval(f(4) == 3); // expected-warning{{TRUE}}
@@ -144,4 +157,5 @@ int main() {
clang_analyzer_eval(extSubSCN.a == 1); // expected-warning{{TRUE}}
// clang_analyzer_eval(extSCC.a == 7); // TODO
clang_analyzer_eval(extU.a == 4); // expected-warning{{TRUE}}
+ clang_analyzer_eval(TestAnonUnionUSR::Test == 5); // expected-warning{{TRUE}}
}
diff --git a/clang/test/Analysis/func-mapping-test.cpp b/clang/test/Analysis/func-mapping-test.cpp
index f6eeb261da5..5c04d9411fe 100644
--- a/clang/test/Analysis/func-mapping-test.cpp
+++ b/clang/test/Analysis/func-mapping-test.cpp
@@ -41,3 +41,10 @@ union U {
};
U u = {.a = 6};
// CHECK-DAG: c:@u
+
+// No USR can be generated for this.
+// Check for no crash in this case.
+static union {
+ float uf;
+ const int ui;
+};
OpenPOWER on IntegriCloud