[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:31:16 PDT 2010


On Jul 13, 2010, at 1:27 PM, Douglas Gregor wrote:

>
> On Jul 13, 2010, at 1:05 PM, Fariborz Jahanian wrote:
>
>> 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.
>
> I'm confused... the CurContext isn't the BlockDecl already?

We instantiate a new BlockDecl. So, we need to set var's DeclContext  
to the
Instantiated BlockDecl.

- Fariborz

>
>
> 	- Doug
>
>> 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);
>> +}
>> +}
>> +
>> +
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>




More information about the cfe-commits mailing list