From: NAKAMURA Takumi Date: Thu, 17 Apr 2014 12:22:14 +0000 (+0000) Subject: Inliner::OptimizationRemark: Fix crash in clang/test/Frontend/optimization-remark... X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=207be301e37ec95ba0cfe53d927c47722ee3e3ce 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206459 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/IR/DiagnosticInfo.h b/include/llvm/IR/DiagnosticInfo.h index e0820357952..604de1fed93 100644 --- a/include/llvm/IR/DiagnosticInfo.h +++ b/include/llvm/IR/DiagnosticInfo.h @@ -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; diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 17be3b2b447..6d3ceef86c8 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -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