aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CoverageMappingGen.cpp
diff options
context:
space:
mode:
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 943c7e0..8f6f3ed 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -770,7 +770,13 @@ struct CounterCoverageMappingBuilder
Counter ExitCount = propagateCounts(getRegionCounter(Body), Body);
assert(RegionStack.empty() && "Regions entered but never exited");
- // Complete any deferred regions introduced by the last statement in a decl.
+ // Special case: if the last statement is a return, throw away the
+ // deferred region. This allows the closing brace to have a count.
+ if (auto *CS = dyn_cast_or_null<CompoundStmt>(Body))
+ if (dyn_cast_or_null<ReturnStmt>(CS->body_back()))
+ DeferredRegion = None;
+
+ // Complete any deferred regions introduced by the last statement.
popRegions(completeDeferred(ExitCount, getEnd(Body)));
}