gAlfonso-bit created this revision. gAlfonso-bit added projects: LLVM, clang. gAlfonso-bit requested review of this revision. Herald added a subscriber: cfe-commits.
This includes removing ObjectiveC Object Pointers from the list of specifiers, as well as checking for C++ instead of using Scoped Enums as a workaround. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D107719 Files: clang/include/clang/AST/Type.h clang/lib/AST/Type.cpp Index: clang/lib/AST/Type.cpp =================================================================== --- clang/lib/AST/Type.cpp +++ clang/lib/AST/Type.cpp @@ -2011,9 +2011,10 @@ 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. - if (ET->getDecl()->isComplete() && !ET->getDecl()->isScoped()) + // In C++, enum types are never integer types. + if (!isCPlusPlus() && ET->getDecl()->isComplete()) return ET->getDecl()->getIntegerType()->isSignedIntegerType(); + return false; } if (const ExtIntType *IT = dyn_cast<ExtIntType>(CanonicalType)) @@ -2058,9 +2059,10 @@ if (const auto *ET = dyn_cast<EnumType>(CanonicalType)) { // Incomplete enum types are not treated as integer types. - // FIXME: In C++, enum types are never integer types. - if (ET->getDecl()->isComplete() && !ET->getDecl()->isScoped()) + // In C++, enum types are never integer types. + if (!isCPlusPlus() && ET->getDecl()->isComplete()) return ET->getDecl()->getIntegerType()->isUnsignedIntegerType(); + return false; } if (const ExtIntType *IT = dyn_cast<ExtIntType>(CanonicalType)) @@ -2785,7 +2787,6 @@ case DependentTemplateSpecialization: case ObjCInterface: case ObjCObject: - case ObjCObjectPointer: // FIXME: object pointers aren't really specifiers return true; default: return false; Index: clang/include/clang/AST/Type.h =================================================================== --- clang/include/clang/AST/Type.h +++ clang/include/clang/AST/Type.h @@ -3450,10 +3450,6 @@ protected: friend class ASTContext; - /// The element type of the matrix. - // FIXME: Appears to be unused? There is also MatrixType::ElementType... - QualType ElementType; - /// Number of rows and columns. unsigned NumRows; unsigned NumColumns; @@ -6989,9 +6985,9 @@ BT->getKind() <= BuiltinType::Int128; 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()); + // In C++, enum types are never integer types. + return !isCPlusPlus() && IsEnumDeclComplete(ET->getDecl()) && + !IsEnumDeclScoped(ET->getDecl()); } return isExtIntType(); }
Index: clang/lib/AST/Type.cpp =================================================================== --- clang/lib/AST/Type.cpp +++ clang/lib/AST/Type.cpp @@ -2011,9 +2011,10 @@ 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. - if (ET->getDecl()->isComplete() && !ET->getDecl()->isScoped()) + // In C++, enum types are never integer types. + if (!isCPlusPlus() && ET->getDecl()->isComplete()) return ET->getDecl()->getIntegerType()->isSignedIntegerType(); + return false; } if (const ExtIntType *IT = dyn_cast<ExtIntType>(CanonicalType)) @@ -2058,9 +2059,10 @@ if (const auto *ET = dyn_cast<EnumType>(CanonicalType)) { // Incomplete enum types are not treated as integer types. - // FIXME: In C++, enum types are never integer types. - if (ET->getDecl()->isComplete() && !ET->getDecl()->isScoped()) + // In C++, enum types are never integer types. + if (!isCPlusPlus() && ET->getDecl()->isComplete()) return ET->getDecl()->getIntegerType()->isUnsignedIntegerType(); + return false; } if (const ExtIntType *IT = dyn_cast<ExtIntType>(CanonicalType)) @@ -2785,7 +2787,6 @@ case DependentTemplateSpecialization: case ObjCInterface: case ObjCObject: - case ObjCObjectPointer: // FIXME: object pointers aren't really specifiers return true; default: return false; Index: clang/include/clang/AST/Type.h =================================================================== --- clang/include/clang/AST/Type.h +++ clang/include/clang/AST/Type.h @@ -3450,10 +3450,6 @@ protected: friend class ASTContext; - /// The element type of the matrix. - // FIXME: Appears to be unused? There is also MatrixType::ElementType... - QualType ElementType; - /// Number of rows and columns. unsigned NumRows; unsigned NumColumns; @@ -6989,9 +6985,9 @@ BT->getKind() <= BuiltinType::Int128; 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()); + // In C++, enum types are never integer types. + return !isCPlusPlus() && IsEnumDeclComplete(ET->getDecl()) && + !IsEnumDeclScoped(ET->getDecl()); } return isExtIntType(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits