summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-05-01 21:04:16 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-05-01 21:04:16 +0000
commit694dda1e4e0ca1644573bb1e97903d7a01faa3fe (patch)
tree8e86041d85cf1ec4ed17212c08976a3e761e1dae /clang/lib/Sema/SemaDecl.cpp
parent4be6ae4e6cb3d123cecc10c4f4e935a64c15816d (diff)
downloadbcm5719-llvm-694dda1e4e0ca1644573bb1e97903d7a01faa3fe.tar.gz
bcm5719-llvm-694dda1e4e0ca1644573bb1e97903d7a01faa3fe.zip
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
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index eb49b0c6648..be143415132 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -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;
}
OpenPOWER on IntegriCloud