aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-09-10 15:38:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-09-10 15:38:20 +0000
commitcf6a409750631fd7ae7b168a94967a33d509be5d (patch)
treeeceae12e1d5be3a0e7d30a291af44350fff94446 /gcc/dwarf2out.c
parent7ffacec467f1808218d1129c62423684455da2ac (diff)
downloadgcc-cf6a409750631fd7ae7b168a94967a33d509be5d.zip
gcc-cf6a409750631fd7ae7b168a94967a33d509be5d.tar.gz
gcc-cf6a409750631fd7ae7b168a94967a33d509be5d.tar.bz2
dwarf2out.c (gen_array_type_die): Output DW_TAG_subrange_type for VECTOR_TYPEs using TYPE_VECTOR_SUBPARTS.
2010-09-10 Richard Guenther <rguenther@suse.de> * dwarf2out.c (gen_array_type_die): Output DW_TAG_subrange_type for VECTOR_TYPEs using TYPE_VECTOR_SUBPARTS. * dbxout.c (dbxout_type): Manually deal with VECTOR_TYPE using TYPE_VECTOR_SUBPARTS, not TYPE_DEBUG_REPRESENTATION_TYPE. From-SVN: r164192
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index d124f22..52632da 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -17941,12 +17941,7 @@ gen_array_type_die (tree type, dw_die_ref context_die)
equate_type_number_to_die (type, array_die);
if (TREE_CODE (type) == VECTOR_TYPE)
- {
- /* The frontend feeds us a representation for the vector as a struct
- containing an array. Pull out the array type. */
- type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
- add_AT_flag (array_die, DW_AT_GNU_vector, 1);
- }
+ add_AT_flag (array_die, DW_AT_GNU_vector, 1);
/* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
if (is_fortran ()
@@ -17969,10 +17964,20 @@ gen_array_type_die (tree type, dw_die_ref context_die)
#ifdef MIPS_DEBUGGING_INFO
/* The SGI compilers handle arrays of unknown bound by setting
AT_declaration and not emitting any subrange DIEs. */
- if (! TYPE_DOMAIN (type))
+ if (TREE_CODE (type) == ARRAY_TYPE
+ && ! TYPE_DOMAIN (type))
add_AT_flag (array_die, DW_AT_declaration, 1);
else
#endif
+ if (TREE_CODE (type) == VECTOR_TYPE)
+ {
+ /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
+ dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
+ add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
+ add_bound_info (subrange_die, DW_AT_upper_bound,
+ size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
+ }
+ else
add_subscript_info (array_die, type, collapse_nested_arrays);
/* Add representation of the type of the elements of this array type and