[clang] [Clang][Sema] Fix err_constexpr_virtual_base diagnostic so that it only diagnoses on constructors and destructors (PR #163690)
Mariya Podchishchaeva via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 16 00:34:23 PDT 2025
================
@@ -1918,23 +1918,22 @@ static bool CheckConstexprMissingReturn(Sema &SemaRef, const FunctionDecl *Dcl);
bool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD,
CheckConstexprKind Kind) {
- const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
- if (MD && MD->isInstance()) {
+ if ((!getLangOpts().CPlusPlus26 && isa<CXXConstructorDecl>(NewFD)) ||
+ ((getLangOpts().CPlusPlus20 && !getLangOpts().CPlusPlus26) &&
+ isa<CXXDestructorDecl>(NewFD))) {
+ const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
----------------
Fznamznon wrote:
That should be a cast because ctor and dtor are both methods and it is dereferenced without a null check later.
```suggestion
if ((!getLangOpts().CPlusPlus26 && isa<CXXConstructorDecl>(NewFD)) ||
((getLangOpts().CPlusPlus20 && !getLangOpts().CPlusPlus26) &&
isa<CXXDestructorDecl>(NewFD))) {
const CXXMethodDecl *MD = cast<CXXMethodDecl>(NewFD);
```
https://github.com/llvm/llvm-project/pull/163690
More information about the cfe-commits
mailing list