1 // RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s 2 3 // Cases to show some non-trivial types with flags combined with DIFlagNonTrivial and DIFlagTypePassByValue. 4 5 // CHECK-DAG: !DICompositeType({{.*}}, name: "Explicit",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial 6 struct Explicit { 7 explicit Explicit(); 8 int a; 9 } Explicit; 10 11 // CHECK-DAG: !DICompositeType({{.*}}, name: "Struct",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial 12 struct Struct { 13 Struct() {} 14 } Struct; 15 16 // CHECK-DAG: !DICompositeType({{.*}}, name: "Annotated",{{.*}}flags: DIFlagTypePassByValue | DIFlagNonTrivial 17 struct __attribute__((trivial_abi)) Annotated { 18 Annotated() {}; 19 } Annotated; 20 21 22 // Check a non-composite type 23 // CHECK-DAG: !DIGlobalVariable(name: "GlobalVar", {{.*}}type: {{.*}}, isLocal: false, isDefinition: true) 24 int GlobalVar = 0; 25 26 // Cases to test composite type's triviality 27 28 // CHECK-DAG: !DICompositeType({{.*}}, name: "Union",{{.*}}flags: {{.*}}DIFlagTrivial 29 union Union { 30 int a; 31 } Union; 32 33 // CHECK-DAG: !DICompositeType({{.*}}, name: "Trivial",{{.*}}flags: {{.*}}DIFlagTrivial 34 struct Trivial { 35 int i; 36 } Trivial; 37 38 // CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialA",{{.*}}flags: {{.*}}DIFlagTrivial 39 struct TrivialA { 40 TrivialA() = default; 41 } TrivialA; 42 43 // CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialB",{{.*}}flags: {{.*}}DIFlagTrivial 44 struct TrivialB { 45 int m; 46 TrivialB(int x) { m = x; } 47 TrivialB() = default; 48 } TrivialB; 49 50 // CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialC",{{.*}}flags: {{.*}}DIFlagTrivial 51 struct TrivialC { 52 struct Trivial x; 53 } TrivialC; 54 55 // CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialD",{{.*}}flags: {{.*}}DIFlagTrivial 56 struct NT { 57 NT() {}; 58 }; 59 struct TrivialD { 60 static struct NT x; // Member is non-trivial but is static. 61 } TrivialD; 62 63 64 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivial",{{.*}}flags: {{.*}}DIFlagNonTrivial 65 struct NonTrivial { 66 NonTrivial() {} 67 } NonTrivial; 68 69 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialA",{{.*}}flags: {{.*}}DIFlagNonTrivial 70 struct NonTrivialA { 71 ~NonTrivialA(); 72 } NonTrivialA; 73 74 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialB",{{.*}}flags: {{.*}}DIFlagNonTrivial 75 struct NonTrivialB { 76 struct NonTrivial x; 77 } NonTrivialB; 78 79 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialC",{{.*}}flags: {{.*}}DIFlagNonTrivial 80 struct NonTrivialC { 81 virtual void f() {} 82 } NonTrivialC; 83 84 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialD",{{.*}}flags: {{.*}}DIFlagNonTrivial 85 struct NonTrivialD : NonTrivial { 86 } NonTrivialD; 87 88 // CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialE",{{.*}}flags: {{.*}}DIFlagNonTrivial 89 struct NonTrivialE : Trivial, NonTrivial { 90 } NonTrivialE; 91