1 // RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s 2 3 // Not trivially copyable because of the explicit destructor. 4 // CHECK-DAG: !DICompositeType({{.*}}, name: "RefDtor",{{.*}}flags: DIFlagTypePassByReference 5 struct RefDtor { 6 int i; ~RefDtorRefDtor7 ~RefDtor() {} 8 } refDtor; 9 10 // Not trivially copyable because of the explicit copy constructor. 11 // CHECK-DAG: !DICompositeType({{.*}}, name: "RefCopy",{{.*}}flags: DIFlagTypePassByReference 12 struct RefCopy { 13 int i; 14 RefCopy() = default; RefCopyRefCopy15 RefCopy(RefCopy &Copy) {} 16 } refCopy; 17 18 // POD-like type even though it defines a destructor. 19 // CHECK-DAG: !DICompositeType({{.*}}, name: "Podlike", {{.*}}flags: DIFlagTypePassByValue 20 struct Podlike { 21 int i; 22 Podlike() = default; 23 Podlike(Podlike &&Move) = default; 24 ~Podlike() = default; 25 } podlike; 26 27 28 // This is a POD type. 29 // CHECK-DAG: !DICompositeType({{.*}}, name: "Pod",{{.*}}flags: DIFlagTypePassByValue 30 struct Pod { 31 int i; 32 } pod; 33 34 // This is definitely not a POD type. 35 // CHECK-DAG: !DICompositeType({{.*}}, name: "Complex",{{.*}}flags: DIFlagTypePassByReference 36 struct Complex { ComplexComplex37 Complex() {} ComplexComplex38 Complex(Complex &Copy) : i(Copy.i) {}; 39 int i; 40 } complex; 41 42 // This type is manually marked as trivial_abi. 43 // CHECK-DAG: !DICompositeType({{.*}}, name: "Marked",{{.*}}flags: DIFlagTypePassByValue 44 struct __attribute__((trivial_abi)) Marked { 45 int *p; 46 Marked(); 47 ~Marked(); 48 Marked(const Marked &) noexcept; 49 Marked &operator=(const Marked &); 50 } marked; 51