[cfe-commits] r108266 - in /cfe/trunk: lib/Sema/SemaTemplateInstantiate.cpp lib/Sema/SemaTemplateInstantiateDecl.cpp lib/Sema/TreeTransform.h test/CodeGenCXX/instantiate-blocks.cpp

Fariborz Jahanian fjahanian at apple.com
Tue Jul 13 13:05:58 PDT 2010


Author: fjahanian
Date: Tue Jul 13 15:05:58 2010
New Revision: 108266

URL: http://llvm.org/viewvc/llvm-project?rev=108266&view=rev
Log:
More block instantiation stuff. Set variable/param DeclContext
to block context when first instantiating them.


Modified:
    cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp
    cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
    cfe/trunk/lib/Sema/TreeTransform.h
    cfe/trunk/test/CodeGenCXX/instantiate-blocks.cpp

Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp?rev=108266&r1=108265&r2=108266&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp Tue Jul 13 15:05:58 2010
@@ -1067,6 +1067,10 @@
   NewParm->setHasInheritedDefaultArg(OldParm->hasInheritedDefaultArg());
 
   CurrentInstantiationScope->InstantiatedLocal(OldParm, NewParm);
+  // Set DeclContext if inside a Block.
+  if (BlockScopeInfo *CurBlock = getCurBlock())
+    NewParm->setDeclContext(CurBlock->TheDecl);
+  
   return NewParm;  
 }
 

Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=108266&r1=108265&r2=108266&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Tue Jul 13 15:05:58 2010
@@ -400,6 +400,9 @@
       SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Var);
   }
   InstantiateAttrs(D, Var);
+  // Set DeclContext if inside a Block.
+  if (BlockScopeInfo *CurBlock = SemaRef.getCurBlock())
+    D->setDeclContext(CurBlock->TheDecl);
   
   // Link instantiations of static data members back to the template from
   // which they were instantiated.

Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=108266&r1=108265&r2=108266&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Tue Jul 13 15:05:58 2010
@@ -4198,10 +4198,6 @@
   if (!ND)
     return SemaRef.ExprError();
 
-  // Set DeclContext if inside a Block.
-  if (BlockScopeInfo *CurBlock = SemaRef.getCurBlock())
-    ND->setDeclContext(CurBlock->TheDecl);
-  
   if (!getDerived().AlwaysRebuild() && 
       Qualifier == E->getQualifier() &&
       ND == E->getDecl() &&

Modified: cfe/trunk/test/CodeGenCXX/instantiate-blocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/instantiate-blocks.cpp?rev=108266&r1=108265&r2=108266&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/instantiate-blocks.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/instantiate-blocks.cpp Tue Jul 13 15:05:58 2010
@@ -31,3 +31,29 @@
 {
     foo(100, 'a');
 }
+
+namespace rdar6182276 {
+extern "C" {
+int printf(const char *, ...);
+}
+
+template <typename T> T foo(T t)
+{
+    void (^testing)(int) = ^(int bar) { printf("bar is %d\n", bar); };
+    printf("bar is\n");
+    return 1;
+}
+
+template <typename T> void gorf(T t)
+{
+    foo(t);
+}
+
+
+void test(void)
+{
+    gorf(2);
+}
+}
+
+





More information about the cfe-commits mailing list