From 55bbda44b412f57f2bfa3f69c6ccaecc1acf3244 Mon Sep 17 00:00:00 2001 From: Rafael Stahl Date: Tue, 23 Apr 2019 11:04:41 +0000 Subject: [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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@358968 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Analysis/func-mapping-test.cpp | 40 +++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'test/Analysis/func-mapping-test.cpp') diff --git a/test/Analysis/func-mapping-test.cpp b/test/Analysis/func-mapping-test.cpp index a5d7cfb449..f6eeb261da 100644 --- a/test/Analysis/func-mapping-test.cpp +++ b/test/Analysis/func-mapping-test.cpp @@ -1,7 +1,43 @@ -// RUN: %clang_extdef_map %s -- | FileCheck %s +// RUN: %clang_extdef_map %s -- | FileCheck --implicit-check-not "c:@y" --implicit-check-not "c:@z" %s int f(int) { return 0; } +// CHECK-DAG: c:@F@f#I# -// CHECK: c:@F@f#I# +extern const int x = 5; +// CHECK-DAG: c:@x + +// Non-const variables should not be collected. +int y = 5; + +// In C++, const implies internal linkage, so not collected. +const int z = 5; + +struct S { + int a; +}; +extern S const s = {.a = 2}; +// CHECK-DAG: c:@s + +struct SF { + const int a; +}; +SF sf = {.a = 2}; +// CHECK-DAG: c:@sf + +struct SStatic { + static const int a = 4; +}; +const int SStatic::a; +// CHECK-DAG: c:@S@SStatic@a + +extern int const arr[5] = { 0, 1 }; +// CHECK-DAG: c:@arr + +union U { + const int a; + const unsigned int b; +}; +U u = {.a = 6}; +// CHECK-DAG: c:@u -- cgit v1.2.3