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