[PATCH] D107719: [Clang] Resolve FIXMEs in Types.h

Alf via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 8 13:20:36 PDT 2021


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();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107719.365041.patch
Type: text/x-patch
Size: 2499 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210808/8e83ccea/attachment.bin>


More information about the cfe-commits mailing list