mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-09 09:06:08 +00:00

This makes the C++ ABI depend entirely on the target: MS ABI for -win32 triples, Itanium otherwise. It's no longer possible to do weird combinations. To be able to run a test with a specific ABI without constraining it to a specific triple, new substitutions are added to lit: %itanium_abi_triple and %ms_abi_triple can be used to get the current target triple adjusted to the desired ABI. For example, if the test suite is running with the i686-pc-win32 target, %itanium_abi_triple will expand to i686-pc-mingw32. Differential Revision: http://llvm-reviews.chandlerc.com/D2545 llvm-svn: 199250
77 lines
1.2 KiB
C++
77 lines
1.2 KiB
C++
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s
|
|
|
|
struct A {
|
|
A(); A(const A&); A(A&&); A &operator=(const A&); A &operator=(A&&); ~A();
|
|
};
|
|
struct B {
|
|
B(); B(const B&); B(B&&); B &operator=(const B&); B &operator=(B&&); ~B();
|
|
};
|
|
|
|
union U {
|
|
U();
|
|
U(const U &);
|
|
U(U &&);
|
|
U &operator=(const U&);
|
|
U &operator=(U&&);
|
|
~U();
|
|
|
|
A a;
|
|
int n;
|
|
};
|
|
|
|
// CHECK-NOT: _ZN1A
|
|
U::U() {}
|
|
U::U(const U&) {}
|
|
U::U(U&&) {}
|
|
U &U::operator=(const U&) { return *this; }
|
|
U &U::operator=(U &&) { return *this; }
|
|
U::~U() {}
|
|
|
|
struct S {
|
|
S();
|
|
S(const S &);
|
|
S(S &&);
|
|
S &operator=(const S&);
|
|
S &operator=(S&&);
|
|
~S();
|
|
|
|
union {
|
|
A a;
|
|
int n;
|
|
};
|
|
B b;
|
|
int m;
|
|
};
|
|
|
|
// CHECK: _ZN1SC2Ev
|
|
// CHECK-NOT: _ZN1A
|
|
// CHECK: _ZN1BC1Ev
|
|
S::S() {}
|
|
|
|
// CHECK-NOT: _ZN1A
|
|
|
|
// CHECK: _ZN1SC2ERKS_
|
|
// CHECK-NOT: _ZN1A
|
|
// CHECK: _ZN1BC1Ev
|
|
S::S(const S&) {}
|
|
|
|
// CHECK-NOT: _ZN1A
|
|
|
|
// CHECK: _ZN1SC2EOS_
|
|
// CHECK-NOT: _ZN1A
|
|
// CHECK: _ZN1BC1Ev
|
|
S::S(S&&) {}
|
|
|
|
// CHECK-NOT: _ZN1A
|
|
// CHECK-NOT: _ZN1B
|
|
S &S::operator=(const S&) { return *this; }
|
|
|
|
S &S::operator=(S &&) { return *this; }
|
|
|
|
// CHECK: _ZN1SD2Ev
|
|
// CHECK-NOT: _ZN1A
|
|
// CHECK: _ZN1BD1Ev
|
|
S::~S() {}
|
|
|
|
// CHECK-NOT: _ZN1A
|