mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 06:26:10 +00:00

When doing CTU analysis setup you pre-compile .cpp to .ast and then you run clang-extdef-mapping on the .cpp file as well. This is a pretty slow process since we have to recompile the file each time. With this patch you can now run clang-extdef-mapping directly on the .ast file. That saves a lot of time. I tried this on llvm/lib/AsmParser/Parser.cpp and running extdef-mapping on the .cpp file took 5.4s on my machine. While running it on the .ast file it took 2s. This can save a lot of time for the setup phase of CTU analysis. Reviewed By: martong Differential Revision: https://reviews.llvm.org/D128704
65 lines
1.3 KiB
C++
65 lines
1.3 KiB
C++
// RUN: %clang_extdef_map %s -- | FileCheck --implicit-check-not "c:@y" --implicit-check-not "c:@z" %s
|
|
// RUN: %clang -emit-ast %s -o %t.ast
|
|
// RUN: %clang_extdef_map %t.ast -- | FileCheck --implicit-check-not "c:@y" --implicit-check-not "c:@z" %s
|
|
|
|
int f(int) {
|
|
return 0;
|
|
}
|
|
// CHECK-DAG: 9:c:@F@f#I#
|
|
|
|
extern const int x = 5;
|
|
// CHECK-DAG: 4: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: 4:c:@s
|
|
|
|
struct SF {
|
|
const int a;
|
|
};
|
|
extern const SF sf = {.a = 2};
|
|
// CHECK-DAG: 5:c:@sf
|
|
|
|
struct SStatic {
|
|
static const int a = 4;
|
|
};
|
|
const int SStatic::a;
|
|
// CHECK-DAG: 14:c:@S@SStatic@a
|
|
|
|
extern int const arr[5] = { 0, 1 };
|
|
// CHECK-DAG: 6:c:@arr
|
|
|
|
union U {
|
|
const int a;
|
|
const unsigned int b;
|
|
};
|
|
extern const U u = {.a = 6};
|
|
// CHECK-DAG: 4:c:@u
|
|
|
|
// No USR can be generated for this.
|
|
// Check for no crash in this case.
|
|
static union {
|
|
float uf;
|
|
const int ui;
|
|
};
|
|
|
|
void f(int (*)(char));
|
|
void f(bool (*)(char));
|
|
|
|
struct G {
|
|
G() {
|
|
f([](char) -> int { return 42; });
|
|
// CHECK-DAG: 41:c:@S@G@F@G#@Sa@F@operator int (*)(char)#1
|
|
f([](char) -> bool { return true; });
|
|
// CHECK-DAG: 42:c:@S@G@F@G#@Sa@F@operator bool (*)(char)#1
|
|
}
|
|
};
|