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
This commit is contained in:
Chris Lattner 2008-07-21 18:34:02 +00:00
Родитель 600e4e8c35
Коммит 919d87d4ee
2 изменённых файлов: 18 добавлений и 10 удалений

Просмотреть файл

@ -421,6 +421,8 @@ DIAG(err_undef_superclass, ERROR,
"cannot find interface declaration for '%0', superclass of '%1'")
DIAG(err_duplicate_class_def, ERROR,
"duplicate interface declaration for class '%0'")
DIAG(err_undef_protocolref, ERROR,
"cannot find protocol definition for '%0', referenced by '%1'")
DIAG(warn_undef_protocolref, WARNING,
"cannot find protocol definition for '%0', referenced by '%1'")
DIAG(err_duplicate_protocol_def, ERROR,

Просмотреть файл

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