[PowerPC] Darwin byval arguments are not immutable
authorHal Finkel <hfinkel@anl.gov>
Sat, 16 Aug 2014 00:16:29 +0000 (00:16 +0000)
committerHal Finkel <hfinkel@anl.gov>
Sat, 16 Aug 2014 00:16:29 +0000 (00:16 +0000)
On PPC/Darwin, byval arguments occur at fixed stack offsets in the callee's
frame, but are not immutable -- the pointer value is directly available to the
higher-level code as the address of the argument, and the value of the byval
argument can be modified at the IR level.

This is necessary, but not sufficient, to fix PR20280. When PR20280 is fixed in
a follow-up commit, its test case will cover this change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215793 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelLowering.cpp

index 8d28d7919727640db7be70bf5a4bab3dcdfcc910..42e724d3f1e8f1d5ef84922da22d780491b0e419 100644 (file)
@@ -3066,7 +3066,7 @@ PPCTargetLowering::LowerFormalArguments_Darwin(
         CurArgOffset = CurArgOffset + (4 - ObjSize);
       }
       // The value of the object is its address.
-      int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, true);
+      int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, false);
       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
       InVals.push_back(FIN);
       if (ObjSize==1 || ObjSize==2) {