Hi Jose, Thanks for the review and apologies for the dangling comment from previous version.
Cheers, Cupertino ------ DWARF output contained no names for the compiler's base types, so they were emitted with the type name __unknown__. In dwarf2out.cc, comments suggest that the __unknown__ type code flow is likely a bug. a68 frontend never assigned names to its built-in types. This patch sets a type name for every built-in type during a68 initialization so they are emitted correctly in DWARF output. Signed-off-by: Cupertino Miranda <[email protected]> gcc/algol68/ChangeLog * a68-lang.cc (PUSH_TYPE): Macro definition (a68_build_a68_type_nodes): Inserted type names using PUSH_TYPE macro. (pushdecl): Added logic to insert name to the type declaration. --- gcc/algol68/a68-lang.cc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gcc/algol68/a68-lang.cc b/gcc/algol68/a68-lang.cc index 77ddbf08788..33ca7b5a037 100644 --- a/gcc/algol68/a68-lang.cc +++ b/gcc/algol68/a68-lang.cc @@ -123,6 +123,9 @@ a68_type_moid (tree type) return TYPE_LANG_SPECIFIC (type)->moid; } +#define PUSH_TYPE(name, node) \ + TYPE_NAME (node) = get_identifier (name); + /* Build the type trees in a68_global_trees. */ static void @@ -138,9 +141,11 @@ a68_build_a68_type_nodes (void) /* BOOL */ a68_bool_type = boolean_type_node; + PUSH_TYPE ("bool", a68_bool_type); /* CHAR */ a68_char_type = uint32_type_node; + PUSH_TYPE ("char", a68_char_type); /* SHORT SHORT INT SHORT INT @@ -148,6 +153,9 @@ a68_build_a68_type_nodes (void) a68_short_short_int_type = signed_char_type_node; a68_short_int_type = short_integer_type_node; a68_int_type = integer_type_node; + PUSH_TYPE ("short short int", a68_short_short_int_type); + PUSH_TYPE ("short int", a68_short_int_type); + PUSH_TYPE ("int", a68_int_type); /* LONG INT */ if (int_size_in_bytes (long_integer_type_node) @@ -158,6 +166,7 @@ a68_build_a68_type_nodes (void) a68_long_int_type = long_long_integer_type_node; else a68_long_int_type = a68_int_type; + PUSH_TYPE ("long int", a68_long_int_type); /* LONG LONG INT */ if (int_size_in_bytes (long_integer_type_node) @@ -168,6 +177,7 @@ a68_build_a68_type_nodes (void) a68_long_long_int_type = long_long_integer_type_node; else a68_long_long_int_type = a68_long_int_type; + PUSH_TYPE ("long long int", a68_long_long_int_type); /* SHORT SHORT BITS SHORT BITS @@ -175,6 +185,9 @@ a68_build_a68_type_nodes (void) a68_short_short_bits_type = unsigned_char_type_node; a68_short_bits_type = short_unsigned_type_node; a68_bits_type = unsigned_type_node; + PUSH_TYPE ("short short bits", a68_short_short_bits_type); + PUSH_TYPE ("short bits", a68_short_bits_type); + PUSH_TYPE ("bits", a68_bits_type); /* LONG BITS */ if (int_size_in_bytes (long_unsigned_type_node) @@ -185,6 +198,7 @@ a68_build_a68_type_nodes (void) a68_long_bits_type = long_long_unsigned_type_node; else a68_long_bits_type = a68_bits_type; + PUSH_TYPE ("long bits", a68_long_bits_type); /* LONG LONG BITS */ if (int_size_in_bytes (long_unsigned_type_node) @@ -195,11 +209,14 @@ a68_build_a68_type_nodes (void) a68_long_long_bits_type = long_long_unsigned_type_node; else a68_long_long_bits_type = a68_long_bits_type; + PUSH_TYPE ("long long bits", a68_long_long_bits_type); /* BYTES LONG BYTES */ a68_bytes_type = unsigned_type_node; a68_long_bytes_type = long_unsigned_type_node; + PUSH_TYPE ("bytes", a68_bytes_type); + PUSH_TYPE ("long bytes", a68_long_bytes_type); /* REAL LONG REAL @@ -207,7 +224,11 @@ a68_build_a68_type_nodes (void) a68_real_type = float_type_node; a68_long_real_type = double_type_node; a68_long_long_real_type = long_double_type_node; + PUSH_TYPE ("real", a68_real_type); + PUSH_TYPE ("long real", a68_long_real_type); + PUSH_TYPE ("long long real", a68_long_long_real_type); } +#undef PUSH_TYPE /* Language hooks data structures. This is the main interface between the GCC front-end and the GCC middle-end/back-end. A list of @@ -529,7 +550,7 @@ a68_handle_option (size_t scode, if (file == NULL) fatal_error (UNKNOWN_LOCATION, "cannot open modules map file %<%s%>", arg); - + ssize_t ssize = a68_file_size (fileno (file)); if (ssize < 0) fatal_error (UNKNOWN_LOCATION, -- 2.47.3
