dwarf2out.c (modified_type_die): Do not call type_main_variant for vectors.

2002-02-26  Aldy Hernandez  <aldyh@redhat.com>

        * dwarf2out.c (modified_type_die): Do not call type_main_variant
        for vectors.
        (gen_type_die): Same.

        * attribs.c (handle_vector_size_attribute): Set debug information.

From-SVN: r50048
This commit is contained in:
Aldy Hernandez 2002-02-26 06:58:01 +00:00 committed by Aldy Hernandez
parent a50cfd52a6
commit 0e98f92438
3 changed files with 46 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2002-02-26 Aldy Hernandez <aldyh@redhat.com>
* dwarf2out.c (modified_type_die): Do not call type_main_variant
for vectors.
(gen_type_die): Same.
* attribs.c (handle_vector_size_attribute): Set debug information.
2002-02-26 Daniel Egger <degger@fhm.edu>
* config/rs6000/rs6000.md: Swap define_insn attributes to

View File

@ -1307,12 +1307,33 @@ handle_vector_size_attribute (node, name, args, flags, no_add_attrs)
error ("no vector mode with the size and type specified could be found");
else
{
tree index, array, rt;
new_type = type_for_mode (new_mode, TREE_UNSIGNED (type));
if (!new_type)
error ("no vector mode with the size and type specified could be found");
else
/* Build back pointers if needed. */
*node = vector_size_helper (*node, new_type);
{
error ("no vector mode with the size and type specified could be found");
return NULL_TREE;
}
new_type = build_type_copy (new_type);
/* Set the debug information here, because this is the only
place where we know the underlying type for a vector made
with vector_size. For debugging purposes we pretend a vector
is an array within a structure. */
index = build_int_2 (TYPE_VECTOR_SUBPARTS (new_type) - 1, 0);
array = build_array_type (type, build_index_type (index));
rt = make_node (RECORD_TYPE);
TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
layout_type (rt);
TYPE_DEBUG_REPRESENTATION_TYPE (new_type) = rt;
/* Build back pointers if needed. */
*node = vector_size_helper (*node, new_type);
}
return NULL_TREE;

View File

@ -7565,7 +7565,12 @@ modified_type_die (type, is_const_type, is_volatile_type, context_die)
copy was created to help us keep track of typedef names) and
that copy might have a different TYPE_UID from the original
..._TYPE node. */
mod_type_die = lookup_type_die (type_main_variant (type));
if (TREE_CODE (type) != VECTOR_TYPE)
mod_type_die = lookup_type_die (type_main_variant (type));
else
/* Vectors have the debugging information in the type,
not the main variant. */
mod_type_die = lookup_type_die (type);
if (mod_type_die == NULL)
abort ();
}
@ -10976,10 +10981,13 @@ gen_type_die (type, context_die)
if (type == NULL_TREE || type == error_mark_node)
return;
/* We are going to output a DIE to represent the unqualified version of
this type (i.e. without any const or volatile qualifiers) so get the
main variant (i.e. the unqualified version) of this type now. */
type = type_main_variant (type);
/* We are going to output a DIE to represent the unqualified version
of this type (i.e. without any const or volatile qualifiers) so
get the main variant (i.e. the unqualified version) of this type
now. (Vectors are special because the debugging info is in the
cloned type itself). */
if (TREE_CODE (type) != VECTOR_TYPE)
type = type_main_variant (type);
if (TREE_ASM_WRITTEN (type))
return;