[clang-tidy] Fix FP on cppcoreguidelines-pro-type-member-init with forward decl (#190521)

Fixes https://github.com/llvm/llvm-project/issues/155416.
This commit is contained in:
Baranov Victor 2026-04-06 08:42:24 +03:00 committed by GitHub
parent ce1a9fd766
commit e326ff2a88
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 1 deletions

View File

@ -572,7 +572,8 @@ void ProTypeMemberInitCheck::checkMissingBaseClassInitializer(
for (const CXXCtorInitializer *Init : Ctor->inits()) for (const CXXCtorInitializer *Init : Ctor->inits())
if (Init->isBaseInitializer() && Init->isWritten()) if (Init->isBaseInitializer() && Init->isWritten())
BasesToInit.erase(Init->getBaseClass()->getAsCXXRecordDecl()); BasesToInit.erase(
Init->getBaseClass()->getAsCXXRecordDecl()->getCanonicalDecl());
} }
if (BasesToInit.empty()) if (BasesToInit.empty())

View File

@ -291,6 +291,11 @@ Changes in existing checks
<clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by fixing <clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by fixing
a false positive for constrained template parameters. a false positive for constrained template parameters.
- Improved :doc:`cppcoreguidelines-pro-type-member-init
<clang-tidy/checks/cppcoreguidelines/pro-type-member-init>` check by fixing
a false positive when a base class has a forward declaration before its
definition.
- Improved :doc:`cppcoreguidelines-pro-type-vararg - Improved :doc:`cppcoreguidelines-pro-type-vararg
<clang-tidy/checks/cppcoreguidelines/pro-type-vararg>` check by no longer <clang-tidy/checks/cppcoreguidelines/pro-type-vararg>` check by no longer
warning on builtins with custom type checking (e.g., type-generic builtins warning on builtins with custom type checking (e.g., type-generic builtins

View File

@ -611,3 +611,27 @@ namespace PR37250 {
const V v; const V v;
const S s{v}; const S s{v};
} }
namespace PR155416 {
struct S;
struct S {
int a;
};
struct C : S {
C() : S{0} {}
};
template<typename T>
struct St;
template<typename T>
struct St{
T a;
};
struct Ct : St<int> {
Ct() : St{0} {}
};
}