diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-01-31 22:54:50 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-01-31 22:54:50 +0000 |
commit | 4982b82b739199de64e852b114cd70b65a29cf8c (patch) | |
tree | 5294c690c21731953b26695fdb6032f74394b17c /clang/lib/CodeGen/CGDeclCXX.cpp | |
parent | 394e34f5c2ed7d33b81dc3abdc7687af0b7ceb1a (diff) | |
download | bcm5719-llvm-4982b82b739199de64e852b114cd70b65a29cf8c.tar.gz bcm5719-llvm-4982b82b739199de64e852b114cd70b65a29cf8c.zip |
[ms-cxxabi] Use x86_cdeclmethodcc for __cdecl methods on win32
This fixes PR15768, where the sret parameter and the 'this' parameter
are in the wrong order.
Instance methods compiled by MSVC never return records in registers,
they always return indirectly through an sret pointer. That sret
pointer always comes after the 'this' parameter, for both __cdecl and
__thiscall methods.
Unfortunately, the same is true for other calling conventions, so we'll
have to change the overall approach here relatively soon.
Reviewers: rsmith
Differential Revision: http://llvm-reviews.chandlerc.com/D2664
llvm-svn: 200587
Diffstat (limited to 'clang/lib/CodeGen/CGDeclCXX.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDeclCXX.cpp | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp index 73f3c987d1b..bc8620d4424 100644 --- a/clang/lib/CodeGen/CGDeclCXX.cpp +++ b/clang/lib/CodeGen/CGDeclCXX.cpp @@ -502,11 +502,9 @@ llvm::Function *CodeGenFunction::generateDestroyHelper( FunctionArgList args; ImplicitParamDecl dst(0, SourceLocation(), 0, getContext().VoidPtrTy); args.push_back(&dst); - - const CGFunctionInfo &FI = - CGM.getTypes().arrangeFunctionDeclaration(getContext().VoidTy, args, - FunctionType::ExtInfo(), - /*variadic*/ false); + + const CGFunctionInfo &FI = CGM.getTypes().arrangeFreeFunctionDeclaration( + getContext().VoidTy, args, FunctionType::ExtInfo(), /*variadic=*/false); llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FI); llvm::Function *fn = CreateGlobalInitOrDestructFunction(CGM, FTy, "__cxx_global_array_dtor"); |