| // 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 | |
| } | |
| }; |