Support indirect calls
authorChris Lattner <sabre@nondot.org>
Sat, 13 Oct 2001 06:52:31 +0000 (06:52 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 13 Oct 2001 06:52:31 +0000 (06:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@764 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/InlineSimple.cpp

index c8afc27e3ecb03cce86cdf4562b67d77b996f6fb..609c3f14d985bf31d3f9e452ceca4c0b51d3de89 100644 (file)
@@ -69,7 +69,8 @@ bool opt::InlineMethod(BasicBlock::iterator CIIt) {
 
   CallInst *CI = cast<CallInst>(*CIIt);
   const Method *CalledMeth = CI->getCalledMethod();
-  if (CalledMeth->isExternal()) return false;  // Can't inline external method!
+  if (CalledMeth == 0 ||   // Can't inline external method or indirect call!
+      CalledMeth->isExternal()) return false;
   Method *CurrentMeth = CI->getParent()->getParent();
 
   //cerr << "Inlining " << CalledMeth->getName() << " into " 
@@ -238,7 +239,7 @@ static inline bool DoMethodInlining(BasicBlock *BB) {
     if (CallInst *CI = dyn_cast<CallInst>(*I)) {
       // Check to see if we should inline this method
       Method *M = CI->getCalledMethod();
-      if (ShouldInlineMethod(CI, M))
+      if (M && ShouldInlineMethod(CI, M))
        return InlineMethod(I);
     }
   }