[Dwarf-Discuss] How to generate DWARF info for a template alias to a raw pointer
Robinson, Paul
paul.robinson at sony.com
Fri May 6 10:08:27 PDT 2022
> Could someone help to point out what kind of DWARF info should
> be generated for below c++ source? Thanks
>
> ```
> template<class T>
> using ptr = T*;
>
> ptr<int> abc;
> ```
>
> We declare a template alias here, so we may generate
> `DW_TAG_template_type_parameter` like:
>
> ```
> 0x00000057: DW_TAG_base_type
> DW_AT_name ("int")
> DW_AT_byte_size (0x04)
> DW_AT_encoding (DW_ATE_signed)
>
> 0x0000005e: DW_TAG_pointer_type
> DW_AT_type (0x00000057 "int")
>
> 0x00000064: DW_TAG_template_alias
> DW_AT_name ("ptr")
> DW_AT_type (0x0000005e "int *")
>
> 0x00000076: DW_TAG_template_type_parameter
> DW_AT_name ("T")
> DW_AT_type (0x00000057 "int")
>
> 0x0000007e: DW_TAG_variable
> DW_AT_name ("abc")
> DW_AT_type (0x00000064 "ptr<int>")
> ```
This all looks okay to me, with DW_TAG_template_type_parameter
being a child of DW_TAG_template_alias. There's an alias
named `ptr`, its formal parameter is `T`, its actual parameter
is `int`, and so the alias is a typedef of `int *`.
> ` DW_TAG_template_type_parameter ` should be for a notation to
> create a template base on another template, but as you can see
> the referred type 0x0000005e is not a template. What kind of
> DWARF info should we generate here? We should use
> ` DW_TAG_typedef` instead of ` DW_TAG_template_type_parameter`
> for this special case?
DW_TAG_template_type_parameter is correctly describing the
parameter to the template.
There's no need for a DW_TAG_typedef, because DW_TAG_template_alias
is implicitly a typedef.
--paulr
More information about the Dwarf-Discuss
mailing list