mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 18:31:23 +00:00
All glory to address sanitizer. ;]
It appears to have caught a use-after-free introduced as by r159567 and/or friends which call 'addPass' from many more places. The bug in 'addPass' doesn't appear to be new, and was spotted by inspection when ASan shown a bright light of a stacktrace at these functions. Hopefully this will fix the ASan failure -- I have no test case other than running an ASan-built clang over the test suite. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159614 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
769951f6cc
commit
6068c48498
@ -280,11 +280,17 @@ AnalysisID TargetPassConfig::getPassSubstitution(AnalysisID ID) const {
|
||||
void TargetPassConfig::addPass(Pass *P) {
|
||||
assert(!Initialized && "PassConfig is immutable");
|
||||
|
||||
// Cache the Pass ID here in case the pass manager finds this pass is
|
||||
// redundant with ones already scheduled / available, and deletes it.
|
||||
// Fundamentally, once we add the pass to the manager, we no longer own it
|
||||
// and shouldn't reference it.
|
||||
AnalysisID PassID = P->getPassID();
|
||||
|
||||
if (Started && !Stopped)
|
||||
PM->add(P);
|
||||
if (StopAfter == P->getPassID())
|
||||
if (StopAfter == PassID)
|
||||
Stopped = true;
|
||||
if (StartAfter == P->getPassID())
|
||||
if (StartAfter == PassID)
|
||||
Started = true;
|
||||
if (Stopped && !Started)
|
||||
report_fatal_error("Cannot stop compilation after pass that is not run");
|
||||
|
Loading…
Reference in New Issue
Block a user