1 // RUN: %clang -cc1 -debug-info-kind=constructor -emit-llvm %s -o - | FileCheck %s 2 3 // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "A"{{.*}}DIFlagTypePassByValue 4 struct A { 5 } TestA; 6 7 // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "B"{{.*}}flags: DIFlagFwdDecl 8 struct B { 9 B(); 10 } TestB; 11 12 // CHECK-DAG: ![[C:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C"{{.*}}DIFlagTypePassByValue 13 struct C { 14 C() {} 15 } TestC; 16 17 // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "D"{{.*}}DIFlagTypePassByValue 18 struct D { 19 D(); 20 }; 21 D::D() {} 22 23 // Test for constexpr constructor. 24 // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "E"{{.*}}DIFlagTypePassByValue 25 struct E { 26 constexpr E(){}; 27 } TestE; 28 29 // Test for trivial constructor. 30 // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "F"{{.*}}DIFlagTypePassByValue 31 struct F { 32 F() = default; 33 F(int) {} 34 int i; 35 } TestF; 36 37 // Test for trivial constructor. 38 // CHECK-DAG: ![[G:.*]] ={{.*}}!DICompositeType({{.*}}name: "G"{{.*}}DIFlagTypePassByValue 39 // CHECK-DAG: !DICompositeType({{.*}}scope: ![[G]], {{.*}}DIFlagTypePassByValue 40 struct G { 41 G() : g_(0) {} 42 struct { 43 int g_; 44 }; 45 } TestG; 46 47 // Test for an aggregate class with an implicit non-trivial default constructor 48 // that is not instantiated. 49 // CHECK-DAG: !DICompositeType({{.*}}name: "H",{{.*}}DIFlagTypePassByValue 50 struct H { 51 B b; 52 }; 53 void f(H h) {} 54 55 // Test for an aggregate class with an implicit non-trivial default constructor 56 // that is instantiated. 57 // CHECK-DAG: !DICompositeType({{.*}}name: "J",{{.*}}DIFlagTypePassByValue 58 struct J { 59 B b; 60 }; 61 void f(decltype(J()) j) {} 62 63 // Test for a class with trivial default constructor that is not instantiated. 64 // CHECK-DAG: !DICompositeType({{.*}}name: "K",{{.*}}DIFlagTypePassByValue 65 class K { 66 int i; 67 }; 68 void f(K k) {} 69 70 // Test that we don't use constructor homing on lambdas. 71 // CHECK-DAG: ![[L:.*]] ={{.*}}!DISubprogram({{.*}}name: "L" 72 // CHECK-DAG: !DICompositeType({{.*}}scope: ![[L]], {{.*}}DIFlagTypePassByValue 73 void L() { 74 auto func = [&]() {}; 75 } 76 77 // Check that types are being added to retained types list. 78 // CHECK-DAG: !DICompileUnit{{.*}}retainedTypes: ![[RETAINED:[0-9]+]] 79 // CHECK-DAG: ![[RETAINED]] = {{.*}}![[C]] 80