make DeclSpec manage its own protocol qualifier list memory instead of having
clients allocate the memory and it delete it.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54087 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index 98c2d89..5ed1a61 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -435,12 +435,11 @@
       ParseObjCProtocolReferences(ProtocolRefs, EndProtoLoc);
       
       // FIXME: New'ing this here seems wrong, why not have the action do it?
-      llvm::SmallVector<DeclTy *, 8> *ProtocolDecl = 
-              new llvm::SmallVector<DeclTy *, 8>;
-      DS.setProtocolQualifiers(ProtocolDecl);
+      llvm::SmallVector<DeclTy *, 8> ProtocolDecl;
       Actions.FindProtocolDeclaration(Loc, 
                                       &ProtocolRefs[0], ProtocolRefs.size(),
-                                      *ProtocolDecl);
+                                      ProtocolDecl);
+      DS.setProtocolQualifiers(&ProtocolDecl[0], ProtocolDecl.size());
       
       DS.SetRangeEnd(EndProtoLoc);
 
@@ -576,12 +575,11 @@
         SourceLocation EndProtoLoc;
         llvm::SmallVector<IdentifierLocPair, 8> ProtocolRefs;
         ParseObjCProtocolReferences(ProtocolRefs, EndProtoLoc);
-        llvm::SmallVector<DeclTy *, 8> *ProtocolDecl = 
-                new llvm::SmallVector<DeclTy *, 8>;
-        DS.setProtocolQualifiers(ProtocolDecl);
+        llvm::SmallVector<DeclTy *, 8> ProtocolDecl;
         Actions.FindProtocolDeclaration(Loc, 
                                         &ProtocolRefs[0], ProtocolRefs.size(),
-                                        *ProtocolDecl);
+                                        ProtocolDecl);
+        DS.setProtocolQualifiers(&ProtocolDecl[0], ProtocolDecl.size());
         DS.SetRangeEnd(EndProtoLoc);
 
         Diag(Loc, diag::warn_objc_protocol_qualifier_missing_id,
diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp
index 85a457b..7acb458 100644
--- a/lib/Sema/SemaType.cpp
+++ b/lib/Sema/SemaType.cpp
@@ -44,9 +44,8 @@
     break;
   case DeclSpec::TST_unspecified:
     // "<proto1,proto2>" is an objc qualified ID with a missing id.
-    if (llvm::SmallVector<Action::DeclTy *, 8> *PQ=DS.getProtocolQualifiers()) {
-      Action::DeclTy **PPDecl = &(*PQ)[0];
-      Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)(PPDecl),
+      if (DeclSpec::ProtocolQualifierListTy PQ = DS.getProtocolQualifiers()) {
+      Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ,
                                               DS.getNumProtocolQualifiers());
       break;
     }
@@ -122,28 +121,25 @@
     assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 &&
            DS.getTypeSpecSign() == 0 &&
            "Can't handle qualifiers on typedef names yet!");
+    DeclSpec::ProtocolQualifierListTy PQ = DS.getProtocolQualifiers();      
 
     // FIXME: Adding a TST_objcInterface clause doesn't seem ideal, so
     // we have this "hack" for now... 
     if (ObjCInterfaceDecl *ObjCIntDecl = dyn_cast<ObjCInterfaceDecl>(D)) {
-      if (DS.getProtocolQualifiers() == 0) {
+      if (PQ == 0) {
         Result = Context.getObjCInterfaceType(ObjCIntDecl);
         break;
       }
       
-      Action::DeclTy **PPDecl = &(*DS.getProtocolQualifiers())[0];
       Result = Context.getObjCQualifiedInterfaceType(ObjCIntDecl,
-                                   reinterpret_cast<ObjCProtocolDecl**>(PPDecl),
+                                                     (ObjCProtocolDecl**)PQ,
                                                  DS.getNumProtocolQualifiers());
       break;
     } else if (TypedefDecl *typeDecl = dyn_cast<TypedefDecl>(D)) {
-      if (Context.getObjCIdType() == Context.getTypedefType(typeDecl)
-          && DS.getProtocolQualifiers()) {
-          // id<protocol-list>
-        Action::DeclTy **PPDecl = &(*DS.getProtocolQualifiers())[0];
-        Result = Context.getObjCQualifiedIdType(
-                                 reinterpret_cast<ObjCProtocolDecl**>(PPDecl),
-                                            DS.getNumProtocolQualifiers());
+      if (Context.getObjCIdType() == Context.getTypedefType(typeDecl) && PQ) {
+        // id<protocol-list>
+        Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ,
+                                                DS.getNumProtocolQualifiers());
         break;
       }
     }