aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CoverageMappingGen.cpp
diff options
context:
space:
mode:
authorZequan Wu <zequanwu@google.com>2023-09-15 17:06:04 -0400
committerGitHub <noreply@github.com>2023-09-15 17:06:04 -0400
commit0b8df841f951beb5690cd74c91bd54a8de31df14 (patch)
tree861c48a5aa10b79d29c715b6d74ce06c32ebe0eb /clang/lib/CodeGen/CoverageMappingGen.cpp
parent3323702bff30eea9f9cc185016fb876c65482576 (diff)
downloadllvm-0b8df841f951beb5690cd74c91bd54a8de31df14.zip
llvm-0b8df841f951beb5690cd74c91bd54a8de31df14.tar.gz
llvm-0b8df841f951beb5690cd74c91bd54a8de31df14.tar.bz2
[Coverage] Add coverage for constructor member initializers. (#66441)
Before, constructor member initializers are shown as not covered. This adds coverage info for them.
Diffstat (limited to 'clang/lib/CodeGen/CoverageMappingGen.cpp')
-rw-r--r--clang/lib/CodeGen/CoverageMappingGen.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp
index 7cc2e06..bb814df 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -1036,11 +1036,20 @@ struct CounterCoverageMappingBuilder
// lexer may not be able to report back precise token end locations for
// these children nodes (llvm.org/PR39822), and moreover users will not be
// able to see coverage for them.
+ Counter BodyCounter = getRegionCounter(Body);
bool Defaulted = false;
if (auto *Method = dyn_cast<CXXMethodDecl>(D))
Defaulted = Method->isDefaulted();
+ if (auto *Ctor = dyn_cast<CXXConstructorDecl>(D)) {
+ for (auto *Initializer : Ctor->inits()) {
+ if (Initializer->isWritten()) {
+ auto *Init = Initializer->getInit();
+ propagateCounts(BodyCounter, Init);
+ }
+ }
+ }
- propagateCounts(getRegionCounter(Body), Body,
+ propagateCounts(BodyCounter, Body,
/*VisitChildren=*/!Defaulted);
assert(RegionStack.empty() && "Regions entered but never exited");
}