[llvm] [hwasan] Invalidate DominatorTreeAnalysis after each function is sanitized (PR #66935)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 20 11:19:18 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
<details>
<summary>Changes</summary>
HWAddressSanitizerPass::run sanitizes functions one by one. The sanitization of each function - which may split blocks via insertShadowTagCheck - may result in some cached analyses are invalid. This matters because sanitizeFunction(F', FAM) may indirectly call the global stack safety analysis, hence we need to make sure the analyses of F are up to date.
Bug report: https://github.com/llvm/llvm-project/issues/66934
---
Full diff: https://github.com/llvm/llvm-project/pull/66935.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp (+9-1)
``````````diff
diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
index 29770ece9c61eb2..1dc550ba8b54ea6 100644
--- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
@@ -430,8 +430,16 @@ PreservedAnalyses HWAddressSanitizerPass::run(Module &M,
HWAddressSanitizer HWASan(M, Options.CompileKernel, Options.Recover, SSI);
auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
- for (Function &F : M)
+ for (Function &F : M) {
HWASan.sanitizeFunction(F, FAM);
+ // After sanitizing F - which may split blocks via insertShadowTagCheck -
+ // some cached analyses are invalid. This matters because
+ // sanitizeFunction(F', FAM) may indirectly call the global stack safety
+ // analysis, hence we need to make sure the analyses of F are up to date.
+ PreservedAnalyses PA = PreservedAnalyses::all();
+ PA.abandon<DominatorTreeAnalysis>();
+ FAM.invalidate(F, PA);
+ }
PreservedAnalyses PA = PreservedAnalyses::none();
// GlobalsAA is considered stateless and does not get invalidated unless
``````````
</details>
https://github.com/llvm/llvm-project/pull/66935
More information about the llvm-commits
mailing list