[Bug lto/62190] LTO DWARF produces __unknown__ type for unsigned int function argument type
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Aug 20 08:48:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62190
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2014-08-20
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, so the reason is that when C parses 'unsigned int' it somehow ends up using
uint32_type_node instead of unsigned_int_type_node and LTO only assigns
identifiers to a subset of all types (well, we're lazy...).
"Somehow ends up" because unsigned_type_node is pointer-equal to
uint64_type_node
for C.
I can see how this is annoying. Will fix.
Index: gcc/tree.c
===================================================================
--- gcc/tree.c (revision 214212)
+++ gcc/tree.c (working copy)
@@ -9698,9 +9698,9 @@ build_common_tree_nodes (bool signed_cha
integer_ptr_type_node = build_pointer_type (integer_type_node);
/* Fixed size integer types. */
- uint16_type_node = build_nonstandard_integer_type (16, true);
- uint32_type_node = build_nonstandard_integer_type (32, true);
- uint64_type_node = build_nonstandard_integer_type (64, true);
+ uint16_type_node = make_or_reuse_type (16, 1);
+ uint32_type_node = make_or_reuse_type (32, 1);
+ uint64_type_node = make_or_reuse_type (64, 1);
/* Decimal float types. */
dfloat32_type_node = make_node (REAL_TYPE);
More information about the Gcc-bugs
mailing list