]> granicus.if.org Git - clang/commitdiff
Revert http://llvm.org/viewvc/llvm-project?view=rev&revision=65244.
authorSteve Naroff <snaroff@apple.com>
Mon, 23 Feb 2009 18:36:16 +0000 (18:36 +0000)
committerSteve Naroff <snaroff@apple.com>
Mon, 23 Feb 2009 18:36:16 +0000 (18:36 +0000)
Remove support for "Class<P>". Will be making this an error.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65332 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/ASTContext.h
include/clang/AST/Type.h
lib/AST/ASTContext.cpp
lib/AST/ExprConstant.cpp
lib/AST/Type.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaType.cpp
test/SemaObjC/protocol-archane.m
test/SemaObjC/protocol-atttribute-1.m

index 0353a892e6a24d64dedd5b9341ea3985f6cfa3f0..387120ea3d2f4aed9fb580fca8b981fd71fa3fb7 100644 (file)
@@ -73,7 +73,6 @@ class ASTContext {
     ClassTemplateSpecializationTypes;
   llvm::FoldingSet<ObjCQualifiedInterfaceType> ObjCQualifiedInterfaceTypes;
   llvm::FoldingSet<ObjCQualifiedIdType> ObjCQualifiedIdTypes;
-  llvm::FoldingSet<ObjCQualifiedClassType> ObjCQualifiedClassTypes;
   /// ASTRecordLayouts - A cache mapping from RecordDecls to ASTRecordLayouts.
   ///  This is lazily created.  This is intentionally not serialized.
   llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*> ASTRecordLayouts;
@@ -292,10 +291,6 @@ public:
   QualType getObjCQualifiedIdType(ObjCProtocolDecl **ProtocolList, 
                                   unsigned NumProtocols);
                                   
-  /// getObjCQualifiedClassType - Return an ObjCQualifiedClassType for a 
-  /// given 'Class' and conforming protocol list.
-  QualType getObjCQualifiedClassType(ObjCProtocolDecl **ProtocolList, 
-                                     unsigned NumProtocols);
 
   /// getTypeOfType - GCC extension.
   QualType getTypeOfExpr(Expr *e);
index cb34c77f1ac7d46e06903fade09208625c112cc4..8b7b09c91f6d33edfff37a6787338654c5f96d8a 100644 (file)
@@ -69,7 +69,6 @@ namespace clang {
   class BuiltinType;
   class ObjCInterfaceType;
   class ObjCQualifiedIdType;
-  class ObjCQualifiedClassType;
   class ObjCQualifiedInterfaceType;
   class StmtIteratorBase;
   class ClassTemplateSpecializationType;
@@ -385,7 +384,6 @@ public:
   bool isObjCInterfaceType() const;             // NSString or NSString<foo>
   bool isObjCQualifiedInterfaceType() const;    // NSString<foo>
   bool isObjCQualifiedIdType() const;           // id<foo>
-  bool isObjCQualifiedClassType() const;        // Class<foo>
   bool isTemplateTypeParmType() const;          // C++ template type parameter
 
   /// isDependentType - Whether this type is a dependent type, meaning
@@ -419,7 +417,6 @@ public:
   const ObjCInterfaceType *getAsObjCInterfaceType() const;
   const ObjCQualifiedInterfaceType *getAsObjCQualifiedInterfaceType() const;
   const ObjCQualifiedIdType *getAsObjCQualifiedIdType() const;
-  const ObjCQualifiedClassType *getAsObjCQualifiedClassType() const;
   const TemplateTypeParmType *getAsTemplateTypeParmType() const;
 
   const ClassTemplateSpecializationType *
@@ -1945,9 +1942,6 @@ inline bool Type::isObjCQualifiedInterfaceType() const {
 inline bool Type::isObjCQualifiedIdType() const {
   return isa<ObjCQualifiedIdType>(CanonicalType.getUnqualifiedType());
 }
-inline bool Type::isObjCQualifiedClassType() const {
-  return isa<ObjCQualifiedClassType>(CanonicalType.getUnqualifiedType());
-}
 inline bool Type::isTemplateTypeParmType() const {
   return isa<TemplateTypeParmType>(CanonicalType.getUnqualifiedType());
 }
index 78f2a8a9ab5c7ca9bc3d33c0f221181a72481611..60d8b8be8015331076f4be4bab8ff0339a0d306c 100644 (file)
@@ -1397,29 +1397,6 @@ QualType ASTContext::getObjCQualifiedIdType(ObjCProtocolDecl **Protocols,
   return QualType(QType, 0);
 }
 
-/// getObjCQualifiedClassType - Return an ObjCQualifiedIdType for the 'Class'
-/// decl and the conforming protocol list.
-QualType ASTContext::getObjCQualifiedClassType(ObjCProtocolDecl **Protocols, 
-                                               unsigned NumProtocols) {
-  // Sort the protocol list alphabetically to canonicalize it.
-  SortAndUniqueProtocols(Protocols, NumProtocols);
-
-  llvm::FoldingSetNodeID ID;
-  ObjCQualifiedIdType::Profile(ID, Protocols, NumProtocols);
-  
-  void *InsertPos = 0;
-  if (ObjCQualifiedClassType *QT =
-        ObjCQualifiedClassTypes.FindNodeOrInsertPos(ID, InsertPos))
-    return QualType(QT, 0);
-  
-  // No Match;
-  ObjCQualifiedClassType *QType =
-    new (*this,8) ObjCQualifiedClassType(Protocols, NumProtocols);
-  Types.push_back(QType);
-  ObjCQualifiedClassTypes.InsertNode(QType, InsertPos);
-  return QualType(QType, 0);
-}
-
 /// getTypeOfExpr - Unlike many "get<Type>" functions, we can't unique
 /// TypeOfExpr AST's (since expression's are never shared). For example,
 /// multiple declarations that refer to "typeof(x)" all contain different
@@ -2422,7 +2399,7 @@ bool ASTContext::isObjCNSObjectType(QualType Ty) const {
 /// to struct), Interface* (pointer to ObjCInterfaceType) and id<P> (qualified
 /// ID type).
 bool ASTContext::isObjCObjectPointerType(QualType Ty) const {
-  if (Ty->isObjCQualifiedIdType() || Ty->isObjCQualifiedClassType())
+  if (Ty->isObjCQualifiedIdType())
     return true;
   
   // Blocks are objects.
index d868cba9eb0178bfa4645a60dc55f0048d29bbf9..bfba5984b036361ac3171b8358a8849f7c63a12f 100644 (file)
@@ -285,8 +285,7 @@ public:
 static bool HasPointerEvalType(const Expr* E) {
   return E->getType()->isPointerType()
          || E->getType()->isBlockPointerType()
-         || E->getType()->isObjCQualifiedIdType()
-         || E->getType()->isObjCQualifiedClassType();
+         || E->getType()->isObjCQualifiedIdType();
 }
 
 static bool EvaluatePointer(const Expr* E, APValue& Result, EvalInfo &Info) {
index 065b626930bc53ba140f2e165540b15327830633..7b07b9cbe40b377fbc8f6b88cef33727a22cd336 100644 (file)
@@ -870,17 +870,6 @@ void ObjCQualifiedIdType::Profile(llvm::FoldingSetNodeID &ID) {
   Profile(ID, &Protocols[0], getNumProtocols());
 }
 
-void ObjCQualifiedClassType::Profile(llvm::FoldingSetNodeID &ID,
-                                     ObjCProtocolDecl **protocols, 
-                                     unsigned NumProtocols) {
-  for (unsigned i = 0; i != NumProtocols; i++)
-    ID.AddPointer(protocols[i]);
-}
-
-void ObjCQualifiedClassType::Profile(llvm::FoldingSetNodeID &ID) {
-  Profile(ID, &Protocols[0], getNumProtocols());
-}
-
 /// LookThroughTypedefs - Return the ultimate type this typedef corresponds to
 /// potentially looking through *all* consequtive typedefs.  This returns the
 /// sum of the type qualifiers, so if you have:
@@ -1357,22 +1346,6 @@ void ObjCQualifiedIdType::getAsStringInternal(std::string &InnerString) const {
   InnerString = ObjCQIString + InnerString;
 }
 
-void ObjCQualifiedClassType::getAsStringInternal(std::string &InnerString) const 
-{
-  if (!InnerString.empty())    // Prefix the basic type, e.g. 'typedefname X'.
-    InnerString = ' ' + InnerString;
-  std::string ObjCQIString = "Class";
-  ObjCQIString += '<';
-  int num = getNumProtocols();
-  for (int i = 0; i < num; i++) {
-    ObjCQIString += getProtocols(i)->getNameAsString();
-    if (i < num-1)
-      ObjCQIString += ',';
-  }
-  ObjCQIString += '>';
-  InnerString = ObjCQIString + InnerString;
-}
-
 void TagType::getAsStringInternal(std::string &InnerString) const {
   if (!InnerString.empty())    // Prefix the basic type, e.g. 'typedefname X'.
     InnerString = ' ' + InnerString;
index b17f7bc1ca8e8fd35796de1ecbab33d04181d8b6..aef66619f6b1bfd6c2f7f27a5f79f558d75a1917 100644 (file)
@@ -2736,7 +2736,6 @@ Sema::CheckSingleAssignmentConstraints(QualType lhsType, Expr *&rExpr) {
   // a null pointer constant.
   if ((lhsType->isPointerType() || 
        lhsType->isObjCQualifiedIdType() || 
-       lhsType->isObjCQualifiedClassType() ||
        lhsType->isBlockPointerType())
       && rExpr->isNullPointerConstant(Context)) {
     ImpCastExprToType(rExpr, lhsType);
index 697524133c951270cc42744f5f2dddacfb2c1b04..acdeec6ba94dfecd055c2ee627acef9d99fc7a2c 100644 (file)
@@ -151,10 +151,6 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
         // id<protocol-list>
         Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ,
                                                 DS.getNumProtocolQualifiers());
-      else if (Result == Context.getObjCClassType())
-        // Support the following GCC extension: Class<protocol-list>
-        Result = Context.getObjCQualifiedClassType((ObjCProtocolDecl**)PQ,
-                                                DS.getNumProtocolQualifiers());
       else
         Diag(DS.getSourceRange().getBegin(), 
              diag::warn_ignoring_objc_qualifiers) << DS.getSourceRange();
index ff08a176bf21ec333edcb306e8708c4eb98c8949..2cba1fad051fc9cf850b7943065eef8b1dbfff38 100644 (file)
@@ -27,8 +27,3 @@ typedef int NotAnObjCObjectType;
 
 // GCC doesn't diagnose this.
 NotAnObjCObjectType <SomeProtocol> *obj; // expected-warning {{ignoring protocol qualifiers on non-ObjC type}}
-
-// GCC extension (sigh). Found while researching rdar://6497631
-typedef struct objc_class *Class;
-
-Class <SomeProtocol> UnfortunateGCCExtension;
index 21912dafaeb9dc04ff49807ee5f18f0b63f342a1..1d3aec64c424a2fa0c06f763e1f40a2743c36d73 100644 (file)
@@ -3,7 +3,7 @@
 __attribute ((unavailable))
 @protocol FwProto; // expected-note{{marked unavailable}}
 
-Class <FwProto> cFw = 0;  // expected-warning {{'FwProto' is unavailable}}
+Class <FwProto> cFw = 0;  // expected-warning {{'FwProto' is unavailable}} expected-warning{{ignoring protocol qualifiers on non-ObjC type}}
 
 
 __attribute ((deprecated)) @protocol MyProto1
@@ -31,7 +31,7 @@ __attribute ((deprecated)) @protocol MyProto1
 
 
 
-Class <MyProto1> clsP1 = 0;  // expected-warning {{'MyProto1' is deprecated}}
+Class <MyProto1> clsP1 = 0;  // expected-warning {{'MyProto1' is deprecated}} expected-warning{{ignoring protocol qualifiers on non-ObjC type}}
 
 @protocol FwProto @end // expected-note{{marked unavailable}}