diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-10-15 04:54:54 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-10-15 04:54:54 +0000 |
commit | 1573d73367a454b033dd6f840a1a4cb6a739d152 (patch) | |
tree | a59720ecdd88e5930d92c894be2c4b9b8100d0d9 /clang/lib/CodeGen/CGClass.cpp | |
parent | 5b993500aec59e3b42038e1d335da6fc6a78886d (diff) | |
download | bcm5719-llvm-1573d73367a454b033dd6f840a1a4cb6a739d152.tar.gz bcm5719-llvm-1573d73367a454b033dd6f840a1a4cb6a739d152.zip |
MS ABI: Use the correct this arg when generating implicit array copy ctor
We assumed the last argument of the copy constructor was the this
pointer. However, this is not the case under the MS ABI.
llvm-svn: 219775
Diffstat (limited to 'clang/lib/CodeGen/CGClass.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGClass.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp index d7010c7e916..1bba4a70a14 100644 --- a/clang/lib/CodeGen/CGClass.cpp +++ b/clang/lib/CodeGen/CGClass.cpp @@ -580,9 +580,8 @@ static void EmitMemberInitializer(CodeGenFunction &CGF, CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(MemberInit->getInit()); if (BaseElementTy.isPODType(CGF.getContext()) || (CE && CE->getConstructor()->isTrivial())) { - // Find the source pointer. We know it's the last argument because - // we know we're in an implicit copy constructor. - unsigned SrcArgIndex = Args.size() - 1; + unsigned SrcArgIndex = + CGF.CGM.getCXXABI().getSrcArgforCopyCtor(Constructor, Args); llvm::Value *SrcPtr = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex])); LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); |