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