rpms/gcc4/FC-3 gcc4-c++-pr10606-revert.patch, NONE, 1.1 gcc4-g++-struct-layout.patch, NONE, 1.1 gcc4-pr16104-test.patch, NONE, 1.1 .cvsignore, 1.8, 1.9 gcc4-c++-pr19317.patch, 1.1, 1.2 gcc4-pr20249.patch, 1.1, 1.2 gcc4a.spec, 1.14, 1.15 sources, 1.9, 1.10 gcc4-ada-makej.patch, 1.1, NONE gcc4-c++-pr20381.patch, 1.1, NONE gcc4-libjawt.patch, 1.1, NONE gcc4-pr16104.patch, 1.1, NONE gcc4-pr19769-workaround.patch, 1.1, NONE gcc4-rh150150.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Wed Apr 6 08:51:56 UTC 2005


Update of /cvs/dist/rpms/gcc4/FC-3
In directory cvs.devel.redhat.com:/tmp/cvs-serv3706

Modified Files:
	.cvsignore gcc4-c++-pr19317.patch gcc4-pr20249.patch 
	gcc4a.spec sources 
Added Files:
	gcc4-c++-pr10606-revert.patch gcc4-g++-struct-layout.patch 
	gcc4-pr16104-test.patch 
Removed Files:
	gcc4-ada-makej.patch gcc4-c++-pr20381.patch gcc4-libjawt.patch 
	gcc4-pr16104.patch gcc4-pr19769-workaround.patch 
	gcc4-rh150150.patch 
Log Message:
4.0.0-0.41.fc3


gcc4-c++-pr10606-revert.patch:
 except.c |   92 +++++++++++++++++++++++----------------------------------------
 1 files changed, 34 insertions(+), 58 deletions(-)

--- NEW FILE gcc4-c++-pr10606-revert.patch ---
2005-04-06  Jakub Jelinek  <jakub at redhat.com>

	Revert:
	2005-02-18  Richard Henderson  <rth at redhat.com>
	PR libstdc++/10606
	* except.c (do_get_exception_ptr): New.
	(expand_start_catch_block): Use it.

--- gcc/except.c	19 Feb 2005 02:35:16 -0000	1.181
+++ gcc/except.c	11 Feb 2005 16:28:37 -0000	1.180
@@ -153,26 +153,6 @@ build_exc_ptr (void)
   return build0 (EXC_PTR_EXPR, ptr_type_node);
 }
 
-/* Build up a call to __cxa_get_exception_ptr so that we can build a
-   copy constructor for the thrown object.  */
-
-static tree
-do_get_exception_ptr (void)
-{
-  tree fn;
-
-  fn = get_identifier ("__cxa_get_exception_ptr");
-  if (!get_global_value_if_present (fn, &fn))
-    {
-      /* Declare void* __cxa_get_exception_ptr (void *).  */
-      tree tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
-      fn = push_library_fn (fn, build_function_type (ptr_type_node, tmp));
-    }
-
-  return build_function_call (fn, tree_cons (NULL_TREE, build_exc_ptr (),
-					     NULL_TREE));
-}
-
 /* Build up a call to __cxa_begin_catch, to tell the runtime that the
    exception has been handled.  */
 
@@ -401,8 +381,9 @@ initialize_handler_parm (tree decl, tree
 tree
 expand_start_catch_block (tree decl)
 {
-  tree exp;
+  tree exp = NULL_TREE;
   tree type;
+  bool is_java;
 
   if (! doing_eh (1))
     return NULL_TREE;
@@ -416,50 +397,45 @@ expand_start_catch_block (tree decl)
   else
     type = NULL_TREE;
 
-  if (decl && decl_is_java_type (type, 1))
+  is_java = false;
+  if (decl)
     {
-      /* Java only passes object via pointer and doesn't require
-	 adjusting.  The java object is immediately before the
-	 generic exception header.  */
-      exp = build_exc_ptr ();
-      exp = build1 (NOP_EXPR, build_pointer_type (type), exp);
-      exp = build2 (MINUS_EXPR, TREE_TYPE (exp), exp,
-		    TYPE_SIZE_UNIT (TREE_TYPE (exp)));
-      exp = build_indirect_ref (exp, NULL);
-      initialize_handler_parm (decl, exp);
-      return type;
-    }
-
-  /* Call __cxa_end_catch at the end of processing the exception.  */
-  push_eh_cleanup (type);
-
-  /* If there's no decl at all, then all we need to do is make sure
-     to tell the runtime that we've begun handling the exception.  */
-  if (decl == NULL)
-    finish_expr_stmt (do_begin_catch ());
-
-  /* If the C++ object needs constructing, we need to do that before
-     calling __cxa_begin_catch, so that std::uncaught_exception gets
-     the right value during the copy constructor.  */
-  else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
-    {
-      exp = do_get_exception_ptr ();
-      initialize_handler_parm (decl, exp);
-      finish_expr_stmt (do_begin_catch ());
-    }
+      tree init;
 
-  /* Otherwise the type uses a bitwise copy, and we don't have to worry
-     about the value of std::uncaught_exception and therefore can do the
-     copy with the return value of __cxa_end_catch instead.  */
-  else
-    {
-      tree init = do_begin_catch ();
+      if (decl_is_java_type (type, 1))
+	{
+	  /* Java only passes object via pointer and doesn't require
+	     adjusting.  The java object is immediately before the
+	     generic exception header.  */
+	  init = build_exc_ptr ();
+	  init = build1 (NOP_EXPR, build_pointer_type (type), init);
+	  init = build2 (MINUS_EXPR, TREE_TYPE (init), init,
+			 TYPE_SIZE_UNIT (TREE_TYPE (init)));
+	  init = build_indirect_ref (init, NULL);
+	  is_java = true;
+	}
+      else
+	{
+	  /* C++ requires that we call __cxa_begin_catch to get the
+	     pointer to the actual object.  */
+	  init = do_begin_catch ();
+	}
+	  
       exp = create_temporary_var (ptr_type_node);
       DECL_REGISTER (exp) = 1;
       cp_finish_decl (exp, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
       finish_expr_stmt (build_modify_expr (exp, INIT_EXPR, init));
-      initialize_handler_parm (decl, exp);
     }
+  else
+    finish_expr_stmt (do_begin_catch ());
+
+  /* C++ requires that we call __cxa_end_catch at the end of
+     processing the exception.  */
+  if (! is_java)
+    push_eh_cleanup (type);
+
+  if (decl)
+    initialize_handler_parm (decl, exp);
 
   return type;
 }

gcc4-g++-struct-layout.patch:
 struct-layout-1.exp        |  155 +++++
 struct-layout-1.h          |  342 +++++++++++
 struct-layout-1_generate.c | 1339 +++++++++++++++++++++++++++++++++++++++++++++
 struct-layout-1_x1.h       |   68 ++
 struct-layout-1_x2.h       |   14 
 struct-layout-1_y1.h       |   76 ++
 struct-layout-1_y2.h       |   69 ++
 7 files changed, 2063 insertions(+)

--- NEW FILE gcc4-g++-struct-layout.patch ---
2005-04-05  Jakub Jelinek  <jakub at redhat.com>

	* g++.dg/compat/struct-layout-1.exp: New file.
	* g++.dg/compat/struct-layout-1.h: New.
	* g++.dg/compat/struct-layout-1_generate.c: New.
	* g++.dg/compat/struct-layout-1_x1.h: New.
	* g++.dg/compat/struct-layout-1_x2.h: New.
	* g++.dg/compat/struct-layout-1_y1.h: New.
	* g++.dg/compat/struct-layout-1_y2.h: New.

--- gcc/testsuite/g++.dg/compat/struct-layout-1_y1.h.jj	2005-04-05 16:46:13.000000000 +0200
+++ gcc/testsuite/g++.dg/compat/struct-layout-1_y1.h	2004-07-21 16:28:22.000000000 +0200
@@ -0,0 +1,76 @@
+#include "struct-layout-1.h"
+
+#define F(n, x, v, w) 						\
+  if (info.flds[i] != &s##n.x)					\
+    FAIL (n, 50);						\
+  if (info.sizes[i] != sizeof (s##n.x))				\
+    FAIL (n, 51);						\
+  if (info.aligns[i] != __alignof__ (s##n.x))			\
+    FAIL (n, 52);						\
+  if (s##n.x != (__typeof__ (s##n.x)) v)			\
+    FAIL (n, 53);						\
+  if (a##n[2].x != (__typeof__ (s##n.x)) w)			\
+    FAIL (n, 54);						\
+  if (arg0.x != s##n.x)						\
+    FAIL (n, 55);						\
+  if (arg2.x != a##n[2].x)					\
+    FAIL (n, 56);						\
+  ret.x = s##n.x;						\
+  ++i;
+#define N(n, x) 						\
+  if (info.flds[i] != &s##n.x)					\
+    FAIL (n, 50);						\
+  if (info.sizes[i] != sizeof (s##n.x))				\
+    FAIL (n, 51);						\
+  if (info.aligns[i] != __alignof__ (s##n.x))			\
+    FAIL (n, 52);						\
+  ++i;
+#define B(n, x, v, w) 						\
+  b1.x = v; b2.x = w;						\
+  if (s##n.x != b1.x)						\
+    FAIL (n, 53);						\
+  if (a##n[2].x != b2.x)					\
+    FAIL (n, 54);						\
+  if (arg0.x != s##n.x)						\
+    FAIL (n, 55);						\
+  if (arg2.x != a##n[2].x)					\
+    FAIL (n, 56);						\
+  ret.x = s##n.x;						\
+  ++j;
+#define TX(n, type, attrs, fields, ops) 			\
+type S##n { fields } attrs;					\
+extern type S##n s##n;						\
+type S##n a##n[5];						\
+type S##n							\
+check##n (type S##n arg0, type S##n *arg1, type S##n arg2)	\
+{								\
+  type S##n ret;						\
+  type S##n b1, b2;						\
+  int i, j;							\
+								\
+  memset (&ret, 0, sizeof (ret));				\
+  memset (&b1, 0, sizeof (b1));					\
+  memset (&b2, 0, sizeof (b2));					\
+  if (info.sp != &s##n)						\
+    FAIL (n, 10);						\
+  if (info.a0p != &a##n[0])					\
+    FAIL (n, 11);						\
+  if (info.a3p != &a##n[3])					\
+    FAIL (n, 12);						\
+  if (info.sz != sizeof (s##n))					\
+    FAIL (n, 13);						\
+  if (info.als != __alignof__ (s##n))				\
+    FAIL (n, 14);						\
+  if (info.ala0 != __alignof__ (a##n[0]))			\
+    FAIL (n, 15);						\
+  if (info.ala3 != __alignof__ (a##n[3]))			\
+    FAIL (n, 16);						\
+  if (arg1 != &a##n[1])						\
+    FAIL (n, 17);						\
+  i = 0; j = 0;							\
+  ops								\
+  if (i != info.nfields || j != info.nbitfields)		\
+    FAIL (n, 18);						\
+								\
+  return ret;							\
+}
--- gcc/testsuite/g++.dg/compat/struct-layout-1.h.jj	2005-04-05 16:43:30.000000000 +0200
+++ gcc/testsuite/g++.dg/compat/struct-layout-1.h	2005-04-05 18:41:57.000000000 +0200
@@ -0,0 +1,342 @@
+#include <limits.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "../../gcc.dg/compat/compat-common.h"
+
+#ifndef SKIP_ATTRIBUTE
+# include "../../gcc.dg/compat/vector-defs.h"
+#else
+typedef int qi;
+typedef int hi;
+typedef int si;
+typedef int di;
+typedef float sf;
+typedef float df;
+typedef int v8qi;
+typedef int v16qi;
+typedef int v2hi;
+typedef int v4hi;
+typedef int v8hi;
+typedef int v2si;
+typedef int v4si;
+typedef int v1di;
+typedef int v2di;
+typedef int v2sf;
+typedef int v4sf;
+typedef int v16sf;
+typedef int v2df;
+typedef int u8qi;
+typedef int u16qi;
+typedef int u2hi;
+typedef int u4hi;
+typedef int u8hi;
+typedef int u2si;
+typedef int u4si;
+typedef int u1di;
+typedef int u2di;
+typedef int u2sf;
+typedef int u4sf;
+typedef int u16sf;
+typedef int u2df;
+#endif
+#if (defined __i386__ || defined __x86_64__) && !defined SKIP_ATTRIBUTE
+# ifdef __MMX__
+#  include <mmintrin.h>
+# else
+typedef int __m64;
+# endif
+# ifdef __SSE__
+#  include <xmmintrin.h>
+# else
+typedef int __m128;
+# endif
+#else
+typedef int __m64;
+typedef int __m128;
+#endif
+
+#define FLDS_MAX	32
+extern struct Info
+{
+  int nfields, nbitfields;
+  void *sp, *a0p, *a3p;
+  void *flds[FLDS_MAX];
+  size_t sz, sizes[FLDS_MAX];
+  size_t als, ala0, ala3, aligns[FLDS_MAX];
+} info;
+
+extern int intarray[256];
+extern int fn0 (void), fn1 (void), fn2 (void), fn3 (void), fn4 (void);
+extern int fn5 (void), fn6 (void), fn7 (void), fn8 (void), fn9 (void);
+
+#ifdef DBG
+#define FAIL(n, m) printf ("fail %d.%d\n", n, m), ++fails
+#else
+#define FAIL(n, m) ++fails
+#endif
+
+#ifdef SKIP_ATTRIBUTE
+# define __attribute__(x)
+#endif
+#define atal		__attribute__((aligned))
+#define atpa		__attribute__((packed))
+#define atalpa		__attribute__((aligned, packed))
+#define atpaal		__attribute__((packed, aligned))
+#define atal1		__attribute__((aligned (1)))
+#define atal2		__attribute__((aligned (2)))
+#define atal4		__attribute__((aligned (4)))
+#define atal8		__attribute__((aligned (8)))
+#define atal16		__attribute__((aligned (16)))
+#define atal1pa		__attribute__((aligned (1), packed))
+#define atal2pa		__attribute__((aligned (2), packed))
+#define atal4pa		__attribute__((aligned (4), packed))
+#define atal8pa		__attribute__((aligned (8), packed))
+#define atal16pa	__attribute__((aligned (16), packed))
+#define atpaal1		__attribute__((packed, aligned (1)))
+#define atpaal2		__attribute__((packed, aligned (2)))
+#define atpaal4		__attribute__((packed, aligned (4)))
+#define atpaal8		__attribute__((packed, aligned (8)))
+#define atpaal16	__attribute__((packed, aligned (16)))
+
+#define atQI		__attribute__((mode (QI)))
+#define atHI		__attribute__((mode (HI)))
+#define atSI		__attribute__((mode (SI)))
+#define atDI		__attribute__((mode (DI)))
[...1695 lines suppressed...]
+{ "aligned packed vector [0] :0",
+  FEATURE_VECTOR | FEATURE_ZEROARRAY
+  | FEATURE_ALIGNEDPACKED | FEATURE_ZEROBITFLD },
+};
+
+int
+main (int argc, char **argv)
+{
+  int i, j, count, c, n = 3000;
+
+  if (sizeof (int) != 4 || sizeof (long long) != 8)
+    return 1;
+
+  while ((c = getopt (argc, argv, "d:i:n:s:")) != -1)
+    switch (c)
+      {
+      case 'n':
+	n = atoi (optarg);
+	break;
+      case 'd':
+	destdir = optarg;
+	break;
+      case 's':
+	srcdir = optarg;
+	break;
+      case 'i':
+	output_one = 1;
+	limidx = atoi (optarg);
+	break;
+      default:
+	goto usage;
+      }
+
+  if (output_one)
+    {
+      outfile = fopen ("/dev/null", "w");
+      if (outfile == NULL)
+	{
+	  fputs ("could not open /dev/null", stderr);
+	  return 1;
+	}
+      n = limidx + 1;
+    }
+
+  if (destdir == NULL && !output_one)
+    {
+    usage:
+      fprintf (stderr, "Usage:\n\
+%s [-s srcdir -d destdir] [-n count] [-i idx]\n\
+Either -s srcdir -d destdir or -i idx must be used\n", argv[0]);
+      return 1;
+    }
+
+  if (srcdir == NULL && !output_one)
+    goto usage;
+
+  hasht = htab_create (40000, e_hash, e_eq, NULL);
+  for (i = 0; i < NTYPES2; ++i)
+    if (base_types[i].bitfld)
+      bitfld_types[n_bitfld_types++] = base_types[i];
+  for (i = 0; i < NATYPES2; ++i)
+    if (attrib_types[i].bitfld)
+      aligned_bitfld_types[n_aligned_bitfld_types++] = attrib_types[i];
+  for (i = 0; i < sizeof (features) / sizeof (features[0]); ++i)
+    {
+      int startidx = idx;
+      if (! output_one)
+	limidx = idx;
+      if (!i)
+	count = 200;
+      else
+	count = 20;
+      for (j = 1; j <= 9; ++j)
+	while (idx < startidx + j * count)
+	  generate_random_tests (features[i].f, j);
+      while (idx < startidx + count * 10)
+	generate_random_tests (features[i].f, 10 + (generate_random () % 16));
+    }
+  for (i = 0; n > 3000 && i < sizeof (features) / sizeof (features[0]); ++i)
+    {
+      int startidx;
+      startidx = idx;
+      if (! output_one)
+	limidx = idx;
+      singles (features[i].f);
+      if (!i)
+	{
+	  count = 1000;
+	  while (idx < startidx + 1000)
+	    generate_random_tests (features[i].f, 1);
+	}
+      else
+	{
+	  startidx = idx;
+	  count = 100;
+	  while (idx < startidx + 100)
+	    generate_random_tests (features[i].f, 1);
+	}
+      startidx = idx;
+      for (j = 2; j <= 9; ++j)
+	while (idx < startidx + (j - 1) * count)
+	  generate_random_tests (features[i].f, j);
+      while (idx < startidx + count * 9)
+	generate_random_tests (features[i].f, 10 + (generate_random () % 16));
+    }
+  if (! output_one)
+    limidx = idx;
+  while (idx < n)
+    generate_random_tests (ALL_FEATURES, 1 + (generate_random () % 25));
+  fclose (outfile);
+  return 0;
+}
--- gcc/testsuite/g++.dg/compat/struct-layout-1_x2.h.jj	2005-04-05 16:46:05.000000000 +0200
+++ gcc/testsuite/g++.dg/compat/struct-layout-1_x2.h	2004-07-13 18:53:18.000000000 +0200
@@ -0,0 +1,14 @@
+#undef F
+#undef N
+#undef B
+#undef TX
+#define F(n, x, v, w) 						\
+  if (arg.x != s##n.x) FAIL (n, 30);
+#define N(n, x)
+#define B(n, x, v, w)						\
+  if (arg.x != s##n.x) FAIL (n, 30);
+#define TX(n, type, attrs, fields, ops) 			\
+void checkx##n (type S##n arg)					\
+{								\
+  ops								\
+}
--- gcc/testsuite/g++.dg/compat/struct-layout-1_x1.h.jj	2005-04-05 16:46:03.000000000 +0200
+++ gcc/testsuite/g++.dg/compat/struct-layout-1_x1.h	2004-10-16 09:02:45.000000000 +0200
@@ -0,0 +1,68 @@
+#include "struct-layout-1.h"
+
+struct Info info;
+int fails;
+int intarray[256];
+int fn0 (void) { return 0; }
+int fn1 (void) { return 1; }
+int fn2 (void) { return 2; }
+int fn3 (void) { return 3; }
+int fn4 (void) { return 4; }
+int fn5 (void) { return 5; }
+int fn6 (void) { return 6; }
+int fn7 (void) { return 7; }
+int fn8 (void) { return 8; }
+int fn9 (void) { return 9; }
+
+/* This macro is intended for fields where their
+   addresses/sizes/alignments and value passing should be checked.  */
+#define F(n, x, v, w) 						\
+  info.flds[i] = &s##n.x;					\
+  info.sizes[i] = sizeof (s##n.x);				\
+  info.aligns[i] = __alignof__ (s##n.x);			\
+  s##n.x = v;							\
+  a##n[2].x = w;						\
+  ++i;
+/* This macro is for fields where just their addresses/sizes/alignments
+   should be checked.  */
+#define N(n, x) 						\
+  info.flds[i] = &s##n.x;					\
+  info.sizes[i] = sizeof (s##n.x);				\
+  info.aligns[i] = __alignof__ (s##n.x);			\
+  ++i;
+/* This macro is for fields where just value passing should be checked.  */
+#define B(n, x, v, w)						\
+  s##n.x = v;							\
+  a##n[2].x = w;						\
+  ++j;
+#define TX(n, type, attrs, fields, ops) 			\
+type S##n { fields } attrs;					\
+type S##n s##n;							\
+extern type S##n a##n[5];					\
+extern type S##n check##n (type S##n, type S##n *,		\
+			     type S##n);			\
+extern void check##n##va (int i, ...);				\
+extern void checkx##n (type S##n);				\
+void test##n (void)						\
+{								\
+  int i, j;							\
+  memset (&s##n, '\0', sizeof (s##n));				\
+  memset (a##n, '\0', sizeof (a##n));				\
+  memset (&info, '\0', sizeof (info));				\
+  info.sp = &s##n;						\
+  info.a0p = &a##n[0];						\
+  info.a3p = &a##n[3];						\
+  info.sz = sizeof (s##n);					\
+  info.als = __alignof__ (s##n);				\
+  info.ala0 = __alignof__ (a##n[0]);				\
+  info.ala3 = __alignof__ (a##n[3]);				\
+  if (((long) &a##n[3]) & (info.als - 1))			\
+    FAIL (n, 1);						\
+  i = 0; j = 0;							\
+  ops								\
+  info.nfields = i;						\
+  info.nbitfields = j;						\
+  checkx##n (check##n (s##n, &a##n[1], a##n[2]));		\
+  check##n##va (1, 1.0, s##n, 2LL, a##n[2], a##n[2]);		\
+  check##n##va (2, s##n, s##n, 2.0L, a##n[2], s##n);		\
+}

gcc4-pr16104-test.patch:
 gcc.c-torture/execute/20050316-2.c |   49 ++++++++++++++++++++
 gcc.c-torture/execute/20050316-3.c |   36 +++++++++++++++
 gcc.dg/torture/pr16104-1.c         |   88 +++++++++++++++++++++++++++++++++++++
 3 files changed, 173 insertions(+)

--- NEW FILE gcc4-pr16104-test.patch ---
2005-04-06  Jakub Jelinek  <jakub at redhat.com>

	* gcc.c-torture/execute/20050316-2.c: New test.
	* gcc.c-torture/execute/20050316-3.c: New test.
	* gcc.dg/torture/pr16104-1.c: New test.

--- gcc/testsuite/gcc.c-torture/execute/20050316-2.c.jj	2005-03-16 10:49:04.602767006 +0100
+++ gcc/testsuite/gcc.c-torture/execute/20050316-2.c	2005-03-16 10:46:39.000000000 +0100
@@ -0,0 +1,49 @@
+extern void abort (void);
+
+typedef int V2SI __attribute__ ((vector_size (8)));
+typedef unsigned int V2USI __attribute__ ((vector_size (8)));
+typedef float V2SF __attribute__ ((vector_size (8)));
+typedef short V2HI __attribute__ ((vector_size (4)));
+typedef unsigned int V2UHI __attribute__ ((vector_size (4)));
+
+long long
+test1 (V2SF x)
+{
+  return (long long) (V2SI) x;
+}
+
+long long
+test2 (V2SF x)
+{
+  return (long long) x;
+}
+
+long long
+test3 (V2SI x)
+{
+  return (long long) (V2SF) x;
+}
+
+int
+main (void)
+{
+  if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8)
+    return 0;
+
+  V2SF x = { 2.0, 2.0 };
+  union { long long l; float f[2]; int i[2]; } u;
+  u.l = test1 (x);
+  if (u.f[0] != 2.0 || u.f[1] != 2.0)
+    abort ();
+
+  V2SF y = { 6.0, 6.0 };
+  u.l = test2 (y);
+  if (u.f[0] != 6.0 || u.f[1] != 6.0)
+    abort ();
+
+  V2SI z = { 4, 4 };
+  u.l = test3 (z);
+  if (u.i[0] != 4 || u.i[1] != 4)
+    abort ();
+  return 0;
+}
--- gcc/testsuite/gcc.c-torture/execute/20050316-3.c.jj	2005-03-16 10:49:19.461121066 +0100
+++ gcc/testsuite/gcc.c-torture/execute/20050316-3.c	2005-03-16 10:30:06.000000000 +0100
@@ -0,0 +1,36 @@
+extern void abort (void);
+
+typedef int V2SI __attribute__ ((vector_size (8)));
+typedef unsigned int V2USI __attribute__ ((vector_size (8)));
+typedef short V2HI __attribute__ ((vector_size (4)));
+typedef unsigned int V2UHI __attribute__ ((vector_size (4)));
+
+V2USI
+test1 (V2SI x)
+{
+  return (V2USI) (V2SI) (long long) x;
+}
+
+long long
+test2 (V2SI x)
+{
+  return (long long) (V2USI) (V2SI) (long long) x;
+}
+
+int
+main (void)
+{
+  if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8)
+    return 0;
+
+  union { V2SI x; int y[2]; V2USI z; long long l; } u;
+  V2SI a = { -3, -3 };
+  u.z = test1 (a);
+  if (u.y[0] != -3 || u.y[1] != -3)
+    abort ();
+
+  u.l = test2 (a);
+  if (u.y[0] != -3 || u.y[1] != -3)
+    abort ();
+  return 0;
+}
--- gcc/testsuite/gcc.dg/torture/pr16104-1.c.jj	2005-03-16 10:55:22.351496535 +0100
+++ gcc/testsuite/gcc.dg/torture/pr16104-1.c	2005-03-16 10:55:13.746029061 +0100
@@ -0,0 +1,88 @@
+/* PR rtl-optimization/16104 */
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-msse2" } */
+
+#include "../i386-cpuid.h"
+
+extern void abort (void);
+
+typedef int V2SI __attribute__ ((vector_size (8)));
+typedef unsigned int V2USI __attribute__ ((vector_size (8)));
+typedef short V2HI __attribute__ ((vector_size (4)));
+typedef unsigned int V2UHI __attribute__ ((vector_size (4)));
+
+int
+test1 (void)
+{
+  return (long long) (V2SI) 0LL;
+}
+
+int
+test2 (V2SI x)
+{
+  return (long long) x;
+}
+
+V2SI
+test3 (void)
+{
+  return (V2SI) (long long) (int) (V2HI) 0;
+}
+
+V2SI
+test4 (V2HI x)
+{
+  return (V2SI) (long long) (int) x;
+}
+
+V2SI
+test5 (V2USI x)
+{
+  return (V2SI) x;
+}
+
+int
+__attribute__ ((noinline))
+do_test (void)
+{
+  if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8)
+    return 0;
+
+  if (test1 () != 0)
+    abort ();
+
+  V2SI x = { 2, 2 };
+  if (test2 (x) != 2)
+    abort ();
+
+  union { V2SI x; int y[2]; V2USI z; long long l; } u;
+  u.x = test3 ();
+  if (u.y[0] != 0 || u.y[1] != 0)
+    abort ();
+
+  V2HI y = { 4, 4 };
+  union { V2SI x; long long y; } v;
+  v.x = test4 (y);
+  if (v.y != 0x40004)
+    abort ();
+
+  V2USI z = { 6, 6 };
+  u.x = test5 (z);
+  if (u.y[0] != 6 || u.y[1] != 6)
+    abort ();
+  return 0;
+}
+
+int
+main (void)
+{
+  unsigned long cpu_facilities;
+
+  cpu_facilities = i386_cpuid ();
+
+  if ((cpu_facilities & (bit_MMX | bit_SSE | bit_CMOV | bit_SSE2))
+      != (bit_MMX | bit_SSE | bit_CMOV | bit_SSE2))
+    return 0;
+
+  return do_test ();
+}


Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/gcc4/FC-3/.cvsignore,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- .cvsignore	15 Mar 2005 21:14:21 -0000	1.8
+++ .cvsignore	6 Apr 2005 08:51:53 -0000	1.9
@@ -1 +1 @@
-gcc-4.0.0-20050315.tar.bz2
+gcc-4.0.0-20050406.tar.bz2

gcc4-c++-pr19317.patch:
 pr19317-1.C |   39 +++++++++++++++++++++++++++++++++++++++
 pr19317-2.C |   32 ++++++++++++++++++++++++++++++++
 pr19317-3.C |   37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 108 insertions(+)

Index: gcc4-c++-pr19317.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc4/FC-3/gcc4-c++-pr19317.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc4-c++-pr19317.patch	15 Mar 2005 21:14:21 -0000	1.1
+++ gcc4-c++-pr19317.patch	6 Apr 2005 08:51:53 -0000	1.2
@@ -1,47 +1,10 @@
-2005-03-03  Jakub Jelinek  <jakub at redhat.com>
+2005-04-06  Jakub Jelinek  <jakub at redhat.com>
 
 	PR c++/19317
-	Revert
-	2004-12-23  Mark Mitchell  <mark at codesourcery.com>
-	PR c++/16405
-	* gimplify.c (gimplify_modify_expr_rhs): Handle
-	INDIRECT_REF/ADDR_EXPR combinations.
-
 	* g++.dg/opt/pr19317-1.C: New test.
 	* g++.dg/opt/pr19317-2.C: New test.
 	* g++.dg/opt/pr19317-3.C: New test.
 
---- gcc/gimplify.c.jj	2005-02-19 00:27:50.000000000 +0100
-+++ gcc/gimplify.c	2005-03-03 12:50:52.198658090 +0100
-@@ -2841,28 +2841,6 @@ gimplify_modify_expr_rhs (tree *expr_p, 
-   while (ret != GS_UNHANDLED)
-     switch (TREE_CODE (*from_p))
-       {
--      case INDIRECT_REF:
--	{
--	  /* If we have code like 
--
--	        *(const A*)(A*)&x
--
--	     where the type of "x" is a (possibly cv-qualified variant
--	     of "A"), treat the entire expression as identical to "x".
--	     This kind of code arises in C++ when an object is bound
--	     to a const reference, and if "x" is a TARGET_EXPR we want
--	     to take advantage of the optimization below.  */
--	  tree t = fold_indirect_ref (*from_p);
--	  if (t != *from_p)
--	    {
--	      *from_p = t;
--	      ret = GS_OK;
--	    }
--	  else
--	    ret = GS_UNHANDLED;
--	  break;
--	}
--
-       case TARGET_EXPR:
- 	{
- 	  /* If we are initializing something from a TARGET_EXPR, strip the
 --- gcc/testsuite/g++.dg/opt/pr19317-3.C.jj	2005-03-03 13:19:28.896076462 +0100
 +++ gcc/testsuite/g++.dg/opt/pr19317-3.C	2005-03-03 13:20:55.051743569 +0100
 @@ -0,0 +1,37 @@

gcc4-pr20249.patch:
 20050330-2.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+)

Index: gcc4-pr20249.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc4/FC-3/gcc4-pr20249.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc4-pr20249.patch	15 Mar 2005 21:14:21 -0000	1.1
+++ gcc4-pr20249.patch	6 Apr 2005 08:51:53 -0000	1.2
@@ -1,65 +1,9 @@
-2005-03-07  Zdenek Dvorak  <dvorakz at suse.cz>
+2005-03-30  Jakub Jelinek  <jakub at redhat.com>
 
-	PR middle-end/20249
-	* cse.c (insert_regs): Do not record equivalence of registers in
-	different modes.
+	* gcc.dg/20050330-2.c: New test.
 
-2005-03-11  Jakub Jelinek  <jakub at redhat.com>
-
-	* gcc.dg/pr20249-1.c: New test.
-	* gcc.dg/pr20249-2.c: New test.
-
---- gcc/cse.c.jj	2005-02-27 17:54:15.000000000 +0100
-+++ gcc/cse.c	2005-03-11 14:09:06.652737988 +0100
-@@ -1234,7 +1234,24 @@ insert_regs (rtx x, struct table_elt *cl
- 	      if (REG_P (classp->exp)
- 		  && GET_MODE (classp->exp) == GET_MODE (x))
- 		{
--		  make_regs_eqv (regno, REGNO (classp->exp));
-+		  unsigned c_regno = REGNO (classp->exp);
-+
-+		  gcc_assert (REGNO_QTY_VALID_P (c_regno));
-+
-+		  /* Suppose that 5 is hard reg and 100 and 101 are
-+		     pseudos.  Consider
-+
-+		     (set (reg:si 100) (reg:si 5))
-+		     (set (reg:si 5) (reg:si 100))
-+		     (set (reg:di 101) (reg:di 5))
-+
-+		     We would now set REG_QTY (101) = REG_QTY (5), but the
-+		     entry for 5 is in SImode.  When we use this later in
-+		     copy propagation, we get the register in wrong mode.  */
-+		  if (qty_table[REG_QTY (c_regno)].mode != GET_MODE (x))
-+		    continue;
-+
-+		  make_regs_eqv (regno, c_regno);
- 		  return 1;
- 		}
- 
---- gcc/testsuite/gcc.dg/pr20249-1.c	2005-03-07 15:39:16.570545056 +0100
-+++ gcc/testsuite/gcc.dg/pr20249-1.c	2005-03-11 14:13:18.589822269 +0100
-@@ -0,0 +1,18 @@
-+/* PR middle-end/20249 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fprofile-arcs" } */
-+
-+extern int *g (int x, void* y);
-+extern void fg (long long x, int y);
-+
-+static void
-+ff (int y, long long z)
-+{
-+  fg (z, 1);
-+}
-+  
-+void
-+f (void)
-+{
-+  g (42, ff);
-+}
---- gcc/testsuite/gcc.dg/pr20249-2.c	2005-03-07 15:39:16.570545056 +0100
-+++ gcc/testsuite/gcc.dg/pr20249-2.c	2005-03-11 14:14:09.187804704 +0100
+--- gcc/testsuite/gcc.dg/20050330-2.c	2005-03-07 15:39:16.570545056 +0100
++++ gcc/testsuite/gcc.dg/20050330-2.c	2005-03-11 14:14:09.187804704 +0100
 @@ -0,0 +1,21 @@
 +/* { dg-do compile } */
 +/* { dg-options "-O2 -fprofile-generate" } */


Index: gcc4a.spec
===================================================================
RCS file: /cvs/dist/rpms/gcc4/FC-3/gcc4a.spec,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- gcc4a.spec	15 Mar 2005 21:14:21 -0000	1.14
+++ gcc4a.spec	6 Apr 2005 08:51:53 -0000	1.15
@@ -1,6 +1,6 @@
-%define DATE 20050315
+%define DATE 20050406
 %define gcc_version 4.0.0
-%define gcc_release 0.34.fc3
+%define gcc_release 0.41.fc3
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %define gxx_primary_version 3.4.3
@@ -56,16 +56,14 @@
 Patch2: gcc4-ppc64-m32-m64-multilib-only.patch
 Patch3: gcc4-ia64-libunwind.patch
 Patch4: gcc4-gnuc-rh-release.patch
-Patch5: gcc4-pr16104.patch
-Patch6: gcc4-pr19769-workaround.patch
-Patch7: gcc4-java-nomulti.patch
-Patch8: gcc4-libjawt.patch
-Patch9: gcc4-c++-pr19317.patch
-Patch10: gcc4-rh150150.patch
-Patch11: gcc4-pr20126.patch
-Patch12: gcc4-pr20249.patch
-Patch13: gcc4-c++-pr20381.patch
-Patch14: gcc4-ada-makej.patch
+Patch5: gcc4-java-nomulti.patch
+Patch6: gcc4-c++-pr19317.patch
+Patch7: gcc4-pr20126.patch
+Patch8: gcc4-pr20249.patch
+Patch9: gcc4-g++-struct-layout.patch
+Patch10: gcc4-pr16104-test.patch
+
+Patch50: gcc4-c++-pr10606-revert.patch
 
 %define _gnu %{nil}
 %ifarch sparc
@@ -100,6 +98,7 @@
 Group: Development/Languages
 Requires: gcc4 = %{version}-%{release}
 Requires: libgfortran = %{version}-%{release}
+BuildRequires: gmp-devel >= 4.1.2-8
 Prereq: /sbin/install-info
 Autoreq: true
 Obsoletes: gcc35-gfortran
@@ -146,16 +145,14 @@
 %patch2 -p0 -b .ppc64-m32-m64-multilib-only~
 %patch3 -p0 -b .ia64-libunwind~
 %patch4 -p0 -b .gnuc-rh-release~
-%patch5 -p0 -b .pr16104~
-%patch6 -p0 -b .pr19769-workaround~
-%patch7 -p0 -b .java-nomulti~
-%patch8 -p0 -b .libjawt~
-%patch9 -p0 -b .c++-pr19317~
-%patch10 -p0 -b .rh150150~
-%patch11 -p0 -b .pr20126~
-%patch12 -p0 -b .pr20249~
-%patch13 -p0 -b .c++-pr20381~
-%patch14 -p0 -b .ada-makej~
+%patch5 -p0 -b .java-nomulti~
+%patch6 -p0 -b .c++-pr19317~
+%patch7 -p0 -b .pr20126~
+%patch8 -p0 -b .pr20249~
+%patch9 -p0 -b .g++-struct-layout~
+%patch10 -p0 -b .pr16104-test~
+
+%patch50 -p0 -b .c++-pr10606-revert~
 
 perl -pi -e 's/4\.0\.0/4.0.0/' gcc/version.c
 perl -pi -e 's/"%{gcc_version}"/"%{gcc_version} \(release\)"/' gcc/version.c
@@ -279,6 +276,11 @@
 # Copy various doc files here and there
 cd ..
 mkdir -p rpm.doc/gfortran
+mkdir -p rpm.doc/changelogs/{gcc/cp,libmudflap}
+
+for i in {gcc,gcc/cp,libmudflap}/ChangeLog*; do
+	cp -p $i rpm.doc/changelogs/$i
+done
 
 (cd gcc/fortran; for i in ChangeLog* CONTRIB NEWS README TODO; do
 	cp -p $i ../../rpm.doc/gfortran/$i.f
@@ -286,15 +288,9 @@
 (cd libgfortran; for i in ChangeLog*; do
 	cp -p $i ../rpm.doc/gfortran/$i.libgfortran
 done)
-(cd boehm-gc; for i in ChangeLog*; do
-	cp -p $i ../rpm.doc/boehm-gc/$i.gc
-done)
-(cd fastjar; for i in ChangeLog* README*; do
-	cp -p $i ../rpm.doc/fastjar/$i.fastjar
-done)
-(cd libffi; for i in ChangeLog* README* LICENSE; do
-	cp -p $i ../rpm.doc/libffi/$i.libffi
-done)
+
+rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9]
+find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9
 
 %install
 rm -fr $RPM_BUILD_ROOT
@@ -479,7 +475,7 @@
 	    exit 1;;
   esac
 done
-exec %{_prefix}/bin/gcc $fl ${1+"$@"}
+exec gcc $fl ${1+"$@"}
 EOF
 cat > $RPM_BUILD_ROOT%{_prefix}/bin/c99 <<"EOF"
 #!/bin/sh
@@ -491,7 +487,7 @@
 	    exit 1;;
   esac
 done
-exec %{_prefix}/bin/gcc $fl ${1+"$@"}
+exec gcc $fl ${1+"$@"}
 EOF
 chmod 755 $RPM_BUILD_ROOT%{_prefix}/bin/c?9
 
@@ -613,7 +609,7 @@
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_s.so
 %endif
 #%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/specs
-%doc gcc/README* gcc/*ChangeLog* gcc/COPYING gcc/COPYING.LIB
+%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog* gcc/COPYING gcc/COPYING.LIB
 
 %files c++
 %defattr(-,root,root)
@@ -641,7 +637,7 @@
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a
-%doc gcc/cp/ChangeLog*
+%doc rpm.doc/changelogs/gcc/cp/ChangeLog*
 
 %files gfortran
 %defattr(-,root,root)
@@ -706,9 +702,51 @@
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.so
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.so
 %endif
-%doc libmudflap/ChangeLog*
+%doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Wed Apr  6 2005 Jakub Jelinek  <jakub at redhat.com> 4.0.0-0.41.fc3
+- update from CVS
+  - PRs c++/19312, c++/20734, libgcj/20750, middle-end/19225, target/20342,
+	target/20421, target/20447, target/20625, target/20670, ada/19956,
+	c++/18644, c++/19159, c++/19199, c++/20679, debug/20505,
+	libfortran/20068, libfortran/20125, libfortran/20156,
+	libfortran/20471, libfortran/20755, libgcj/20727, libgcj/20761,
+	rtl-optimization/16104, rtl-optimization/20527, target/19537,
+	target/20446, tree-optimization/19903, c++/19406, c/17855, c/17913,
+	c/20368, c/20519, c/772, debug/19345, libfortran/20660, libgcj/20090,
+	libgcj/20526, middle-end/19454, middle-end/20177, middle-end/20635,
+	rtl-optimization/20600, target/20203, target/20611,
+	libfortran/15332, libfortran/19678, libfortran/19679,
+	libfortran/20163, middle-end/20263, middle-end/20491,
+	rtl-optimization/20249, target/15491, target/20617, tree-opt/19108,
+	tree-optimization/19108, middle-end/20622, c++/19769, c++/19980,
+	c++/20147, c++/20147, c++/20461, c++/20463, c++/20465, c++/20499,
+	c++/20536, libfortran/18025, libgcj/11085, libgcj/14892, libgcj/18083,
+	libgcj/2641, libgcj/9854, libstdc++/20352, libstdc++/20577,
+	middle-end/20539, middle-end/20557, other/20564, target/20166,
+	target/20561, rtl-optimization/20532, ada/18727, ada/19140, ada/19408,
+	ada/19900, ada/20255, ada/20344, c++/20240, c++/20333, fortran/18525,
+	fortran/18827, java/20522, libfortran/20257, libfortran/20480,
+	libgcj/20251, middle-end/15700, middle-end/20225, middle-end/20493,
+	target/18251, target/18380, target/18551, tree-optimization/17454,
+	tree-optimization/20474, preprocessor/19475, tree-optimization/20076
+  - fixed ABI bug where __attribute was ignored on certain struct
+    fields (Mark Mitchell, PR c++/20763)
+  - fix edge redirection (Alexandre Oliva, #152149,
+    PR tree-optimization/20640)
+  - fix PRE causing miscompilation of sudo (Daniel Berlin, #151632,
+    PR tree-optimization/20601)
+  - fix loop optimizer with loops that after tree optimization are entered
+    after the loop body (Alexandre Oliva, PR rtl-optimization/20290, #150020)
+  - fix handling of jump tables at the end of scope with -g1 (#151466)
+- add g++.dg/compat/struct-layout-1.exp compatibility tests
+- remove very old ChangeLogs from %%doc, bzip2 all ChangeLogs to
+  save space
+- BuildRequire gmp-devel with mpfr support
+- revert (just for gcc4-4*, not gcc-4*) PR libstdc++10606 patch, so that
+  GCC 3.4.3-RH libstdc++ can be used (#151462)
+
 * Tue Mar 15 2005 Jakub Jelinek  <jakub at redhat.com> 4.0.0-0.34.fc3
 - update from gcc-4_0-branch
   - PRs c++/20157, c++/20280, fortran/16907, fortran/20323, fortran/20361,


Index: sources
===================================================================
RCS file: /cvs/dist/rpms/gcc4/FC-3/sources,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- sources	15 Mar 2005 21:14:21 -0000	1.9
+++ sources	6 Apr 2005 08:51:53 -0000	1.10
@@ -1 +1 @@
-60ef6c1253ff90cfb165ec69bac0c178  gcc-4.0.0-20050315.tar.bz2
+6b205368b124568380925d4c22a8cb01  gcc-4.0.0-20050406.tar.bz2


--- gcc4-ada-makej.patch DELETED ---


--- gcc4-c++-pr20381.patch DELETED ---


--- gcc4-libjawt.patch DELETED ---


--- gcc4-pr16104.patch DELETED ---


--- gcc4-pr19769-workaround.patch DELETED ---


--- gcc4-rh150150.patch DELETED ---




More information about the fedora-cvs-commits mailing list