Skip to content

Commit

Permalink
PR debug/42278
Browse files Browse the repository at this point in the history
	* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159315 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
jakub authored and richlowe committed May 15, 2011
1 parent 610511a commit aa46c5e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 8 deletions.
10 changes: 10 additions & 0 deletions gcc/ChangeLog
@@ -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-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>

* configure.ac (gcc_cv_as_cfi_directive) [i?86-*-solaris*]:
Expand Down
27 changes: 19 additions & 8 deletions gcc/dwarf2out.c
Expand Up @@ -9365,10 +9365,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);
Expand Down Expand Up @@ -9544,6 +9540,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)
{
Expand Down Expand Up @@ -9641,6 +9652,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);
Expand Down Expand Up @@ -15532,10 +15546,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. */
Expand Down

0 comments on commit aa46c5e

Please sign in to comment.