forked from OSchip/llvm-project
refactor CheckForwardProtocolDeclarationForCircularDependency returns
'true' on detecting protocol cycles. No functionality change. llvm-svn: 131297
This commit is contained in:
parent
3e71464d50
commit
7d62273c87
|
@ -4760,11 +4760,10 @@ public:
|
|||
IdentifierInfo *AliasName, SourceLocation AliasLocation,
|
||||
IdentifierInfo *ClassName, SourceLocation ClassLocation);
|
||||
|
||||
void CheckForwardProtocolDeclarationForCircularDependency(
|
||||
bool CheckForwardProtocolDeclarationForCircularDependency(
|
||||
IdentifierInfo *PName,
|
||||
SourceLocation &PLoc, SourceLocation PrevLoc,
|
||||
const ObjCList<ObjCProtocolDecl> &PList,
|
||||
bool &err);
|
||||
const ObjCList<ObjCProtocolDecl> &PList);
|
||||
|
||||
Decl *ActOnStartProtocolInterface(
|
||||
SourceLocation AtProtoInterfaceLoc,
|
||||
|
|
|
@ -272,24 +272,27 @@ Decl *Sema::ActOnCompatiblityAlias(SourceLocation AtLoc,
|
|||
return AliasDecl;
|
||||
}
|
||||
|
||||
void Sema::CheckForwardProtocolDeclarationForCircularDependency(
|
||||
bool Sema::CheckForwardProtocolDeclarationForCircularDependency(
|
||||
IdentifierInfo *PName,
|
||||
SourceLocation &Ploc, SourceLocation PrevLoc,
|
||||
const ObjCList<ObjCProtocolDecl> &PList, bool &err) {
|
||||
const ObjCList<ObjCProtocolDecl> &PList) {
|
||||
|
||||
bool res = false;
|
||||
for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(),
|
||||
E = PList.end(); I != E; ++I) {
|
||||
|
||||
if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(),
|
||||
Ploc)) {
|
||||
if (PDecl->getIdentifier() == PName) {
|
||||
Diag(Ploc, diag::err_protocol_has_circular_dependency);
|
||||
Diag(PrevLoc, diag::note_previous_definition);
|
||||
err = true;
|
||||
res = true;
|
||||
}
|
||||
CheckForwardProtocolDeclarationForCircularDependency(PName, Ploc,
|
||||
PDecl->getLocation(), PDecl->getReferencedProtocols(), err);
|
||||
if (CheckForwardProtocolDeclarationForCircularDependency(PName, Ploc,
|
||||
PDecl->getLocation(), PDecl->getReferencedProtocols()))
|
||||
res = true;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
Decl *
|
||||
|
@ -316,8 +319,8 @@ Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc,
|
|||
}
|
||||
ObjCList<ObjCProtocolDecl> PList;
|
||||
PList.set((ObjCProtocolDecl *const*)ProtoRefs, NumProtoRefs, Context);
|
||||
CheckForwardProtocolDeclarationForCircularDependency(
|
||||
ProtocolName, ProtocolLoc, PDecl->getLocation(), PList, err);
|
||||
err = CheckForwardProtocolDeclarationForCircularDependency(
|
||||
ProtocolName, ProtocolLoc, PDecl->getLocation(), PList);
|
||||
|
||||
// Make sure the cached decl gets a valid start location.
|
||||
PDecl->setLocation(AtProtoInterfaceLoc);
|
||||
|
|
Loading…
Reference in New Issue