diff options
author | George Karpenkov <ekarpenkov@apple.com> | 2017-05-25 01:41:46 +0000 |
---|---|---|
committer | George Karpenkov <ekarpenkov@apple.com> | 2017-05-25 01:41:46 +0000 |
commit | a1c532784d358e1840031f727dfc4564fb653f1a (patch) | |
tree | 4ac7f8b09941e5ee23575d15a39f409518250138 /llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | |
parent | 1fbc01f70f60a7034b06ab85d8936b0b3f80e156 (diff) | |
download | bcm5719-llvm-a1c532784d358e1840031f727dfc4564fb653f1a.tar.gz bcm5719-llvm-a1c532784d358e1840031f727dfc4564fb653f1a.zip |
Fix coverage check for full post-dominator basic blocks.
Coverage instrumentation which does not instrument full post-dominators
and full-dominators may skip valid paths, as the reasoning for skipping
blocks may become circular.
This patch fixes that, by only skipping
full post-dominators with multiple predecessors, as such predecessors by
definition can not be full-dominators.
llvm-svn: 303827
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index 4bc0a713311..300085eccb0 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -401,7 +401,10 @@ static bool shouldInstrumentBlock(const Function &F, const BasicBlock *BB, if (Options.NoPrune || &F.getEntryBlock() == BB) return true; - return !(isFullDominator(BB, DT) || isFullPostDominator(BB, PDT)); + // Do not instrument full dominators, or full post-dominators with multiple + // predecessors. + return !isFullDominator(BB, DT) + && !(isFullPostDominator(BB, PDT) && !BB->getSinglePredecessor()); } bool SanitizerCoverageModule::runOnFunction(Function &F) { |