re PR debug/42278 (incorrect dwarf data gcc-4.4.2)
PR debug/42278 * dwarf2out.c (base_type_die): Don't add name attribute here. (modified_type_die): Instead of sizetype use its underlying original type. If a DW_TAG_base_type doesn't have name added, add __unknown__. (dwarf2out_imported_module_or_decl_1): Don't call base_type_die, always call force_type_die instead. From-SVN: r159315
This commit is contained in:
parent
5e247ae5a1
commit
7c2db0d362
@ -1,3 +1,13 @@
|
||||
2010-05-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/42278
|
||||
* dwarf2out.c (base_type_die): Don't add name attribute here.
|
||||
(modified_type_die): Instead of sizetype use
|
||||
its underlying original type. If a DW_TAG_base_type doesn't
|
||||
have name added, add __unknown__.
|
||||
(dwarf2out_imported_module_or_decl_1): Don't call base_type_die,
|
||||
always call force_type_die instead.
|
||||
|
||||
2010-05-12 Maxim Kuvyrkov <maxim@codesourcery.com>
|
||||
|
||||
* targhooks.c (default_stack_protect_guard): Avoid sharing RTL
|
||||
|
@ -12073,10 +12073,6 @@ base_type_die (tree type)
|
||||
|
||||
base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
|
||||
|
||||
/* This probably indicates a bug. */
|
||||
if (! TYPE_NAME (type))
|
||||
add_name_attribute (base_type_result, "__unknown__");
|
||||
|
||||
add_AT_unsigned (base_type_result, DW_AT_byte_size,
|
||||
int_size_in_bytes (type));
|
||||
add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
|
||||
@ -12195,6 +12191,21 @@ modified_type_die (tree type, int is_const_type, int is_volatile_type,
|
||||
((is_const_type ? TYPE_QUAL_CONST : 0)
|
||||
| (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
|
||||
|
||||
if (qualified_type == sizetype
|
||||
&& TYPE_NAME (qualified_type)
|
||||
&& TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
|
||||
{
|
||||
#ifdef ENABLE_CHECKING
|
||||
gcc_assert (TREE_CODE (TREE_TYPE (TYPE_NAME (qualified_type)))
|
||||
== INTEGER_TYPE
|
||||
&& TYPE_PRECISION (TREE_TYPE (TYPE_NAME (qualified_type)))
|
||||
== TYPE_PRECISION (qualified_type)
|
||||
&& TYPE_UNSIGNED (TREE_TYPE (TYPE_NAME (qualified_type)))
|
||||
== TYPE_UNSIGNED (qualified_type));
|
||||
#endif
|
||||
qualified_type = TREE_TYPE (TYPE_NAME (qualified_type));
|
||||
}
|
||||
|
||||
/* If we do, then we can just use its DIE, if it exists. */
|
||||
if (qualified_type)
|
||||
{
|
||||
@ -12311,6 +12322,9 @@ modified_type_die (tree type, int is_const_type, int is_volatile_type,
|
||||
name = DECL_NAME (name);
|
||||
add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
|
||||
}
|
||||
/* This probably indicates a bug. */
|
||||
else if (mod_type_die->die_tag == DW_TAG_base_type)
|
||||
add_name_attribute (mod_type_die, "__unknown__");
|
||||
|
||||
if (qualified_type)
|
||||
equate_type_number_to_die (qualified_type, mod_type_die);
|
||||
@ -19816,10 +19830,7 @@ dwarf2out_imported_module_or_decl_1 (tree decl,
|
||||
|
||||
if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
|
||||
{
|
||||
if (is_base_type (TREE_TYPE (decl)))
|
||||
at_import_die = base_type_die (TREE_TYPE (decl));
|
||||
else
|
||||
at_import_die = force_type_die (TREE_TYPE (decl));
|
||||
at_import_die = force_type_die (TREE_TYPE (decl));
|
||||
/* For namespace N { typedef void T; } using N::T; base_type_die
|
||||
returns NULL, but DW_TAG_imported_declaration requires
|
||||
the DW_AT_import tag. Force creation of DW_TAG_typedef. */
|
||||
|
Loading…
Reference in New Issue
Block a user