summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2017-09-19 00:29:46 +0000
committerVedant Kumar <vsk@apple.com>2017-09-19 00:29:46 +0000
commitef8e05ff07e3ff6b7d9aedb615b12a2ed61b9d01 (patch)
tree377f3752db4de571989a071f5f097bdc114babdf
parent648752ab14a20d25bc61db03bfe7866073e9e61f (diff)
downloadbcm5719-llvm-ef8e05ff07e3ff6b7d9aedb615b12a2ed61b9d01.tar.gz
bcm5719-llvm-ef8e05ff07e3ff6b7d9aedb615b12a2ed61b9d01.zip
[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
-rw-r--r--clang/lib/CodeGen/CoverageMappingGen.cpp8
-rw-r--r--clang/test/CoverageMapping/deferred-region.cpp8
2 files changed, 15 insertions, 1 deletions
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<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)));
}
diff --git a/clang/test/CoverageMapping/deferred-region.cpp b/clang/test/CoverageMapping/deferred-region.cpp
index 41b5e6be8c2..743b635a907 100644
--- a/clang/test/CoverageMapping/deferred-region.cpp
+++ b/clang/test/CoverageMapping/deferred-region.cpp
@@ -28,6 +28,14 @@ void baz() { // CHECK: [[@LINE]]:12 -> [[@LINE+2]]:2
return; // CHECK-NOT: File
}
+// CHECK-LABEL: _Z3mazv:
+void maz() {
+ if (true)
+ return; // CHECK: Gap,File 0, [[@LINE]]:11 -> 36:3 = (#0 - #1)
+
+ return; // CHECK-NOT: Gap
+}
+
// CHECK-LABEL: _Z3bari:
void bar(int x) {
IF (x)
OpenPOWER on IntegriCloud