const type_base_sptr&
get_variadic_parameter_type() const;
+ static string&
+ get_variadic_parameter_type_name();
+
bool
canonicalization_is_done() const;
else if (child_tag == DW_TAG_unspecified_parameters)
{
// This is a variadic function parameter.
- parm_names.push_back("variadic parameter type");
+ parm_names.push_back(rdr.env().get_variadic_parameter_type_name());
// After a DW_TAG_unspecified_parameters tag, we shouldn't
// keep reading for parameters. The
// unspecified_parameters TAG should be the last parameter
{
if (!priv_->variadic_marker_type_)
priv_->variadic_marker_type_.
- reset(new type_decl(*this,
- intern("variadic parameter type"),
+ reset(new type_decl(*this, intern(get_variadic_parameter_type_name()),
0, 0, location()));
return priv_->variadic_marker_type_;
}
+/// Getter of the name of the variadic parameter type.
+///
+/// @return the name of the variadic parameter type.
+string&
+environment::get_variadic_parameter_type_name()
+{
+ static string variadic_parameter_type_name = "variadic parameter type";
+ return variadic_parameter_type_name;
+}
+
/// Test if the canonicalization of types created out of the current
/// environment is done.
///
}
const environment& env = rdr.get_environment();
- type_decl_sptr decl(new type_decl(env, name, size_in_bits,
- alignment_in_bits, loc));
+ type_decl_sptr decl;
+ if (name == env.get_variadic_parameter_type_name())
+ decl = is_type_decl(env.get_variadic_parameter_type());
+ else
+ decl.reset(new type_decl(env, name, size_in_bits,
+ alignment_in_bits, loc));
maybe_set_artificial_location(rdr, node, decl);
decl->set_is_anonymous(is_anonymous);
decl->set_is_declaration_only(is_decl_only);
<var-decl name='m0' type-id='type-id-4' visibility='default'/>
</data-member>
</class-decl>
- <typedef-decl name='POINTER' type-id='type-id-5' id='type-id-4'/>
- <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
- <pointer-type-def type-id='type-id-3' size-in-bits='64' alignment-in-bits='64' id='type-id-7'/>
- <qualified-type-def type-id='type-id-8' const='yes' id='type-id-9'/>
- <pointer-type-def type-id='type-id-9' size-in-bits='64' alignment-in-bits='64' id='type-id-5'/>
- <pointer-type-def type-id='type-id-8' size-in-bits='64' alignment-in-bits='64' id='type-id-2'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-5'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-8' size-in-bits='64' alignment-in-bits='64' id='type-id-9'/>
<function-decl name='bar' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bar'>
- <parameter type-id='type-id-7'/>
- <return type-id='type-id-8'/>
+ <parameter type-id='type-id-6'/>
+ <return type-id='type-id-7'/>
</function-decl>
<function-decl name='foo' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
- <parameter type-id='type-id-6'/>
- <return type-id='type-id-8'/>
+ <parameter type-id='type-id-5'/>
+ <return type-id='type-id-7'/>
</function-decl>
- <type-decl name='void' id='type-id-8'/>
+ <typedef-decl name='POINTER' type-id='type-id-9' id='type-id-4'/>
+ <type-decl name='void' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-7' size-in-bits='64' alignment-in-bits='64' id='type-id-2'/>
</abi-instr>
</abi-corpus>
<var-decl name='m0' type-id='8a34a235' visibility='default'/>
</data-member>
</class-decl>
- <typedef-decl name='POINTER' type-id='6e97a70c' id='8a34a235'/>
<pointer-type-def type-id='109cd6fe' size-in-bits='64' alignment-in-bits='64' id='842ea234'/>
<pointer-type-def type-id='119cd891' size-in-bits='64' alignment-in-bits='64' id='5e30a4f9'/>
<qualified-type-def type-id='48b5725f' const='yes' id='8581546e'/>
<pointer-type-def type-id='8581546e' size-in-bits='64' alignment-in-bits='64' id='6e97a70c'/>
- <pointer-type-def type-id='48b5725f' size-in-bits='64' alignment-in-bits='64' id='eaa32e2f'/>
<function-decl name='bar' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bar'>
<parameter type-id='5e30a4f9'/>
<return type-id='48b5725f'/>
<parameter type-id='842ea234'/>
<return type-id='48b5725f'/>
</function-decl>
+ <typedef-decl name='POINTER' type-id='6e97a70c' id='8a34a235'/>
<type-decl name='void' id='48b5725f'/>
+ <pointer-type-def type-id='48b5725f' size-in-bits='64' alignment-in-bits='64' id='eaa32e2f'/>
</abi-instr>
</abi-corpus>
<elf-symbol name='bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
<abi-instr address-size='64' language='LANG_C'>
- <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-2'/>
<function-decl name='bar' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bar'>
- <parameter type-id='type-id-2'/>
- <return type-id='type-id-1'/>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-2'/>
</function-decl>
- <type-decl name='void' id='type-id-1'/>
+ <type-decl name='void' id='type-id-2'/>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' alignment-in-bits='64' id='type-id-1'/>
</abi-instr>
</abi-corpus>