references to completely undeclared protocols should be errors.  
References to forward definitions should be warnings.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53863 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 5188740..6880eec 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -134,10 +134,12 @@
     llvm::SmallVector<ObjCProtocolDecl*, 8> RefProtos;
     for (unsigned int i = 0; i != NumProtocols; i++) {
       ObjCProtocolDecl* RefPDecl = ObjCProtocols[ProtocolNames[i]];
-      if (!RefPDecl || RefPDecl->isForwardDecl())
+      if (!RefPDecl)
+        Diag(EndProtoLoc, diag::err_undef_protocolref,
+             ProtocolNames[i]->getName(), ClassName->getName());
+      else if (RefPDecl->isForwardDecl())
         Diag(EndProtoLoc, diag::warn_undef_protocolref,
-             ProtocolNames[i]->getName(),
-             ClassName->getName());
+             ProtocolNames[i]->getName(), ClassName->getName());
       else
         RefProtos.push_back(RefPDecl);
     }
@@ -218,10 +220,13 @@
     /// Check then save referenced protocols.
     for (unsigned int i = 0; i != NumProtoRefs; i++) {
       ObjCProtocolDecl* RefPDecl = ObjCProtocols[ProtoRefNames[i]];
-      if (!RefPDecl || RefPDecl->isForwardDecl())
+      if (!RefPDecl)
+        Diag(ProtocolLoc, diag::err_undef_protocolref,
+             ProtoRefNames[i]->getName(), ProtocolName->getName());
+      else if (RefPDecl->isForwardDecl())
         Diag(ProtocolLoc, diag::warn_undef_protocolref,
-             ProtoRefNames[i]->getName(),
-             ProtocolName->getName());
+             ProtoRefNames[i]->getName(), ProtocolName->getName());
+      
       PDecl->setReferencedProtocols(i, RefPDecl);
     }
     PDecl->setLocEnd(EndProtoLoc);
@@ -426,11 +431,12 @@
     /// Check and then save the referenced protocols.
     for (unsigned int i = 0; i != NumProtoRefs; i++) {
       ObjCProtocolDecl* RefPDecl = ObjCProtocols[ProtoRefNames[i]];
-      if (!RefPDecl || RefPDecl->isForwardDecl()) {
+      if (!RefPDecl)
+        Diag(CategoryLoc, diag::err_undef_protocolref,
+             ProtoRefNames[i]->getName(), CategoryName->getName());
+      else if (RefPDecl->isForwardDecl())
         Diag(CategoryLoc, diag::warn_undef_protocolref,
-             ProtoRefNames[i]->getName(),
-             CategoryName->getName());
-      }
+             ProtoRefNames[i]->getName(), CategoryName->getName());
       if (RefPDecl)
         RefProtocols.push_back(RefPDecl);
     }