================ @@ -2393,6 +2393,25 @@ static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Kind)) return false; } + } else if (!Constructor->isDelegatingConstructor()) { + for (const Decl *decl : RD->decls()) { + if (const auto *inner = dyn_cast<CXXRecordDecl>(decl)) { + if (inner->isUnion()) { + if (Constructor->getNumCtorInitializers() == 0 && + RD->hasVariantMembers()) { + if (Kind == Sema::CheckConstexprKind::Diagnose) { + SemaRef.Diag( + Dcl->getLocation(), + SemaRef.getLangOpts().CPlusPlus20 + ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init + : diag::ext_constexpr_union_ctor_no_init); + } else if (!SemaRef.getLangOpts().CPlusPlus20) { + return false; + } ---------------- Fznamznon wrote:
That seems to be copying the check for unions from lines 2346-2354. I also observed that non-template version of the code this patch fixes, works fine now. I wonder, why can't we just do same thing for templated contexts as we do now for non-templated? If that is not possible, because for example it now involves constexpr evaluator and it normally chokes on templates, can we unify the new check with the one from lines 2346-2354? https://github.com/llvm/llvm-project/pull/81042 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits