mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 00:01:10 +08:00
dwarf2out.c (is_subrange_type): Do not emit a subrange_type DIE for base types.
* dwarf2out.c (is_subrange_type): Do not emit a subrange_type DIE for base types. From-SVN: r79838
This commit is contained in:
parent
886de2d4dc
commit
d6672e91f1
@ -1,3 +1,8 @@
|
||||
2004-03-22 Joel Brobecker <brobecker@gnat.com>
|
||||
|
||||
* dwarf2out.c (is_subrange_type): Do not emit a subrange_type DIE
|
||||
for base types.
|
||||
|
||||
2004-03-22 Joel Brobecker <brobecker@gnat.com>
|
||||
|
||||
* dwarf2out.c (is_subrange_type): Minor code rework. No behavior
|
||||
|
@ -8012,6 +8012,38 @@ is_subrange_type (tree type)
|
||||
&& TREE_CODE (subtype) != ENUMERAL_TYPE)
|
||||
return false;
|
||||
|
||||
if (TREE_CODE (type) == TREE_CODE (subtype)
|
||||
&& int_size_in_bytes (type) == int_size_in_bytes (subtype)
|
||||
&& TYPE_MIN_VALUE (type) != NULL
|
||||
&& TYPE_MIN_VALUE (subtype) != NULL
|
||||
&& tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
|
||||
&& TYPE_MAX_VALUE (type) != NULL
|
||||
&& TYPE_MAX_VALUE (subtype) != NULL
|
||||
&& tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
|
||||
{
|
||||
/* The type and its subtype have the same representation. If in
|
||||
addition the two types also have the same name, then the given
|
||||
type is not a subrange type, but rather a plain base type. */
|
||||
/* FIXME: brobecker/2004-03-22:
|
||||
Sizetype INTEGER_CSTs nodes are canonicalized. It should
|
||||
therefore be sufficient to check the TYPE_SIZE node pointers
|
||||
rather than checking the actual size. Unfortunately, we have
|
||||
found some cases, such as in the Ada "integer" type, where
|
||||
this is not the case. Until this problem is solved, we need to
|
||||
keep checking the actual size. */
|
||||
tree type_name = TYPE_NAME (type);
|
||||
tree subtype_name = TYPE_NAME (subtype);
|
||||
|
||||
if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
|
||||
type_name = DECL_NAME (type_name);
|
||||
|
||||
if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
|
||||
subtype_name = DECL_NAME (subtype_name);
|
||||
|
||||
if (type_name == subtype_name)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user