On 7/2/25 00:42, Richard Biener wrote:
> On Tue, Jun 10, 2025 at 11:40 PM David Faust <david.fa...@oracle.com> wrote:
>>
>> Add two new c-family attributes, "btf_type_tag" and "btf_decl_tag"
>> along with a simple shared handler for them.
>>
>> gcc/c-family/
>>         * c-attribs.cc (c_common_attribute_table): Add btf_decl_tag and
>>         btf_type_tag attributes.
>>         (handle_btf_tag_attribute): New handler for both new attributes.
>> ---
>>  gcc/c-family/c-attribs.cc | 25 ++++++++++++++++++++++++-
>>  1 file changed, 24 insertions(+), 1 deletion(-)
>>
>> diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
>> index 5a0e3d328ba..cc1efaeaaec 100644
>> --- a/gcc/c-family/c-attribs.cc
>> +++ b/gcc/c-family/c-attribs.cc
>> @@ -189,6 +189,8 @@ static tree handle_fd_arg_attribute (tree *, tree, tree, 
>> int, bool *);
>>  static tree handle_flag_enum_attribute (tree *, tree, tree, int, bool *);
>>  static tree handle_null_terminated_string_arg_attribute (tree *, tree, 
>> tree, int, bool *);
>>
>> +static tree handle_btf_tag_attribute (tree *, tree, tree, int, bool *);
>> +
>>  /* Helper to define attribute exclusions.  */
>>  #define ATTR_EXCL(name, function, type, variable)      \
>>    { name, function, type, variable }
>> @@ -640,7 +642,11 @@ const struct attribute_spec c_common_gnu_attributes[] =
>>    { "flag_enum",             0, 0, false, true, false, false,
>>                               handle_flag_enum_attribute, NULL },
>>    { "null_terminated_string_arg", 1, 1, false, true, true, false,
>> -                             handle_null_terminated_string_arg_attribute, 
>> NULL}
>> +                             handle_null_terminated_string_arg_attribute, 
>> NULL},
>> +  { "btf_type_tag",          1, 1, false, true, false, false,
>> +                             handle_btf_tag_attribute, NULL},
>> +  { "btf_decl_tag",          1, 1, true, false, false, false,
>> +                             handle_btf_tag_attribute, NULL}
>>  };
>>
>>  const struct scoped_attribute_specs c_common_gnu_attribute_table =
>> @@ -5101,6 +5107,23 @@ handle_null_terminated_string_arg_attribute (tree 
>> *node, tree name, tree args,
>>    return NULL_TREE;
>>  }
>>
>> +/* Handle the "btf_decl_tag" and "btf_type_tag" attributes.  */
>> +
>> +static tree
>> +handle_btf_tag_attribute (tree * ARG_UNUSED (node), tree name, tree args,
>> +                         int ARG_UNUSED (flags), bool *no_add_attrs)
>> +{
>> +  if (!args)
>> +    *no_add_attrs = true;
>> +  else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
>> +    {
>> +      error ("%qE attribute requires a string", name);
>> +      *no_add_attrs = true;
>> +    }
>> +
> 
> So with respect to the dwarf2out patch discussion I think attribute
> handling should
> be similar to how we handle the aligned attribute which makes sure to
> build a new
> type variant to apply the attribute to if not ATTR_FLAG_TYPE_IN_PLACE.

Thanks for the pointer to aligned. This part is more clear to me now,
after seeing how the type variants are handled there.

I think you're right, we should do similar for type_tag.  I will try
it and include in the next version.

> 
> Richard.
> 
>> +  return NULL_TREE;
>> +}
>> +
>>  /* Handle the "nonstring" variable attribute.  */
>>
>>  static tree
>> --
>> 2.47.2
>>

Reply via email to