16c5f03a1SAdrian Prantl // RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s 26c5f03a1SAdrian Prantl 36c5f03a1SAdrian Prantl // Not trivially copyable because of the explicit destructor. 46c5f03a1SAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "RefDtor",{{.*}}flags: DIFlagTypePassByReference 56c5f03a1SAdrian Prantl struct RefDtor { 66c5f03a1SAdrian Prantl int i; ~RefDtorRefDtor76c5f03a1SAdrian Prantl ~RefDtor() {} 86c5f03a1SAdrian Prantl } refDtor; 96c5f03a1SAdrian Prantl 106c5f03a1SAdrian Prantl // Not trivially copyable because of the explicit copy constructor. 116c5f03a1SAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "RefCopy",{{.*}}flags: DIFlagTypePassByReference 126c5f03a1SAdrian Prantl struct RefCopy { 136c5f03a1SAdrian Prantl int i; 146c5f03a1SAdrian Prantl RefCopy() = default; RefCopyRefCopy156c5f03a1SAdrian Prantl RefCopy(RefCopy &Copy) {} 166c5f03a1SAdrian Prantl } refCopy; 176c5f03a1SAdrian Prantl 186c5f03a1SAdrian Prantl // POD-like type even though it defines a destructor. 196c5f03a1SAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "Podlike", {{.*}}flags: DIFlagTypePassByValue 206c5f03a1SAdrian Prantl struct Podlike { 216c5f03a1SAdrian Prantl int i; 226c5f03a1SAdrian Prantl Podlike() = default; 236c5f03a1SAdrian Prantl Podlike(Podlike &&Move) = default; 246c5f03a1SAdrian Prantl ~Podlike() = default; 256c5f03a1SAdrian Prantl } podlike; 266c5f03a1SAdrian Prantl 276c5f03a1SAdrian Prantl 286c5f03a1SAdrian Prantl // This is a POD type. 296c5f03a1SAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "Pod",{{.*}}flags: DIFlagTypePassByValue 306c5f03a1SAdrian Prantl struct Pod { 316c5f03a1SAdrian Prantl int i; 326c5f03a1SAdrian Prantl } pod; 336c5f03a1SAdrian Prantl 346c5f03a1SAdrian Prantl // This is definitely not a POD type. 356c5f03a1SAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "Complex",{{.*}}flags: DIFlagTypePassByReference 366c5f03a1SAdrian Prantl struct Complex { ComplexComplex376c5f03a1SAdrian Prantl Complex() {} ComplexComplex386c5f03a1SAdrian Prantl Complex(Complex &Copy) : i(Copy.i) {}; 396c5f03a1SAdrian Prantl int i; 406c5f03a1SAdrian Prantl } complex; 41*69fce12cSAdrian Prantl 42*69fce12cSAdrian Prantl // This type is manually marked as trivial_abi. 43*69fce12cSAdrian Prantl // CHECK-DAG: !DICompositeType({{.*}}, name: "Marked",{{.*}}flags: DIFlagTypePassByValue 44*69fce12cSAdrian Prantl struct __attribute__((trivial_abi)) Marked { 45*69fce12cSAdrian Prantl int *p; 46*69fce12cSAdrian Prantl Marked(); 47*69fce12cSAdrian Prantl ~Marked(); 48*69fce12cSAdrian Prantl Marked(const Marked &) noexcept; 49*69fce12cSAdrian Prantl Marked &operator=(const Marked &); 50*69fce12cSAdrian Prantl } marked; 51