From ef8e05ff07e3ff6b7d9aedb615b12a2ed61b9d01 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 19 Sep 2017 00:29:46 +0000 Subject: [Coverage] Remove deferred region for trailing return, fixes PR34611 As a special case, throw away deferred regions for trailing returns. This allows the closing curly brace to have a count, and is less distracting. llvm-svn: 313603 --- clang/lib/CodeGen/CoverageMappingGen.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'clang/lib/CodeGen') diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp index 943c7e0ccd0..8f6f3ed5803 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(Body)) + if (dyn_cast_or_null(CS->body_back())) + DeferredRegion = None; + + // Complete any deferred regions introduced by the last statement. popRegions(completeDeferred(ExitCount, getEnd(Body))); } -- cgit v1.2.3