| // RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple %itanium_abi_triple %s -o - | FileCheck %s |
| |
| // Not trivially copyable because of the explicit destructor. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "RefDtor",{{.*}}flags: DIFlagTypePassByReference |
| struct RefDtor { |
| int i; |
| ~RefDtor() {} |
| } refDtor; |
| |
| // Not trivially copyable because of the explicit copy constructor. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "RefCopy",{{.*}}flags: DIFlagTypePassByReference |
| struct RefCopy { |
| int i; |
| RefCopy() = default; |
| RefCopy(RefCopy &Copy) {} |
| } refCopy; |
| |
| // POD-like type even though it defines a destructor. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Podlike", {{.*}}flags: DIFlagTypePassByValue |
| struct Podlike { |
| int i; |
| Podlike() = default; |
| Podlike(Podlike &&Move) = default; |
| ~Podlike() = default; |
| } podlike; |
| |
| |
| // This is a POD type. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Pod",{{.*}}flags: DIFlagTypePassByValue |
| struct Pod { |
| int i; |
| } pod; |
| |
| // This is definitely not a POD type. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Complex",{{.*}}flags: DIFlagTypePassByReference |
| struct Complex { |
| Complex() {} |
| Complex(Complex &Copy) : i(Copy.i) {}; |
| int i; |
| } complex; |
| |
| // This type is manually marked as trivial_abi. |
| // CHECK-DAG: !DICompositeType({{.*}}, name: "Marked",{{.*}}flags: DIFlagTypePassByValue |
| struct __attribute__((trivial_abi)) Marked { |
| int *p; |
| Marked(); |
| ~Marked(); |
| Marked(const Marked &) noexcept; |
| Marked &operator=(const Marked &); |
| } marked; |