diff options
author | Justin Bogner <mail@justinbogner.com> | 2015-04-24 23:37:57 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2015-04-24 23:37:57 +0000 |
commit | e3654ce7abc781fed9fd42fffb1bec23ef05a070 (patch) | |
tree | 6c26cfde6a98112aa6196bc0178bdc9660ed6db6 /clang/lib/CodeGen/CoverageMappingGen.cpp | |
parent | 8c384bbb3563a2a62fc19cf6044b1effd69e19db (diff) | |
download | bcm5719-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.cpp | 8 |
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()); } |