1 // RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple %itanium_abi_triple %s -o - | FileCheck %s 2 // Test the various accessibility flags in the debug info. 3 struct A { 4 // CHECK: ![[A:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", 5 6 // CHECK-DAG: !DISubprogram(name: "pub_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped, 7 void pub_default(); 8 // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "pub_default_static",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagStaticMember) 9 static int pub_default_static; 10 }; 11 12 // CHECK: !DIDerivedType(tag: DW_TAG_inheritance,{{.*}} baseType: ![[A]],{{.*}} flags: DIFlagPublic, extraData: i32 0) 13 class B : public A { 14 public: 15 // CHECK-DAG: !DISubprogram(name: "pub",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPublic | DIFlagPrototyped, 16 void pub(); 17 // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "public_static",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPublic | DIFlagStaticMember) 18 static int public_static; 19 20 protected: 21 // CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "prot_using",{{.*}} line: [[@LINE+3]],{{.*}} flags: DIFlagProtected) 22 // CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "prot_typedef",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagProtected) 23 typedef int prot_typedef; 24 using prot_using = prot_typedef; 25 prot_using prot_member; 26 27 // CHECK: !DISubprogram(name: "prot",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagProtected | DIFlagPrototyped, 28 void prot(); 29 30 private: 31 // CHECK: !DISubprogram(name: "priv_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped, 32 void priv_default(); 33 }; 34 35 class C { 36 public: 37 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "D",{{.*}} flags: DIFlagPublic | DIFlagTypePassByValue, 38 struct D { 39 }; 40 protected: 41 // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "E",{{.*}} flags: DIFlagProtected | DIFlagTypePassByValue, 42 union E { 43 }; 44 private: 45 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "J",{{.*}} flags: DIFlagTypePassByValue, 46 struct J { 47 }; 48 public: 49 D d; 50 E e; 51 J j; 52 }; 53 54 struct F { 55 private: 56 // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "G",{{.*}} flags: DIFlagPrivate | DIFlagTypePassByValue, 57 union G { 58 }; 59 public: 60 G g; 61 }; 62 63 union H { 64 private: 65 // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "I",{{.*}} flags: DIFlagPrivate | DIFlagTypePassByValue, 66 class I { 67 }; 68 public: 69 I i; 70 }; 71 72 union U { 73 // CHECK-DAG: !DISubprogram(name: "union_pub_default",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrototyped, 74 void union_pub_default(); 75 private: 76 // CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "union_priv",{{.*}} line: [[@LINE+1]],{{.*}} flags: DIFlagPrivate) 77 int union_priv; 78 }; 79 80 // CHECK: !DISubprogram(name: "free", 81 // CHECK-SAME: flags: DIFlagPrototyped, 82 // CHECK-SAME: spFlags: DISPFlagDefinition 83 void free() {} 84 85 U u; 86 A a; 87 B b; 88 C c; 89 F f; 90 H h; 91