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