]> granicus.if.org Git - clang/commitdiff
Implicitly defined functions were getting the DeclContext of the function where they...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 1 May 2008 21:04:16 +0000 (21:04 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 1 May 2008 21:04:16 +0000 (21:04 +0000)
Fix it by making implicitly defined functions get the DeclContext of translation unit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50538 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp

index eb49b0c66481f3dc87bd814d6536363b700b31c0..be143415132d4dd6b10ed670344ae389281c059e 100644 (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;
 }