1 // RUN: %clang_extdef_map %s -- | FileCheck --implicit-check-not "c:@y" --implicit-check-not "c:@z" %s 2 // RUN: %clang -emit-ast %s -o %t.ast 3 // RUN: %clang_extdef_map %t.ast -- | FileCheck --implicit-check-not "c:@y" --implicit-check-not "c:@z" %s 4 5 int f(int) { 6 return 0; 7 } 8 // CHECK-DAG: 9:c:@F@f#I# 9 10 extern const int x = 5; 11 // CHECK-DAG: 4:c:@x 12 13 // Non-const variables should not be collected. 14 int y = 5; 15 16 // In C++, const implies internal linkage, so not collected. 17 const int z = 5; 18 19 struct S { 20 int a; 21 }; 22 extern S const s = {.a = 2}; 23 // CHECK-DAG: 4:c:@s 24 25 struct SF { 26 const int a; 27 }; 28 extern const SF sf = {.a = 2}; 29 // CHECK-DAG: 5:c:@sf 30 31 struct SStatic { 32 static const int a = 4; 33 }; 34 const int SStatic::a; 35 // CHECK-DAG: 14:c:@S@SStatic@a 36 37 extern int const arr[5] = { 0, 1 }; 38 // CHECK-DAG: 6:c:@arr 39 40 union U { 41 const int a; 42 const unsigned int b; 43 }; 44 extern const U u = {.a = 6}; 45 // CHECK-DAG: 4:c:@u 46 47 // No USR can be generated for this. 48 // Check for no crash in this case. 49 static union { 50 float uf; 51 const int ui; 52 }; 53 54 void f(int (*)(char)); 55 void f(bool (*)(char)); 56 57 struct G { 58 G() { 59 f([](char) -> int { return 42; }); 60 // CHECK-DAG: 41:c:@S@G@F@G#@Sa@F@operator int (*)(char)#1 61 f([](char) -> bool { return true; }); 62 // CHECK-DAG: 42:c:@S@G@F@G#@Sa@F@operator bool (*)(char)#1 63 } 64 }; 65