summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis
diff options
context:
space:
mode:
authorBalazs Keri <1.int32@gmail.com>2019-08-06 12:10:16 +0000
committerBalazs Keri <1.int32@gmail.com>2019-08-06 12:10:16 +0000
commit4e79097dc7c30ea8e1a7e96b740113e7cd9e635d (patch)
tree176651a03cb1f9ccc2fb1df0bed6a69769eec257 /clang/test/Analysis
parent56bdb0c5082547229ff668405bde2ef5254ee817 (diff)
downloadbcm5719-llvm-4e79097dc7c30ea8e1a7e96b740113e7cd9e635d.tar.gz
bcm5719-llvm-4e79097dc7c30ea8e1a7e96b740113e7cd9e635d.zip
[CrossTU] Handle case when no USR could be generated during Decl search.
Summary: When searching for a declaration to be loaded the "lookup name" for every other Decl is computed. If the USR can not be determined here should be not an assert, instead skip this Decl. Reviewers: martong Reviewed By: martong Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D65445 llvm-svn: 368020
Diffstat (limited to 'clang/test/Analysis')
-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