aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Analysis/func-mapping-test.cpp
blob: e5d242d67758f2624bf4a1b42f4f0de0a0b5c0d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 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
  }
};