diff options
| author | Vedant Kumar <vsk@apple.com> | 2017-09-19 00:29:46 +0000 |
|---|---|---|
| committer | Vedant Kumar <vsk@apple.com> | 2017-09-19 00:29:46 +0000 |
| commit | ef8e05ff07e3ff6b7d9aedb615b12a2ed61b9d01 (patch) | |
| tree | 377f3752db4de571989a071f5f097bdc114babdf | |
| parent | 648752ab14a20d25bc61db03bfe7866073e9e61f (diff) | |
| download | bcm5719-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.cpp | 8 | ||||
| -rw-r--r-- | clang/test/CoverageMapping/deferred-region.cpp | 8 |
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) |

