diff options
author | Zequan Wu <zequanwu@google.com> | 2023-09-15 17:06:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-15 17:06:04 -0400 |
commit | 0b8df841f951beb5690cd74c91bd54a8de31df14 (patch) | |
tree | 861c48a5aa10b79d29c715b6d74ce06c32ebe0eb /clang/lib/CodeGen/CoverageMappingGen.cpp | |
parent | 3323702bff30eea9f9cc185016fb876c65482576 (diff) | |
download | llvm-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.cpp | 11 |
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"); } |