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