зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
600e4e8c35
Коммит
919d87d4ee
|
@ -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);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче