xref: /llvm-project/clang/test/Analysis/func-mapping-test.cpp (revision e6ff553979e850eeb7f0bbe77deab1c88fc764b3)
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 
f(int)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 {
GG58   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