Implicitly defined functions were getting the DeclContext of the function where they appeared, causing the bug: http://llvm.org/bugs/show_bug.cgi?id=2266.

Fix it by making implicitly defined functions get the DeclContext of translation unit.

llvm-svn: 50538
This commit is contained in:
Argyrios Kyrtzidis 2008-05-01 21:04:16 +00:00
parent 4be6ae4e6c
commit 694dda1e4e
1 changed files with 9 additions and 7 deletions

View File

@ -1282,15 +1282,17 @@ ScopedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
D.AddTypeInfo(DeclaratorChunk::getFunction(false, false, 0, 0, Loc));
D.SetIdentifier(&II, Loc);
// Find translation-unit scope to insert this function into.
if (Scope *FnS = S->getFnParent())
S = FnS->getParent(); // Skip all scopes in a function at once.
while (S->getParent())
S = S->getParent();
// Insert this function into translation-unit scope.
DeclContext *PrevDC = CurContext;
CurContext = Context.getTranslationUnitDecl();
FunctionDecl *FD =
dyn_cast<FunctionDecl>(static_cast<Decl*>(ActOnDeclarator(S, D, 0)));
dyn_cast<FunctionDecl>(static_cast<Decl*>(ActOnDeclarator(TUScope, D, 0)));
FD->setImplicit();
CurContext = PrevDC;
return FD;
}