[cfe-commits] r50538 - /cfe/trunk/lib/Sema/SemaDecl.cpp

Argiris Kirtzidis akyrtzi at gmail.com
Thu May 1 14:04:17 PDT 2008


Author: akirtzidis
Date: Thu May  1 16:04:16 2008
New Revision: 50538

URL: http://llvm.org/viewvc/llvm-project?rev=50538&view=rev
Log:
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.

Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=50538&r1=50537&r2=50538&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu May  1 16:04:16 2008
@@ -1282,15 +1282,17 @@
   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;
 }
 





More information about the cfe-commits mailing list