[clang] [clang] Rework `hasBooleanRepresentation`. (PR #136038)
John McCall via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 17 13:10:55 PDT 2025
================
@@ -8623,6 +8624,13 @@ inline bool Type::isIntegralOrEnumerationType() const {
inline bool Type::isBooleanType() const {
if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType))
return BT->getKind() == BuiltinType::Bool;
+ if (const EnumType *ET = dyn_cast<EnumType>(CanonicalType)) {
+ // Incomplete enum types are not treated as integer types.
+ // FIXME: In C++, enum types are never integer types.
+ return IsEnumDeclComplete(ET->getDecl()) &&
+ !IsEnumDeclScoped(ET->getDecl()) &&
----------------
rjmccall wrote:
Okay. My understanding is that supporting CodeGen and its dual-representation handling of boolean types is the immediate purpose of this method. "Representation" is a good name for such a method because this really is about lower-level representation.
At a high level, scoped enums with an underlying type of `bool` either need to use i8 as both their memory and their scalar lowered type or they need to be doing toMemory/fromMemory operations when moving to/from memory. I think the latter is probably the better situation overall. So I think we really want this method to ignored scoped-ness of enums.
The immediate problem this creates is that we have a bunch of existing methods that are arguably misnamed: they're named something involving "representation", but they're not really being used to ask about low-level representation. Instead, they're vector-inclusive variants of other predicates. I agree this is a bad place to have ended up, because people will naturally expect all the similarly-named methods to behave consistently.
Since the existing methods are arguably misnamed, I wonder if we could reasonably just change them. Since the difference is (AFAIK) purely to make them vector-inclusive, perhaps we should just remove them and have a `getNonVectorType()` method that clients are expected to call before using the existing predicates.
https://github.com/llvm/llvm-project/pull/136038
More information about the cfe-commits
mailing list