summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2017-05-25 01:41:46 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2017-05-25 01:41:46 +0000
commita1c532784d358e1840031f727dfc4564fb653f1a (patch)
tree4ac7f8b09941e5ee23575d15a39f409518250138 /llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
parent1fbc01f70f60a7034b06ab85d8936b0b3f80e156 (diff)
downloadbcm5719-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.cpp5
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) {
OpenPOWER on IntegriCloud