From a7b0b0756086c6dce01a8d85fa51b6ce5edad3b4 Mon Sep 17 00:00:00 2001 From: Janis Johnson Date: Sat, 8 Oct 2005 22:24:50 +0000 Subject: [PATCH] re PR debug/24267 ([3.4 only] Bad DWARF for altivec vectors) PR debug/24267 Partial backport from mainline 2004-05-04 Paolo Bonzini Richard Henderson * tree.c (make_or_reuse_type): New. (build_common_tree_nodes): Use it. testsuite: * gcc.dg/debug/dwarf2/dwarf-altivec1.c: New test. From-SVN: r105125 --- gcc/ChangeLog | 8 ++++ gcc/testsuite/ChangeLog | 4 ++ .../gcc.dg/debug/dwarf2/dwarf-altivec1.c | 16 +++++++ gcc/tree.c | 47 ++++++++++++++----- 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-altivec1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 70cff3d025ef..9d095fefc2f3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2005-10-08 Janis Johnson + PR debug/24267 + Partial backport from mainline + 2004-05-04 Paolo Bonzini + Richard Henderson + * tree.c (make_or_reuse_type): New. + (build_common_tree_nodes): Use it. + + PR target/18583 Partial backport from mainline 2004-05-04 Paolo Bonzini Richard Henderson diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 77ec495dfe27..f24a7c624d8d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2005-10-08 Janis Johnson + PR debug/24267 + * gcc.dg/debug/dwarf2/dwarf-altivec1.c: New test. + + PR target/18583 * gcc.dg/altivec-pr18583.c: New test. 2005-09-21 Volker Reichelt diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-altivec1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-altivec1.c new file mode 100644 index 000000000000..374cd17db472 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-altivec1.c @@ -0,0 +1,16 @@ +/* Verify that debug information does not have unknown names for + vector base types. */ +/* { dg-do compile { target powerpc*-*-* } } */ +/* { dg-options "-gdwarf-2 -maltivec" } */ + +__vector __bool vb; +__vector float vf; +__vector __pixel vp; +__vector signed char vsc; +__vector signed int vsi; +__vector signed short vss; +__vector unsigned char vuc; +__vector unsigned int vui; +__vector unsigned short vus; + +/* { dg-final { scan-assembler-not "__unknown__" } } */ diff --git a/gcc/tree.c b/gcc/tree.c index aa5c35842bb6..c1ca94777596 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4808,6 +4808,27 @@ finish_vector_type (tree t) } } +static tree +make_or_reuse_type (unsigned size, int unsignedp) +{ + if (size == INT_TYPE_SIZE) + return unsignedp ? unsigned_type_node : integer_type_node; + if (size == CHAR_TYPE_SIZE) + return unsignedp ? unsigned_char_type_node : signed_char_type_node; + if (size == SHORT_TYPE_SIZE) + return unsignedp ? short_unsigned_type_node : short_integer_type_node; + if (size == LONG_TYPE_SIZE) + return unsignedp ? long_unsigned_type_node : long_integer_type_node; + if (size == LONG_LONG_TYPE_SIZE) + return (unsignedp ? long_long_unsigned_type_node + : long_long_integer_type_node); + + if (unsignedp) + return make_unsigned_type (size); + else + return make_signed_type (size); +} + /* Create nodes for all integer types (and error_mark_node) using the sizes of C datatypes. The caller should call set_sizetype soon after calling this function to select one of the types as sizetype. */ @@ -4850,18 +4871,20 @@ build_common_tree_nodes (int signed_char) TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node; TYPE_PRECISION (boolean_type_node) = 1; - intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode)); - intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode)); - intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode)); - intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode)); - intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode)); - - unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode)); - unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode)); - unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode)); - unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode)); - unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode)); - + /* Fill in the rest of the sized types. Reuse existing type nodes + when possible. */ + intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0); + intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0); + intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0); + intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0); + intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0); + + unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1); + unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1); + unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1); + unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1); + unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1); + access_public_node = get_identifier ("public"); access_protected_node = get_identifier ("protected"); access_private_node = get_identifier ("private"); -- 2.47.2