summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/ctu-main.cpp
diff options
context:
space:
mode:
authorRafael Stahl <r.stahl@tum.de>2019-04-23 11:04:41 +0000
committerRafael Stahl <r.stahl@tum.de>2019-04-23 11:04:41 +0000
commit850361f6c1db6bd8a85b65a8c56e0e097eaa0635 (patch)
treed307c637054fa8ba3034e986e9bcd5d6f346e78b /clang/test/Analysis/ctu-main.cpp
parent330bc8af131c5b42efe120dbf70f47881d02d3a3 (diff)
downloadbcm5719-llvm-850361f6c1db6bd8a85b65a8c56e0e097eaa0635.tar.gz
bcm5719-llvm-850361f6c1db6bd8a85b65a8c56e0e097eaa0635.zip
[analyzer][CrossTU] Extend CTU to VarDecls with initializer
Summary: The existing CTU mechanism imports `FunctionDecl`s where the definition is available in another TU. This patch extends that to VarDecls, to bind more constants. - Add VarDecl importing functionality to CrossTranslationUnitContext - Import Decls while traversing them in AnalysisConsumer - Add VarDecls to CTU external mappings generator - Name changes from "external function map" to "external definition map" Reviewers: NoQ, dcoughlin, xazax.hun, george.karpenkov, martong Reviewed By: xazax.hun Subscribers: Charusso, baloghadamsoftware, mikhail.ramalho, Szelethus, donat.nagy, dkrupp, george.karpenkov, mgorny, whisperity, szepet, rnkovacs, a.sidorin, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D46421 llvm-svn: 358968
Diffstat (limited to 'clang/test/Analysis/ctu-main.cpp')
-rw-r--r--clang/test/Analysis/ctu-main.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/clang/test/Analysis/ctu-main.cpp b/clang/test/Analysis/ctu-main.cpp
index 03a47dfe0b0..a5de18bb3ec 100644
--- a/clang/test/Analysis/ctu-main.cpp
+++ b/clang/test/Analysis/ctu-main.cpp
@@ -60,6 +60,44 @@ int chf1(int x);
int fun_using_anon_struct(int);
int other_macro_diag(int);
+extern const int extInt;
+namespace intns {
+extern const int extInt;
+}
+struct S {
+ int a;
+};
+extern const S extS;
+extern const int extHere;
+const int extHere = 6;
+struct A {
+ static const int a;
+};
+struct SC {
+ const int a;
+};
+extern SC extSC;
+struct ST {
+ static struct SC sc;
+};
+struct SCNest {
+ struct SCN {
+ const int a;
+ } scn;
+};
+extern SCNest extSCN;
+extern SCNest::SCN extSubSCN;
+struct SCC {
+ SCC(int c);
+ const int a;
+};
+extern SCC extSCC;
+union U {
+ const int a;
+ const unsigned int b;
+};
+extern U extU;
+
int main() {
clang_analyzer_eval(f(3) == 2); // expected-warning{{TRUE}}
clang_analyzer_eval(f(4) == 3); // expected-warning{{TRUE}}
@@ -80,4 +118,16 @@ int main() {
clang_analyzer_eval(other_macro_diag(1) == 1); // expected-warning{{TRUE}}
// expected-warning@Inputs/ctu-other.cpp:80{{REACHABLE}}
MACRODIAG(); // expected-warning{{REACHABLE}}
+
+ clang_analyzer_eval(extInt == 2); // expected-warning{{TRUE}}
+ clang_analyzer_eval(intns::extInt == 3); // expected-warning{{TRUE}}
+ clang_analyzer_eval(extS.a == 4); // expected-warning{{TRUE}}
+ clang_analyzer_eval(extHere == 6); // expected-warning{{TRUE}}
+ clang_analyzer_eval(A::a == 3); // expected-warning{{TRUE}}
+ clang_analyzer_eval(extSC.a == 8); // expected-warning{{TRUE}}
+ clang_analyzer_eval(ST::sc.a == 2); // expected-warning{{TRUE}}
+ // clang_analyzer_eval(extSCN.scn.a == 9); // TODO
+ 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}}
}
OpenPOWER on IntegriCloud