1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple %itanium_abi_triple %s -o - | FileCheck %s
2*67e74705SXin Li // Test the various accessibility flags in the debug info.
3*67e74705SXin Li struct A {
4*67e74705SXin Li // CHECK: ![[A:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A",
5*67e74705SXin Li
6*67e74705SXin Li // CHECK-DAG: !DISubprogram(name: "pub_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped,
7*67e74705SXin Li void pub_default();
8*67e74705SXin Li // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "pub_default_static",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagStaticMember)
9*67e74705SXin Li static int pub_default_static;
10*67e74705SXin Li };
11*67e74705SXin Li
12*67e74705SXin Li
13*67e74705SXin Li // CHECK: !DIDerivedType(tag: DW_TAG_inheritance,{{.*}} baseType: ![[A]],{{.*}} flags: DIFlagPublic)
14*67e74705SXin Li class B : public A {
15*67e74705SXin Li public:
16*67e74705SXin Li // CHECK-DAG: !DISubprogram(name: "pub",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPublic | DIFlagPrototyped,
17*67e74705SXin Li void pub();
18*67e74705SXin Li // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "public_static",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPublic | DIFlagStaticMember)
19*67e74705SXin Li static int public_static;
20*67e74705SXin Li protected:
21*67e74705SXin Li // CHECK: !DISubprogram(name: "prot",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagProtected | DIFlagPrototyped,
22*67e74705SXin Li void prot();
23*67e74705SXin Li private:
24*67e74705SXin Li // CHECK: !DISubprogram(name: "priv_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped,
25*67e74705SXin Li void priv_default();
26*67e74705SXin Li };
27*67e74705SXin Li
28*67e74705SXin Li union U {
29*67e74705SXin Li // CHECK-DAG: !DISubprogram(name: "union_pub_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped,
30*67e74705SXin Li void union_pub_default();
31*67e74705SXin Li private:
32*67e74705SXin Li // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "union_priv",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrivate)
33*67e74705SXin Li int union_priv;
34*67e74705SXin Li };
35*67e74705SXin Li
36*67e74705SXin Li
37*67e74705SXin Li // CHECK: !DISubprogram(name: "free",
38*67e74705SXin Li // CHECK-SAME: isDefinition: true
39*67e74705SXin Li // CHECK-SAME: flags: DIFlagPrototyped,
free()40*67e74705SXin Li void free() {}
41*67e74705SXin Li
42*67e74705SXin Li A a;
43*67e74705SXin Li B b;
44*67e74705SXin Li U u;
45