forked from OSchip/llvm-project
Revert "[Sema] Make canPassInRegisters return true if the CXXRecordDecl passed"
This reverts commit r350920 as it is not clear whether we should force a class to be returned in registers when copy and move constructors are both deleted. For more background, see the following discussion: http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20190128/259907.html llvm-svn: 352822
This commit is contained in:
parent
ef9a3881d0
commit
9e67183121
|
@ -5889,9 +5889,6 @@ static bool canPassInRegisters(Sema &S, CXXRecordDecl *D,
|
|||
if (D->isDependentType() || D->isInvalidDecl())
|
||||
return false;
|
||||
|
||||
if (D->hasAttr<TrivialABIAttr>())
|
||||
return true;
|
||||
|
||||
// Clang <= 4 used the pre-C++11 rule, which ignores move operations.
|
||||
// The PS4 platform ABI follows the behavior of Clang 3.2.
|
||||
if (CCK == TargetInfo::CCK_ClangABI4OrPS4)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: %clang_cc1 -triple arm64-apple-ios11 -std=c++17 -fcxx-exceptions -fexceptions -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm64-apple-ios11 -std=c++17 -fcxx-exceptions -fexceptions -fclang-abi-compat=4.0 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm64-apple-ios11 -std=c++11 -fcxx-exceptions -fexceptions -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm64-apple-ios11 -std=c++11 -fcxx-exceptions -fexceptions -fclang-abi-compat=4.0 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK: %[[STRUCT_SMALL:.*]] = type { i32* }
|
||||
// CHECK: %[[STRUCT_LARGE:.*]] = type { i32*, [128 x i32] }
|
||||
|
@ -43,13 +43,6 @@ struct HasNonTrivial {
|
|||
NonTrivial m;
|
||||
};
|
||||
|
||||
struct __attribute__((trivial_abi)) CopyMoveDeleted {
|
||||
CopyMoveDeleted(int);
|
||||
CopyMoveDeleted(const CopyMoveDeleted &) = delete;
|
||||
CopyMoveDeleted(CopyMoveDeleted &&) = delete;
|
||||
int a;
|
||||
};
|
||||
|
||||
// CHECK: define void @_Z14testParamSmall5Small(i64 %[[A_COERCE:.*]])
|
||||
// CHECK: %[[A:.*]] = alloca %[[STRUCT_SMALL]], align 8
|
||||
// CHECK: %[[COERCE_DIVE:.*]] = getelementptr inbounds %[[STRUCT_SMALL]], %[[STRUCT_SMALL]]* %[[A]], i32 0, i32 0
|
||||
|
@ -244,11 +237,3 @@ void calleeExceptionLarge(Large, Large);
|
|||
void testExceptionLarge() {
|
||||
calleeExceptionLarge(Large(), Large());
|
||||
}
|
||||
|
||||
// A class with deleted copy and move constructors can still be passed or
|
||||
// returned in registers if the class is annotated with trivial_abi.
|
||||
|
||||
// CHECK: define i64 @_Z19testCopyMoveDeletedi(i32 %
|
||||
CopyMoveDeleted testCopyMoveDeleted(int a) {
|
||||
return a;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue