mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
fix PR6858: a dangling pointer use bug which was caused
by switching CachedFunctionInfo from a std::map to a ValueMap (which is implemented in terms of a DenseMap). DenseMap has different iterator invalidation semantics than std::map. This should hopefully fix the dragonegg builder. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44b04a5f4a
commit
f84755b836
@ -319,8 +319,13 @@ InlineCost InlineCostAnalyzer::getInlineCost(CallSite CS,
|
||||
FunctionInfo &CallerFI = CachedFunctionInfo[Caller];
|
||||
|
||||
// If we haven't calculated this information yet, do so now.
|
||||
if (CallerFI.Metrics.NumBlocks == 0)
|
||||
if (CallerFI.Metrics.NumBlocks == 0) {
|
||||
CallerFI.analyzeFunction(Caller);
|
||||
|
||||
// Recompute the CalleeFI pointer, getting Caller could have invalidated
|
||||
// it.
|
||||
CalleeFI = &CachedFunctionInfo[Callee];
|
||||
}
|
||||
|
||||
// Don't inline a callee with dynamic alloca into a caller without them.
|
||||
// Functions containing dynamic alloca's are inefficient in various ways;
|
||||
@ -426,6 +431,8 @@ InlineCostAnalyzer::growCachedCostInfo(Function *Caller, Function *Callee) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Since CalleeMetrics were already calculated, we know that the CallerMetrics
|
||||
// reference isn't invalidated: both were in the DenseMap.
|
||||
CallerMetrics.NeverInline |= CalleeMetrics.NeverInline;
|
||||
CallerMetrics.usesDynamicAlloca |= CalleeMetrics.usesDynamicAlloca;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user