diff options
Diffstat (limited to 'clang/test')
| -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; +}; |

