https://github.com/Kupa-Martin created https://github.com/llvm/llvm-project/pull/84068
Enumerators dont have the type of their enumeration before the closing brace. In these cases Expr::getEnumCoercedType() incorrectly returned the enumeration type. Introduced in PR #81418 >From bc9f93713a07643aa3095a7d6d402d1202e07b9e Mon Sep 17 00:00:00 2001 From: 44-2-Kupa-Martin <kupamartinclassr...@gmail.com> Date: Tue, 5 Mar 2024 17:21:02 -0300 Subject: [PATCH] [Clang][Sema] Fix type of enumerators in incomplete enumerations Enumerators dont have the type of their enumeration before the closing brace. In these cases Expr::getEnumCoercedType() incorrectly returned the enumeration type. Introduced in PR #81418 --- clang/lib/AST/Expr.cpp | 9 ++++++--- clang/test/Sema/warn-compare-enum-types-mismatch.c | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index b4de2155adcebd..9a28e6f750069b 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -264,10 +264,13 @@ namespace { } QualType Expr::getEnumCoercedType(const ASTContext &Ctx) const { - if (isa<EnumType>(this->getType())) + if (isa<EnumType>(this->getType())) { return this->getType(); - else if (const auto *ECD = this->getEnumConstantDecl()) - return Ctx.getTypeDeclType(cast<EnumDecl>(ECD->getDeclContext())); + } else if (const auto *ECD = this->getEnumConstantDecl()) { + const auto *ED = cast<EnumDecl>(ECD->getDeclContext()); + if (ED->isCompleteDefinition()) + return Ctx.getTypeDeclType(ED); + } return this->getType(); } diff --git a/clang/test/Sema/warn-compare-enum-types-mismatch.c b/clang/test/Sema/warn-compare-enum-types-mismatch.c index 2b72aae16b977a..1094a6972e778d 100644 --- a/clang/test/Sema/warn-compare-enum-types-mismatch.c +++ b/clang/test/Sema/warn-compare-enum-types-mismatch.c @@ -6,7 +6,9 @@ typedef enum EnumA { } EnumA; enum EnumB { - B + B, + B1 = 1, + B2 = A == B1 }; enum { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits