[cfe-commits] [PATCH] Instantiate dependent attributes in template code.

Delesley Hutchins delesley at google.com
Thu Jan 19 11:27:20 PST 2012


New patch is enclosed.  Since template instantiation is no longer in a
method, I can't duplicate the code for clone as the default case, due
to private member variables.  Instead, I mark attributes as explicitly
dependent, and simply call clone for non-dependent attributes.

  http://codereview.appspot.com/5556059/

  -DeLesley

On Tue, Jan 17, 2012 at 10:45 AM, Delesley Hutchins <delesley at google.com> wrote:
> Cool.  Thanks for the clarification; I'll refactor as needed.
>
>  -DeLesley
>
> On Tue, Jan 17, 2012 at 10:42 AM, Richard Smith <richard at metafoo.co.uk> wrote:
>> On Tue, January 17, 2012 16:07, Delesley Hutchins wrote:
>>> I'm still a bit unclear -- I want to make sure I understand which
>>> dependencies cause a layering violation, so I can avoid this mistake in the
>>> future.  There's still no dependency in the call graph, because
>>> instantiateFromTemplate is only called from within Sema.  There is a
>>> dependency in the object file though, because Attr must be linked against Sema
>>> to instantiate the virtual method table.  Is the goal to be able to package
>>> the AST classes into a separate library that does not need to be linked
>>> against Sema?
>>
>> Yes. Sorry for not stating this explicitly!
>>
>>> On Fri, Jan 13, 2012 at 5:13 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>>>> On Fri, January 13, 2012 23:03, Delesley Hutchins wrote:
>>>>> The instantiateFromTemplate method is only called from within Sema.
>>>>> Is the layering violation introduced by the forward declaration of
>>>>> class Sema within Attr.h?
>>>>
>>>> It's introduced by the call of Sema::SubstExpr from
>>>> instantiateFromTemplate.
>>>>
>>>>> On Fri, Jan 13, 2012 at 2:33 PM, Richard Smith <richard at metafoo.co.uk>
>>>>> wrote:
>>>>>> Hi Delesley,
>>>>>>
>>>>>> Apologies for the huge delay in getting this patch reviewed!
>>>>>>
>>>>>> On Tue, December 13, 2011 23:08, Delesley Hutchins wrote:
>>>>>>> This patch modifies Sema::InstantiateAttrs so that attributes in
>>>>>>> template code are properly instantiated; the previous behavior was to
>>>>>>> clone them.  The main motivation for the patch are thread safety
>>>>>>> attributes, which make extensive use of expressions.
>>>>>>>
>>>>>>> A new method named instantiateFromTemplate is now generated for all
>>>>>>> attributes.  The behavior of this method is identical to clone() for
>>>>>>> all arguments except ExprArgument and VariadicExprArgument; expression
>>>>>>>  arguments are instantiated rather than cloned.
>>>>>>
>>>>>> This patch introduces a layering violation: AST code is not permitted
>>>>>> to use Sema. In order to resolve this, I suggest you instead modify
>>>>>> TableGen to
>>>>>>  synthesize some Sema code which performs attribute instantiation (using
>>>>>> a switch over the attribute kind).
>>
>>
>
>
>
> --
> DeLesley Hutchins | Software Engineer | delesley at google.com | 505-206-0315



-- 
DeLesley Hutchins | Software Engineer | delesley at google.com | 505-206-0315
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang-template-attribute-rewrite.patch
Type: application/octet-stream
Size: 22267 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120119/9814935c/attachment.obj>


More information about the cfe-commits mailing list