[llvm] r206459 - Inliner::OptimizationRemark: Fix crash in clang/test/Frontend/optimization-remark.c on some hosts, including --vg.

NAKAMURA Takumi geek4civic at gmail.com
Thu Apr 17 05:22:14 PDT 2014


Author: chapuni
Date: Thu Apr 17 07:22:14 2014
New Revision: 206459

URL: http://llvm.org/viewvc/llvm-project?rev=206459&view=rev
Log:
Inliner::OptimizationRemark: Fix crash in clang/test/Frontend/optimization-remark.c on some hosts, including --vg.

DebugLoc in Callsite would not live after Inliner. It should be copied before Inliner.

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

Modified: llvm/trunk/include/llvm/IR/DiagnosticInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DiagnosticInfo.h?rev=206459&r1=206458&r2=206459&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DiagnosticInfo.h (original)
+++ llvm/trunk/include/llvm/IR/DiagnosticInfo.h Thu Apr 17 07:22:14 2014
@@ -17,6 +17,7 @@
 
 #include "llvm-c/Core.h"
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/IR/DebugLoc.h"
 #include "llvm/Support/Casting.h"
 
 namespace llvm {
@@ -289,7 +290,7 @@ private:
   const Function &Fn;
 
   /// Debug location where this diagnostic is triggered.
-  const DebugLoc &DLoc;
+  DebugLoc DLoc;
 
   /// Message to report.
   const Twine &Msg;

Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=206459&r1=206458&r2=206459&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Thu Apr 17 07:22:14 2014
@@ -518,6 +518,9 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC
         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))
@@ -526,7 +529,7 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC
 
         // 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





More information about the llvm-commits mailing list