The identifier shouldn't be added to the scope, the decl should.

This fixes strange assertions that just started triggering.

llvm-svn: 42721
This commit is contained in:
Chris Lattner 2007-10-07 07:05:08 +00:00
parent 65fc0f1fca
commit 65cc87ffc2
1 changed files with 11 additions and 8 deletions

View File

@ -1039,16 +1039,18 @@ Sema::ActOnForwardProtocolDeclaration(Scope *S, SourceLocation AtProtocolLoc,
llvm::SmallVector<ObjcProtocolDecl*, 32> Protocols;
for (unsigned i = 0; i != NumElts; ++i) {
ObjcProtocolDecl *PDecl = getObjCProtocolDecl(S, IdentList[i],
AtProtocolLoc);
if (!PDecl) { // Already seen?
PDecl = new ObjcProtocolDecl(SourceLocation(), 0, IdentList[i], true);
IdentifierInfo *P = IdentList[i];
ObjcProtocolDecl *PDecl = getObjCProtocolDecl(S, P, AtProtocolLoc);
if (!PDecl) { // Not already seen?
// FIXME: Pass in the location of the identifier!
PDecl = new ObjcProtocolDecl(AtProtocolLoc, 0, P, true);
// Chain & install the protocol decl into the identifier.
PDecl->setNext(IdentList[i]->getFETokenInfo<ScopedDecl>());
IdentList[i]->setFETokenInfo(PDecl);
// Remember that this needs to be removed when the scope is popped.
S->AddDecl(PDecl);
}
// Remember that this needs to be removed when the scope is popped.
S->AddDecl(IdentList[i]);
Protocols.push_back(PDecl);
}
@ -1364,9 +1366,10 @@ Sema::ActOnForwardClassDeclaration(Scope *S, SourceLocation AtClassLoc,
// Chain & install the interface decl into the identifier.
IDecl->setNext(IdentList[i]->getFETokenInfo<ScopedDecl>());
IdentList[i]->setFETokenInfo(IDecl);
// Remember that this needs to be removed when the scope is popped.
S->AddDecl(IDecl);
}
// Remember that this needs to be removed when the scope is popped.
S->AddDecl(IdentList[i]);
Interfaces.push_back(IDecl);
}