]> granicus.if.org Git - clang/commitdiff
Fixed incorrect type of alloca (GNU runtime).
authorDavid Chisnall <csdavec@swan.ac.uk>
Fri, 30 Apr 2010 13:36:12 +0000 (13:36 +0000)
committerDavid Chisnall <csdavec@swan.ac.uk>
Fri, 30 Apr 2010 13:36:12 +0000 (13:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102711 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCGNU.cpp

index 0f4354c75ae7b7a95e435561bcbf260a6970febd..9e999ace1609b35aa2a2cc0ee1779d6fb1450802 100644 (file)
@@ -648,8 +648,10 @@ CGObjCGNU::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
       LookupFn->setDoesNotCapture(1);
     }
 
-    llvm::Instruction *slot =
+    llvm::CallInst *slot =
         Builder.CreateCall3(lookupFunction, ReceiverPtr, cmd, self);
+    slot->setOnlyReadsMemory();
+
     imp = Builder.CreateLoad(Builder.CreateStructGEP(slot, 4));
     llvm::Value *impMD[] = {
           llvm::MDString::get(VMContext, Sel.getAsString()),
@@ -688,7 +690,8 @@ CGObjCGNU::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
       llvm::Value *v = msgRet.getAggregateAddr();
       llvm::PHINode *phi = Builder.CreatePHI(v->getType());
       const llvm::PointerType *RetTy = cast<llvm::PointerType>(v->getType());
-      llvm::AllocaInst *NullVal = CGF.CreateTempAlloca(RetTy, "null");
+      llvm::AllocaInst *NullVal = 
+          CGF.CreateTempAlloca(RetTy->getElementType(), "null");
       CGF.InitTempAlloca(NullVal,
           llvm::Constant::getNullValue(RetTy->getElementType()));
       phi->addIncoming(v, messageBB);