diff options
author | Chris Lattner <sabre@nondot.org> | 2008-07-21 18:34:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-07-21 18:34:02 +0000 |
commit | 919d87d4eef4126ad6d7da1762c247ab0b5ca05b (patch) | |
tree | 103dfc8e9431cf1a8ff255500a3056c88148efee /lib/Sema/SemaDeclObjC.cpp | |
parent | 600e4e8c358fd39e70f3313b7f1bfa0848957597 (diff) |
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
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 5188740af6..6880eec9af 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -134,10 +134,12 @@ Sema::DeclTy *Sema::ActOnStartClassInterface( 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 @@ Sema::DeclTy *Sema::ActOnStartProtocolInterface( /// 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 @@ Sema::DeclTy *Sema::ActOnStartCategoryInterface( /// 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); } |