From b341efce31feb12f416bc01b62fd4c47fb223903 Mon Sep 17 00:00:00 2001 From: Alina Sbirlea Date: Wed, 24 Apr 2019 00:28:29 +0000 Subject: Revert [AliasAnalysis] AAResults preserves AAManager. Triggers use-after-free. llvm-svn: 359055 --- llvm/lib/Analysis/AliasAnalysis.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Analysis/AliasAnalysis.cpp') diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index 4bb3b80511a..06a33f659c1 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -79,10 +79,12 @@ AAResults::~AAResults() { bool AAResults::invalidate(Function &F, const PreservedAnalyses &PA, FunctionAnalysisManager::Invalidator &Inv) { - // AAResults preserves the AAManager by default, due to the stateless nature - // of AliasAnalysis. There is no need to check whether it has been preserved - // explicitly. However, we still need to check if any of the dependencies end - // up being invalidated, and invalidate ourselves in that case. + // Check if the AA manager itself has been invalidated. + auto PAC = PA.getChecker(); + if (!PAC.preserved() && !PAC.preservedSet>()) + return true; // The manager needs to be blown away, clear everything. + + // Check all of the dependencies registered. for (AnalysisKey *ID : AADeps) if (Inv.invalidate(ID, F, PA)) return true; -- cgit v1.2.3