Inliner::OptimizationRemark: Fix crash in clang/test/Frontend/optimization-remark...
authorNAKAMURA Takumi <geek4civic@gmail.com>
Thu, 17 Apr 2014 12:22:14 +0000 (12:22 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Thu, 17 Apr 2014 12:22:14 +0000 (12:22 +0000)
DebugLoc in Callsite would not live after Inliner. It should be copied before Inliner.

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

include/llvm/IR/DiagnosticInfo.h
lib/Transforms/IPO/Inliner.cpp

index e08203579529746c87d26fb8786d1762a3e4fa3a..604de1fed93d8ce16a87e920e3f4ebdd65a469c5 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "llvm-c/Core.h"
 #include "llvm/ADT/ArrayRef.h"
 
 #include "llvm-c/Core.h"
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/IR/DebugLoc.h"
 #include "llvm/Support/Casting.h"
 
 namespace llvm {
 #include "llvm/Support/Casting.h"
 
 namespace llvm {
@@ -289,7 +290,7 @@ private:
   const Function &Fn;
 
   /// Debug location where this diagnostic is triggered.
   const Function &Fn;
 
   /// Debug location where this diagnostic is triggered.
-  const DebugLoc &DLoc;
+  DebugLoc DLoc;
 
   /// Message to report.
   const Twine &Msg;
 
   /// Message to report.
   const Twine &Msg;
index 17be3b2b4472b7281cf835c5cba31cd61a2cb448..6d3ceef86c85807e322a00c4e1df8c1645e8ddb4 100644 (file)
@@ -518,6 +518,9 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC) {
         if (!shouldInline(CS))
           continue;
 
         if (!shouldInline(CS))
           continue;
 
+        // Get DebugLoc to report. CS will be invalid after Inliner.
+        DebugLoc DLoc = CS.getInstruction()->getDebugLoc();
+
         // Attempt to inline the function.
         if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas,
                                   InlineHistoryID, InsertLifetime, DL))
         // Attempt to inline the function.
         if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas,
                                   InlineHistoryID, InsertLifetime, DL))
@@ -526,7 +529,7 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC) {
 
         // Report the inline decision.
         Caller->getContext().emitOptimizationRemark(
 
         // Report the inline decision.
         Caller->getContext().emitOptimizationRemark(
-            DEBUG_TYPE, *Caller, CS.getInstruction()->getDebugLoc(),
+            DEBUG_TYPE, *Caller, DLoc,
             Twine(Callee->getName() + " inlined into " + Caller->getName()));
 
         // If inlining this function gave us any new call sites, throw them
             Twine(Callee->getName() + " inlined into " + Caller->getName()));
 
         // If inlining this function gave us any new call sites, throw them