[clang] [C23] More improved type compatibility for enumerations (PR #150946)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 29 08:50:04 PDT 2025
================
@@ -2071,6 +2071,44 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
!CheckStructurallyEquivalentAttributes(Context, D1, D2))
return false;
+ // In C23, if one enumeration has a fixed underlying type, the other shall
+ // have a compatible fixed underlying type (6.2.7).
+ if (Context.LangOpts.C23) {
+ if (D1->isFixed() != D2->isFixed()) {
+ if (Context.Complain) {
+ Context.Diag2(D2->getLocation(),
+ Context.getApplicableDiagnostic(
+ diag::err_odr_tag_type_inconsistent))
+ << Context.ToCtx.getTypeDeclType(D2)
+ << (&Context.FromCtx != &Context.ToCtx);
+ EnumDecl *Has = D1->isFixed() ? D1 : D2;
+ EnumDecl *Missing = D1->isFixed() ? D1 : D2;
----------------
AaronBallman wrote:
Good catch!
https://github.com/llvm/llvm-project/pull/150946
More information about the cfe-commits
mailing list