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
This commit is contained in:
Justin Bogner
2015-04-24 23:37:57 +00:00
parent 8c384bbb35
commit e3654ce7ab
2 changed files with 22 additions and 2 deletions

View File

@@ -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());
}