Skip to content

opt crash with use-after-free in MemDep #3747

@edwintorok

Description

@edwintorok
Bugzilla Link 3375
Resolution FIXED
Resolved on Jan 22, 2009 18:27
Version unspecified
OS Linux
Attachments bugpoint reduced testcase

Extended Description

With TOT opt crashes when optimizing clamscan:
bugpoint --enable-valgrind in MultiSource/Applications/Clamav:

If you just use 'make bugpoint-opt' it'll show a crash in simplifycfg, or lcssa, etc. valgrind shows the problem in memdep.

$ /home/edwin/llvm-svn/llvm/Release/bin/bugpoint x.bc -gvn -memdep -memcpyopt -sccp -append-exit-code -Xlinker=-lz -input=/dev/null -output=Output/clamscan.out-nat -timeout=500 -mlimit=0 --enable-valgrind

Checking for crash with only these blocks: bb68 bb58 bb3.outer bb11 bb6 bb2 bb84 bb26 bb114 bb242... <191 total>: ^C==11910== Invalid read of size 8
==11910== at 0x6B69E9: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6EFA: llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(llvm::Value*, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54A85B: (anonymous namespace)::GVN::processNonLocalLoad(llvm::LoadInst*, llvm::SmallVectorImplllvm::Instruction*&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54C020: (anonymous namespace)::GVN::iterateOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54E352: (anonymous namespace)::GVN::runOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E26A: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E4A5: llvm::FPPassManager::runOnModule(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76DE46: llvm::MPPassManager::runOnModule(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E045: llvm::PassManagerImpl::run(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x4AF0CA: llvm::BugDriver::runPassesAsChild(std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> > const&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x494F98: llvm::BugDriver::run() (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x4B8865: main (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== Address 0x650f788 is 1,464 bytes inside a block of size 2,560 free'd
==11910== at 0x4C2111D: operator delete(void*) (vg_replace_malloc.c:342)
==11910== by 0x6BA847: llvm::DenseMap<llvm::PointerIntPair<llvm::Value*, 1u, bool>, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > >, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value*, 1u, bool> >, llvm::DenseMapInfo<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > > > >::grow(unsigned int) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6BA96A: llvm::DenseMap<llvm::PointerIntPair<llvm::Value*, 1u, bool>, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > >, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value*, 1u, bool> >, llvm::DenseMapInfo<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > > > >::operator[](llvm::PointerIntPair<llvm::Value*, 1u, bool> const&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6300: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910==
==11910== Invalid read of size 8
==11910== at 0x6B69ED: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6EFA: llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(llvm::Value*, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54A85B: (anonymous namespace)::GVN::processNonLocalLoad(llvm::LoadInst*, llvm::SmallVectorImplllvm::Instruction*&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54C020: (anonymous namespace)::GVN::iterateOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x54E352: (anonymous namespace)::GVN::runOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E26A: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E4A5: llvm::FPPassManager::runOnModule(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76DE46: llvm::MPPassManager::runOnModule(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x76E045: llvm::PassManagerImpl::run(llvm::Module&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x4AF0CA: llvm::BugDriver::runPassesAsChild(std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> > const&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x494F98: llvm::BugDriver::run() (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x4B8865: main (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== Address 0x650f780 is 1,456 bytes inside a block of size 2,560 free'd
==11910== at 0x4C2111D: operator delete(void*) (vg_replace_malloc.c:342)
==11910== by 0x6BA847: llvm::DenseMap<llvm::PointerIntPair<llvm::Value*, 1u, bool>, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > >, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value*, 1u, bool> >, llvm::DenseMapInfo<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > > > >::grow(unsigned int) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6BA96A: llvm::DenseMap<llvm::PointerIntPair<llvm::Value*, 1u, bool>, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > >, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value*, 1u, bool> >, llvm::DenseMapInfo<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, bool>, std::vector<std::pair<llvm::BasicBlock*, llvm::MemDepResult>, std::allocator<std::pair<llvm::BasicBlock*, llvm::MemDepResult> > > > > >::operator[](llvm::PointerIntPair<llvm::Value*, 1u, bool> const&) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6300: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
==11910== by 0x6B6A49: llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::Value*, unsigned long, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock*, llvm::MemDepResult> >&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfollvm::BasicBlock*, llvm::DenseMapInfollvm::Value* >&, bool) (in /home/edwin/llvm-svn/llvm/Release/bin/bugpoint)
Exited with error code '1'

*** Reduction Interrupted, cleaning up...

Emitted bitcode to 'bugpoint-reduced-simplified.bc'

*** You can reproduce the problem with: opt bugpoint-reduced-simplified.bc -gvn

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions