[CodeGen] Add param info for ctors with ABI args.

This fixes a few assertion failures. Please see the added test case.

llvm-svn: 295894
This commit is contained in:
George Burgess IV 2017-02-22 22:38:25 +00:00
parent db56e5a89a
commit 75b34a9610
2 changed files with 26 additions and 1 deletions

View File

@ -288,7 +288,17 @@ CodeGenTypes::arrangeCXXStructorDeclaration(const CXXMethodDecl *MD,
if (PassParams)
appendParameterTypes(*this, argTypes, paramInfos, FTP, MD);
TheCXXABI.buildStructorSignature(MD, Type, argTypes);
CGCXXABI::AddedStructorArgs AddedArgs =
TheCXXABI.buildStructorSignature(MD, Type, argTypes);
if (!paramInfos.empty()) {
// Note: prefix implies after the first param.
if (AddedArgs.Prefix)
paramInfos.insert(paramInfos.begin() + 1, AddedArgs.Prefix,
FunctionProtoType::ExtParameterInfo{});
if (AddedArgs.Suffix)
paramInfos.append(AddedArgs.Suffix,
FunctionProtoType::ExtParameterInfo{});
}
RequiredArgs required =
(PassParams && MD->isVariadic() ? RequiredArgs(argTypes.size())

View File

@ -0,0 +1,15 @@
// RUN: %clang_cc1 -triple x86_64-apple -emit-llvm -fobjc-arc -o - %s
// RUN: %clang_cc1 -triple x86_64-windows -emit-llvm -fobjc-arc -o - %s
//
// Test caess where we weren't properly adding parameter infos declarations,
// which caused assertions to fire. Hence, no CHECKs.
struct VirtualBase {
VirtualBase(__attribute__((ns_consumed)) id x);
};
struct WithVirtualBase : virtual VirtualBase {
WithVirtualBase(__attribute__((ns_consumed)) id x);
};
WithVirtualBase::WithVirtualBase(__attribute__((ns_consumed)) id x)
: VirtualBase(x) {}