[LLVMbugs] [Bug 6858] New: Use of freed memory in InlineCostAnalyzer::getInlineCost
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Sat Apr 17 08:55:31 PDT 2010
http://llvm.org/bugs/show_bug.cgi?id=6858
Summary: Use of freed memory in
InlineCostAnalyzer::getInlineCost
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: baldrick at free.fr
CC: llvmbugs at cs.uiuc.edu
Created an attachment (id=4691)
--> (http://llvm.org/bugs/attachment.cgi?id=4691)
testcase .ll
This is the reason changing std::map into ValueMap broke the dragonegg build.
It looks like the memory was freed when growing the ValueMap:
$ valgrind opt -inline -disable-output use_after_free.ll
==31149== Memcheck, a memory error detector
==31149== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==31149== Using Valgrind-3.6.0.SVN and LibVEX; rerun with -h for copyright info
==31149== Command: opt -inline -disable-output use_after_free.ll
==31149==
==31149== Invalid read of size 4
==31149== at 0x9D1081:
llvm::InlineCostAnalyzer::getInlineCost(llvm::CallSite,
llvm::SmallPtrSet<llvm::Function const*, 16u>&) (InlineCost.cpp:366)
==31149== by 0x8039EF: (anonymous
namespace)::SimpleInliner::getInlineCost(llvm::CallSite) (InlineSimple.cpp:40)
==31149== by 0x8046D4: llvm::Inliner::shouldInline(llvm::CallSite)
(Inliner.cpp:204)
==31149== by 0x8053D4: llvm::Inliner::runOnSCC(llvm::CallGraphSCC&)
(Inliner.cpp:380)
==31149== by 0x9985A2: (anonymous
namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&,
llvm::CallGraph&, bool&) (CallGraphSCCPass.cpp:109)
==31149== by 0x9994E8: (anonymous
namespace)::CGPassManager::runOnModule(llvm::Module&)
(CallGraphSCCPass.cpp:355)
==31149== by 0xB7CF12: llvm::MPPassManager::runOnModule(llvm::Module&)
(PassManager.cpp:1492)
==31149== by 0xB7D452: llvm::PassManagerImpl::run(llvm::Module&)
(PassManager.cpp:1573)
==31149== by 0xB7D98A: llvm::PassManager::run(llvm::Module&)
(PassManager.cpp:1610)
==31149== by 0x7B46A5: main (opt.cpp:544)
==31149== Address 0x62d73c0 is 7,280 bytes inside a block of size 7,680 free'd
==31149== at 0x4C26E54: operator delete(void*) (vg_replace_malloc.c:387)
==31149== by 0x802856:
llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >,
llvm::InlineCostAnalyzer::FunctionInfo,
llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >,
llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::grow(unsigned
int) (DenseMap.h:402)
==31149== by 0x8022EC:
llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >,
llvm::InlineCostAnalyzer::FunctionInfo,
llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >,
llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo>
>::InsertIntoBucket(llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&,
llvm::InlineCostAnalyzer::FunctionInfo const&,
std::pair<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >,
llvm::InlineCostAnalyzer::FunctionInfo>*) (DenseMap.h:282)
==31149== by 0x801B30:
llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >,
llvm::InlineCostAnalyzer::FunctionInfo,
llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >,
llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo>
>::FindAndConstruct(llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&)
(DenseMap.h:207)
==31149== by 0x80132E:
llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >,
llvm::InlineCostAnalyzer::FunctionInfo,
llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >,
llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo>
>::operator[](llvm::ValueMapCallbackVH<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&)
(DenseMap.h:211)
==31149== by 0x800E1F: llvm::ValueMap<llvm::Function const*,
llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function
const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo>
>::operator[](llvm::Function const* const&) (ValueMap.h:161)
==31149== by 0x9D0F40:
llvm::InlineCostAnalyzer::getInlineCost(llvm::CallSite,
llvm::SmallPtrSet<llvm::Function const*, 16u>&) (InlineCost.cpp:319)
==31149== by 0x8039EF: (anonymous
namespace)::SimpleInliner::getInlineCost(llvm::CallSite) (InlineSimple.cpp:40)
==31149== by 0x8046D4: llvm::Inliner::shouldInline(llvm::CallSite)
(Inliner.cpp:204)
==31149== by 0x8053D4: llvm::Inliner::runOnSCC(llvm::CallGraphSCC&)
(Inliner.cpp:380)
==31149== by 0x9985A2: (anonymous
namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&,
llvm::CallGraph&, bool&) (CallGraphSCCPass.cpp:109)
==31149== by 0x9994E8: (anonymous
namespace)::CGPassManager::runOnModule(llvm::Module&)
(CallGraphSCCPass.cpp:355)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list