diff options
-rw-r--r-- | clang/lib/CodeGen/CoverageMappingGen.cpp | 5 | ||||
-rw-r--r-- | clang/test/CoverageMapping/lambda.cpp | 17 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp index 4bd4eb6da2e..55e7334acc2 100644 --- a/clang/lib/CodeGen/CoverageMappingGen.cpp +++ b/clang/lib/CodeGen/CoverageMappingGen.cpp @@ -850,6 +850,11 @@ struct CounterCoverageMappingBuilder extendRegion(E->getRHS()); propagateCounts(getRegionCounter(E), E->getRHS()); } + + void VisitLambdaExpr(const LambdaExpr *LE) { + // Lambdas are treated as their own functions for now, so we shouldn't + // propagate counts into them. + } }; } diff --git a/clang/test/CoverageMapping/lambda.cpp b/clang/test/CoverageMapping/lambda.cpp new file mode 100644 index 00000000000..fb018e6b477 --- /dev/null +++ b/clang/test/CoverageMapping/lambda.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -x c++ -std=c++11 -triple %itanium_abi_triple -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s -main-file-name lambda.cpp | FileCheck %s + +// CHECK-LABEL: _Z3fooi: +void foo(int i) { // CHECK: File 0, [[@LINE]]:17 -> {{[0-9]+}}:2 = #0 + auto f = [](int x) { + return x + 1; + }; + + f(i); + // Make sure the zero region after the return doesn't escape the lambda. + // CHECK-NOT: File 0, {{[0-9:]+}} -> [[@LINE+1]]:2 = 0 +} + +int main(int argc, const char *argv[]) { + foo(1); + return 0; +} |