diff options
| author | Balazs Keri <1.int32@gmail.com> | 2019-08-06 12:10:16 +0000 |
|---|---|---|
| committer | Balazs Keri <1.int32@gmail.com> | 2019-08-06 12:10:16 +0000 |
| commit | 4e79097dc7c30ea8e1a7e96b740113e7cd9e635d (patch) | |
| tree | 176651a03cb1f9ccc2fb1df0bed6a69769eec257 /clang/test/Analysis | |
| parent | 56bdb0c5082547229ff668405bde2ef5254ee817 (diff) | |
| download | bcm5719-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.cpp | 14 | ||||
| -rw-r--r-- | clang/test/Analysis/Inputs/ctu-other.cpp.externalDefMap.txt | 1 | ||||
| -rw-r--r-- | clang/test/Analysis/ctu-main.cpp | 14 | ||||
| -rw-r--r-- | clang/test/Analysis/func-mapping-test.cpp | 7 |
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; +}; |

