[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