summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/dbxout.c17
-rw-r--r--gcc/dwarfout.c30
-rw-r--r--gcc/expr.c9
3 files changed, 38 insertions, 18 deletions
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index 2517e6954c3..c3e611d17a5 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -1100,6 +1100,16 @@ dbxout_type (type, full, show_arg_types)
break;
case SET_TYPE:
+ if (use_gnu_debug_info_extensions)
+ {
+ have_used_extensions = 1;
+ fprintf (asmfile, "@s%d;",
+ BITS_PER_UNIT * int_size_in_bytes (type));
+ /* Check if a bitstring type, which in Chill is
+ different from a [power]set. */
+ if (TYPE_STRING_FLAG (type))
+ fprintf (asmfile, "@S;");
+ }
putc ('S', asmfile);
CHARS (1);
dbxout_type (TYPE_DOMAIN (type), 0, 0);
@@ -1110,6 +1120,13 @@ dbxout_type (type, full, show_arg_types)
for the index type of the array
followed by a reference to the target-type.
ar1;0;N;M for a C array of type M and size N+1. */
+ /* Check if a character string type, which in Chill is
+ different from an array of characters. */
+ if (TYPE_STRING_FLAG (type) && use_gnu_debug_info_extensions)
+ {
+ have_used_extensions = 1;
+ fprintf (asmfile, "@S;");
+ }
tem = TYPE_DOMAIN (type);
if (tem == NULL)
fprintf (asmfile, "ar%d;0;-1;",
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index 48cce48b89a..b3d31725674 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -1409,7 +1409,6 @@ type_is_fundamental (type)
case METHOD_TYPE:
case POINTER_TYPE:
case REFERENCE_TYPE:
- case STRING_TYPE:
case FILE_TYPE:
case OFFSET_TYPE:
case LANG_TYPE:
@@ -4003,11 +4002,6 @@ output_type (type, containing_scope)
abort (); /* No way to represent these in Dwarf yet! */
break;
- case STRING_TYPE:
- output_type (TREE_TYPE (type), containing_scope);
- output_die (output_string_type_die, type);
- break;
-
case FUNCTION_TYPE:
/* Force out return type (in case it wasn't forced out already). */
output_type (TREE_TYPE (type), containing_scope);
@@ -4024,17 +4018,23 @@ output_type (type, containing_scope)
end_sibling_chain ();
break;
- case ARRAY_TYPE:
- {
- register tree element_type;
+ case ARRAY_TYPE:
+ if (TYPE_STRING_FLAG (type) && TREE_CODE(TREE_TYPE(type)) == CHAR_TYPE)
+ {
+ output_type (TREE_TYPE (type), containing_scope);
+ output_die (output_string_type_die, type);
+ }
+ else
+ {
+ register tree element_type;
- element_type = TREE_TYPE (type);
- while (TREE_CODE (element_type) == ARRAY_TYPE)
- element_type = TREE_TYPE (element_type);
+ element_type = TREE_TYPE (type);
+ while (TREE_CODE (element_type) == ARRAY_TYPE)
+ element_type = TREE_TYPE (element_type);
- output_type (element_type, containing_scope);
- output_die (output_array_type_die, type);
- }
+ output_type (element_type, containing_scope);
+ output_die (output_array_type_die, type);
+ }
break;
case ENUMERAL_TYPE:
diff --git a/gcc/expr.c b/gcc/expr.c
index ae1e5a46569..2348a857d95 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -7004,9 +7004,12 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (code == UNION_TYPE || code == QUAL_UNION_TYPE)
return GEN_INT (union_type_class);
if (code == ARRAY_TYPE)
- return GEN_INT (array_type_class);
- if (code == STRING_TYPE)
- return GEN_INT (string_type_class);
+ {
+ if (TYPE_STRING_FLAG (type))
+ return GEN_INT (string_type_class);
+ else
+ return GEN_INT (array_type_class);
+ }
if (code == SET_TYPE)
return GEN_INT (set_type_class);
if (code == FILE_TYPE)
OpenPOWER on IntegriCloud