]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/24267 ([3.4 only] Bad DWARF for altivec vectors)
authorJanis Johnson <janis187@us.ibm.com>
Sat, 8 Oct 2005 22:24:50 +0000 (22:24 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Sat, 8 Oct 2005 22:24:50 +0000 (22:24 +0000)
PR debug/24267
Partial backport from mainline
2004-05-04 Paolo Bonzini  <bonzini@gnu.org>
   Richard Henderson  <rth@redhat.com>
* 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
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-altivec1.c [new file with mode: 0644]
gcc/tree.c

index 70cff3d025effe5363b5e350e39ae38d40b6073b..9d095fefc2f37eb4b442bd019cd0f21fb58238c7 100644 (file)
@@ -1,5 +1,13 @@
 2005-10-08  Janis Johnson  <janis187@us.ibm.com>
 
+       PR debug/24267
+       Partial backport from mainline
+       2004-05-04 Paolo Bonzini  <bonzini@gnu.org>
+                  Richard Henderson  <rth@redhat.com>
+       * 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  <bonzini@gnu.org>
                   Richard Henderson  <rth@redhat.com>
index 77ec495dfe27bbcec2e228b9e16592504d052651..f24a7c624d8db0f8b21262ef1d98399a11499574 100644 (file)
@@ -1,5 +1,9 @@
 2005-10-08  Janis Johnson  <janis187@us.ibm.com>
 
+       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  <reichelt@igpm.rwth-aachen.de>
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 (file)
index 0000000..374cd17
--- /dev/null
@@ -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__" } } */
index aa5c35842bb6bfae7875c392b1f579f2235b41f0..c1ca94777596f4e0f7b6a5d9fe174a8ec23ac53e 100644 (file)
@@ -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");