summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CoverageMappingGen.cpp
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2015-04-24 23:37:57 +0000
committerJustin Bogner <mail@justinbogner.com>2015-04-24 23:37:57 +0000
commite3654ce7abc781fed9fd42fffb1bec23ef05a070 (patch)
tree6c26cfde6a98112aa6196bc0178bdc9660ed6db6 /clang/lib/CodeGen/CoverageMappingGen.cpp
parent8c384bbb3563a2a62fc19cf6044b1effd69e19db (diff)
downloadbcm5719-llvm-e3654ce7abc781fed9fd42fffb1bec23ef05a070.tar.gz
bcm5719-llvm-e3654ce7abc781fed9fd42fffb1bec23ef05a070.zip
InstrProf: Fix coverage maps for conditional operators
This fixes a crash when we're emitting coverage and a macro appears between two binary conditional operators, ie, "foo ?: MACRO ?: bar", and fixes the interaction of macros and conditional operators in general. llvm-svn: 235793
Diffstat (limited to 'clang/lib/CodeGen/CoverageMappingGen.cpp')
-rw-r--r--clang/lib/CodeGen/CoverageMappingGen.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp
index d26eceded3c..11b9478262a 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -830,7 +830,13 @@ struct CounterCoverageMappingBuilder
Counter ParentCount = getRegion().getCounter();
Counter TrueCount = getRegionCounter(E);
- propagateCounts(TrueCount, E->getTrueExpr());
+ Visit(E->getCond());
+
+ if (!isa<BinaryConditionalOperator>(E)) {
+ extendRegion(E->getTrueExpr());
+ propagateCounts(TrueCount, E->getTrueExpr());
+ }
+ extendRegion(E->getFalseExpr());
propagateCounts(subtractCounters(ParentCount, TrueCount),
E->getFalseExpr());
}
OpenPOWER on IntegriCloud