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

Delesley Hutchins delesley at google.com
Tue Jan 17 08:07:13 PST 2012


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?

  -DeLesley

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).
>>>
>>> Thanks,
>>> Richard
>>>
>>>
>>
>>
>>
>> --
>> DeLesley Hutchins | Software Engineer | delesley at google.com | 505-206-0315
>>
>>
>



-- 
DeLesley Hutchins | Software Engineer | delesley at google.com | 505-206-0315




More information about the cfe-commits mailing list