rpms/gcc/devel gcc4-pr20961.patch, NONE, 1.1 gcc4-pr21085.patch, NONE, 1.1 gcc4-pr21329.patch, NONE, 1.1 gcc4-fortran-pr15080.patch, 1.1, 1.2 gcc4-java-awt-thread-init.patch, 1.1, 1.2 gcc4.spec, 1.34, 1.35 gcc4-chk-pr21265.patch, 1.1, NONE gcc4-pr21239.patch, 1.1, NONE gcc4-pr21265.patch, 1.1, NONE gcc4-pr21297.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Thu May 5 21:10:23 UTC 2005


Author: jakub

Update of /cvs/dist/rpms/gcc/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv28051

Modified Files:
	gcc4-fortran-pr15080.patch gcc4-java-awt-thread-init.patch 
	gcc4.spec 
Added Files:
	gcc4-pr20961.patch gcc4-pr21085.patch gcc4-pr21329.patch 
Removed Files:
	gcc4-chk-pr21265.patch gcc4-pr21239.patch gcc4-pr21265.patch 
	gcc4-pr21297.patch 
Log Message:
4.0.0-4


gcc4-pr20961.patch:
 testsuite/g++.dg/ext/weak3.C |   17 +++++++++++++++++
 varasm.c                     |   16 +++++++++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)

--- NEW FILE gcc4-pr20961.patch ---
2005-05-05  Jakub Jelinek  <jakub at redhat.com>

	PR c++/20961
	* varasm.c (merge_weak): Remove NEWDECL from WEAK_DECLS chain
	if both NEWDECL and OLDDECL are already weak.

	* g++.dg/ext/weak3.C: New test.

--- gcc/varasm.c.jj	2005-04-29 09:18:11.000000000 +0200
+++ gcc/varasm.c	2005-05-05 20:07:37.000000000 +0200
@@ -4303,7 +4303,21 @@ void
 merge_weak (tree newdecl, tree olddecl)
 {
   if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl))
-    return;
+    {
+      if (DECL_WEAK (newdecl) && SUPPORTS_WEAK)
+        {
+          tree *pwd;
+          /* We put the NEWDECL on the weak_decls list at some point
+             and OLDDECL as well.  Keep just OLDDECL on the list.  */
+	  for (pwd = &weak_decls; *pwd; pwd = &TREE_CHAIN (*pwd))
+	    if (TREE_VALUE (*pwd) == newdecl)
+	      {
+	        *pwd = TREE_CHAIN (*pwd);
+		break;
+	      }
+        }
+      return;
+    }
 
   if (DECL_WEAK (newdecl))
     {
--- gcc/testsuite/g++.dg/ext/weak3.C.jj	2005-05-05 20:10:34.000000000 +0200
+++ gcc/testsuite/g++.dg/ext/weak3.C	2005-05-05 20:12:24.000000000 +0200
@@ -0,0 +1,17 @@
+// PR c++/20961
+// Test for #pragma weak and __attribute__((weak)) being used together. 
+// { dg-do compile }
+// { dg-require-weak "" }
+// { dg-options "" }
+
+// { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?_Z3foov" } }
+
+int foo ();
+#pragma weak foo
+
+int
+__attribute__((weak))
+foo ()
+{
+  return 0;
+}

gcc4-pr21085.patch:
 fold-const.c               |    1 +
 testsuite/gcc.dg/pr21085.c |    9 +++++++++
 2 files changed, 10 insertions(+)

--- NEW FILE gcc4-pr21085.patch ---
2005-04-18  James A. Morrison  <phython at gcc.gnu.org>

	PR tree-optimization/21085
	* fold-const (fold_binary): Don't change X % -C to X % C if C has
	overflowed.

	* gcc.dg/pr21085.c: New test.

--- gcc/fold-const.c	18 Apr 2005 15:18:07 -0000	1.563
+++ gcc/fold-const.c	19 Apr 2005 02:35:52 -0000	1.564
@@ -8504,6 +8504,7 @@ fold_binary (enum tree_code code, tree t
       if (code == TRUNC_MOD_EXPR
 	  && !TYPE_UNSIGNED (type)
 	  && TREE_CODE (arg1) == INTEGER_CST
+	  && !TREE_CONSTANT_OVERFLOW (arg1)
 	  && TREE_INT_CST_HIGH (arg1) < 0
 	  && !flag_trapv
 	  /* Avoid this transformation if C is INT_MIN, i.e. C == -C.  */
--- gcc/testsuite/gcc.dg/pr21085.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/pr21085.c	19 Apr 2005 02:36:04 -0000	1.1
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* This used to cause excessive use, or a stack overflow, depending on which
+   came first.  */
+void foo (void)
+{
+  int maxstringlen = 1;
+  int limit = 0, maxblock = 0, maxblockrem = 0;
+  maxblockrem = (maxstringlen) % (2147483647 + 1); /* { dg-warning "overflow" } */
+}

gcc4-pr21329.patch:
 i386.c |   58 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 43 insertions(+), 15 deletions(-)

--- NEW FILE gcc4-pr21329.patch ---
2005-05-05  Denis Vlasenko  <vda at port.imtp.ilyichevsk.odessa.ua>
	    Jakub Jelinek  <jakub at redhat.com>

	PR target/21329
	* config/i386/i386.c (ix86_expand_movmem): Don't use rep; movsb
	for -Os if (movsl;)*(movsw;)?(movsb;)? sequence is shorter.
	Don't use rep; movs{l,q} if the repetition count is really small,
	instead use a sequence of movs{l,q} instructions.

--- gcc/config/i386/i386.c.jj	2005-05-03 18:19:45.000000000 +0200
+++ gcc/config/i386/i386.c	2005-05-05 15:36:58.000000000 +0200
@@ -11285,9 +11285,20 @@ ix86_expand_movmem (rtx dst, rtx src, rt
     src = replace_equiv_address_nv (src, srcreg);
 
   /* When optimizing for size emit simple rep ; movsb instruction for
-     counts not divisible by 4.  */
+     counts not divisible by 4, except when (movsl;)*(movsw;)?(movsb;)?
+     sequence is shorter than mov{b,l} $count, %{ecx,cl}; rep; movsb.
+     Sice of (movsl;)*(movsw;)?(movsb;)? sequence is
+     count / 4 + (count & 3), the other sequence is either 4 or 7 bytes,
+     but we don't know whether upper 24 (resp. 56) bits of %ecx will be
+     known to be zero or not.  The rep; movsb sequence causes higher
+     register preasure though, so take that into account.  */
 
-  if ((!optimize || optimize_size) && (count == 0 || (count & 0x03)))
+  if ((!optimize || optimize_size)
+      && (count == 0
+	  || ((count & 0x03)
+	      && (!optimize_size
+		  || count > 5 * 4
+		  || (count & 3) + count / 4 > 6))))
     {
       emit_insn (gen_cld ());
       countreg = ix86_zero_extend_to_Pmode (count_exp);
@@ -11313,19 +11324,36 @@ ix86_expand_movmem (rtx dst, rtx src, rt
       emit_insn (gen_cld ());
       if (count & ~(size - 1))
 	{
-	  countreg = copy_to_mode_reg (counter_mode,
-				       GEN_INT ((count >> (size == 4 ? 2 : 3))
-						& (TARGET_64BIT ? -1 : 0x3fffffff)));
-	  countreg = ix86_zero_extend_to_Pmode (countreg);
-
-	  destexp = gen_rtx_ASHIFT (Pmode, countreg,
-				    GEN_INT (size == 4 ? 2 : 3));
-	  srcexp = gen_rtx_PLUS (Pmode, destexp, srcreg);
-	  destexp = gen_rtx_PLUS (Pmode, destexp, destreg);
-
-	  emit_insn (gen_rep_mov (destreg, dst, srcreg, src,
-				  countreg, destexp, srcexp));
-	  offset = count & ~(size - 1);
+	  if ((TARGET_SINGLE_STRINGOP || optimize_size) && count < 5 * 4)
+	    {
+	      enum machine_mode movs_mode = size == 4 ? SImode : DImode;
+
+	      while (offset < (count & ~(size - 1)))
+		{
+		  srcmem = adjust_automodify_address_nv (src, movs_mode,
+							 srcreg, offset);
+		  dstmem = adjust_automodify_address_nv (dst, movs_mode,
+							 destreg, offset);
+		  emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
+		  offset += size;
+		}
+	    }
+	  else
+	    {
+	      countreg = GEN_INT ((count >> (size == 4 ? 2 : 3))
+				  & (TARGET_64BIT ? -1 : 0x3fffffff));
+	      countreg = copy_to_mode_reg (counter_mode, countreg);
+	      countreg = ix86_zero_extend_to_Pmode (countreg);
+
+	      destexp = gen_rtx_ASHIFT (Pmode, countreg,
+					GEN_INT (size == 4 ? 2 : 3));
+	      srcexp = gen_rtx_PLUS (Pmode, destexp, srcreg);
+	      destexp = gen_rtx_PLUS (Pmode, destexp, destreg);
+
+	      emit_insn (gen_rep_mov (destreg, dst, srcreg, src,
+				      countreg, destexp, srcexp));
+	      offset = count & ~(size - 1);
+	    }
 	}
       if (size == 8 && (count & 0x04))
 	{

gcc4-fortran-pr15080.patch:
 trans-stmt.c |  111 +++++++++++++++++++++++++++--------------------------------
 1 files changed, 52 insertions(+), 59 deletions(-)

Index: gcc4-fortran-pr15080.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4-fortran-pr15080.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc4-fortran-pr15080.patch	3 May 2005 23:37:28 -0000	1.1
+++ gcc4-fortran-pr15080.patch	5 May 2005 21:10:21 -0000	1.2
@@ -43,7 +43,7 @@
        /* Increment the count1.  */
 -      tmp = fold (build2 (PLUS_EXPR, TREE_TYPE (count1), count1, size));
 +      tmp = fold (build2 (PLUS_EXPR, TREE_TYPE (count1), count1,
-+			   gfc_index_one_node));
++			  gfc_index_one_node));
        gfc_add_modify_expr (&block, count1, tmp);
 +
        tmp = gfc_finish_block (&block);
@@ -153,7 +153,15 @@
        tmp = build3_v (COND_EXPR, wheremaskexpr, tmp, build_empty_stmt ());
      }
  
-@@ -1721,10 +1709,10 @@ generate_loop_for_rhs_to_temp (gfc_expr 
+@@ -1718,13 +1706,18 @@ generate_loop_for_rhs_to_temp (gfc_expr 
+   if (lss == gfc_ss_terminator)
+     {
+       gfc_add_block_to_block (&block, &body1);
++
++      /* Increment count1.  */
++      tmp = fold (build2 (PLUS_EXPR, TREE_TYPE (count1), count1,
++			  gfc_index_one_node));
++      gfc_add_modify_expr (&block, count1, tmp);
      }
    else
      {
@@ -167,7 +175,7 @@
  
        /* Increment count3.  */
        if (count3)
-@@ -1742,11 +1730,8 @@ generate_loop_for_rhs_to_temp (gfc_expr 
+@@ -1742,11 +1735,8 @@ generate_loop_for_rhs_to_temp (gfc_expr 
  
        gfc_cleanup_loop (&loop);
        /* TODO: Reuse lss and rss when copying temp->lhs.  Need to be careful
@@ -180,7 +188,7 @@
  
    tmp = gfc_finish_block (&block);
    return tmp;
-@@ -1824,7 +1809,7 @@ compute_inner_temp_size (gfc_expr *expr1
+@@ -1824,7 +1814,7 @@ compute_inner_temp_size (gfc_expr *expr1
  
  static tree
  compute_overall_iter_number (forall_info *nested_forall_info, tree inner_size,
@@ -189,7 +197,7 @@
  {
    tree tmp, number;
    stmtblock_t body;
-@@ -1834,6 +1819,8 @@ compute_overall_iter_number (forall_info
+@@ -1834,6 +1824,8 @@ compute_overall_iter_number (forall_info
    gfc_add_modify_expr (block, number, gfc_index_zero_node);
  
    gfc_start_block (&body);
@@ -198,7 +206,7 @@
    if (nested_forall_info)
      tmp = build2 (PLUS_EXPR, gfc_array_index_type, number,
  		  inner_size);
-@@ -1858,8 +1845,8 @@ compute_overall_iter_number (forall_info
+@@ -1858,8 +1850,8 @@ compute_overall_iter_number (forall_info
  
  static tree
  allocate_temp_for_forall_nest (forall_info * nested_forall_info, tree type,
@@ -209,7 +217,7 @@
  {
    tree unit;
    tree temp1;
-@@ -1867,7 +1854,8 @@ allocate_temp_for_forall_nest (forall_in
+@@ -1867,7 +1859,8 @@ allocate_temp_for_forall_nest (forall_in
    tree bytesize, size;
  
    /* Calculate the total size of temporary needed in forall construct.  */
@@ -219,7 +227,7 @@
  
    unit = TYPE_SIZE_UNIT (type);
    bytesize = fold (build2 (MULT_EXPR, gfc_array_index_type, size, unit));
-@@ -1893,17 +1881,16 @@ gfc_trans_assign_need_temp (gfc_expr * e
+@@ -1893,17 +1886,16 @@ gfc_trans_assign_need_temp (gfc_expr * e
    tree type;
    tree inner_size;
    gfc_ss *lss, *rss;
@@ -241,7 +249,7 @@
  
    /* Count is the wheremask index.  */
    if (wheremask)
-@@ -1919,15 +1906,17 @@ gfc_trans_assign_need_temp (gfc_expr * e
+@@ -1919,15 +1911,17 @@ gfc_trans_assign_need_temp (gfc_expr * e
  
    /* Calculate the size of temporary needed in the assignment. Return loop, lss
       and rss which are used in function generate_loop_for_rhs_to_temp().  */
@@ -262,7 +270,7 @@
  
    /* Initialize the maskindexes.  */
    forall_tmp = nested_forall_info;
-@@ -1941,8 +1930,8 @@ gfc_trans_assign_need_temp (gfc_expr * e
+@@ -1941,8 +1935,8 @@ gfc_trans_assign_need_temp (gfc_expr * e
      }
  
    /* Generate codes to copy rhs to the temporary .  */
@@ -273,7 +281,7 @@
  
    /* Generate body and loops according to the information in
       nested_forall_info.  */
-@@ -1968,8 +1957,7 @@ gfc_trans_assign_need_temp (gfc_expr * e
+@@ -1968,8 +1962,7 @@ gfc_trans_assign_need_temp (gfc_expr * e
      gfc_add_modify_expr (block, count, gfc_index_zero_node);
  
    /* Generate codes to copy the temporary to lhs.  */
@@ -283,7 +291,7 @@
  
    /* Generate body and loops according to the information in
       nested_forall_info.  */
-@@ -2022,8 +2010,8 @@ gfc_trans_pointer_assign_need_temp (gfc_
+@@ -2022,8 +2015,8 @@ gfc_trans_pointer_assign_need_temp (gfc_
  
        /* Allocate temporary for nested forall construct according to the
           information in nested_forall_info and inner_size.  */
@@ -294,7 +302,7 @@
        gfc_start_block (&body);
        gfc_init_se (&lse, NULL);
        lse.expr = gfc_build_array_ref (tmp1, count);
-@@ -2112,7 +2100,7 @@ gfc_trans_pointer_assign_need_temp (gfc_
+@@ -2112,7 +2105,7 @@ gfc_trans_pointer_assign_need_temp (gfc_
  
        /* Allocate temporary for nested forall construct.  */
        tmp1 = allocate_temp_for_forall_nest (nested_forall_info, parmtype,
@@ -303,7 +311,7 @@
        gfc_start_block (&body);
        gfc_init_se (&lse, NULL);
        lse.expr = gfc_build_array_ref (tmp1, count);
-@@ -2582,7 +2570,7 @@ gfc_evaluate_where_mask (gfc_expr * me, 
+@@ -2582,7 +2575,7 @@ gfc_evaluate_where_mask (gfc_expr * me, 
  
    /* Allocate temporary for where mask.  */
    tmp = allocate_temp_for_forall_nest (nested_forall_info, boolean_type_node,
@@ -312,7 +320,7 @@
    /* Record the temporary address in order to free it later.  */
    if (ptemp1)
      {
-@@ -2595,7 +2583,7 @@ gfc_evaluate_where_mask (gfc_expr * me, 
+@@ -2595,7 +2588,7 @@ gfc_evaluate_where_mask (gfc_expr * me, 
  
    /* Allocate temporary for !mask.  */
    ntmp = allocate_temp_for_forall_nest (nested_forall_info, boolean_type_node,

gcc4-java-awt-thread-init.patch:
 gnu_java_awt_peer_gtk_GtkToolkit.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

Index: gcc4-java-awt-thread-init.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4-java-awt-thread-init.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc4-java-awt-thread-init.patch	28 Apr 2005 17:32:52 -0000	1.1
+++ gcc4-java-awt-thread-init.patch	5 May 2005 21:10:21 -0000	1.2
@@ -1,13 +1,17 @@
---- libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c.jj	2005-04-08 11:59:39.223115951 -0400
-+++ libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	2005-04-08 12:00:19.634845783 -0400
-@@ -275,10 +275,13 @@
+2005-05-03  Thomas Fitzsimmons  <fitzsim at redhat.com>
+
+	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
+	(init_glib_threads): Check if threading system is already
+	initialized.
+
+--- libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	22 Feb 2005 06:13:03 -0000	1.5
++++ libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c	3 May 2005 23:53:27 -0000	1.6
+@@ -275,10 +275,22 @@ init_glib_threads(JNIEnv *env, jint port
      }
    
    (*env)->GetJavaVM( env, &the_vm );
 -  if (portableNativeSync)
 -    g_thread_init ( &portable_native_sync_jni_functions );
--  else
--    g_thread_init ( NULL );
 +  if (!g_thread_supported ())
 +    {
 +      if (portableNativeSync)
@@ -15,6 +19,16 @@
 +      else
 +        g_thread_init ( NULL );
 +    }
+   else
+-    g_thread_init ( NULL );
++    {
++      /* Warn if portable native sync is desired but the threading
++         system is already initialized.  In that case we can't
++         override the threading implementation with our portable
++         native sync functions. */
++      if (portableNativeSync)
++        g_printerr ("peer warning: portable native sync disabled.\n");
++    }
  
    /* Debugging progress message; uncomment if needed: */
    /*   printf("called gthread init\n"); */


Index: gcc4.spec
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4.spec,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- gcc4.spec	3 May 2005 23:37:28 -0000	1.34
+++ gcc4.spec	5 May 2005 21:10:21 -0000	1.35
@@ -1,6 +1,6 @@
-%define DATE 20050504
+%define DATE 20050505
 %define gcc_version 4.0.0
-%define gcc_release 3
+%define gcc_release 4
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %ifarch %{ix86} alpha ia64 x86_64 s390
@@ -84,14 +84,13 @@
 Patch12: gcc4-libstdc++-mt-alloc.patch
 Patch13: gcc4-struct-layout.patch
 Patch14: gcc4-ppc32-hwint32.patch
-Patch15: gcc4-pr21239.patch
-Patch16: gcc4-pr21297.patch
+Patch15: gcc4-pr20961.patch
+Patch16: gcc4-pr21085.patch
 Patch17: gcc4-gfortran-namelist.patch
 Patch18: gcc4-java-awt-thread-init.patch
 Patch19: gcc4-java-x509-extension.patch
 Patch20: gcc4-pr21330.patch
-Patch21: gcc4-pr21265.patch
-Patch22: gcc4-chk-pr21265.patch
+Patch21: gcc4-pr21329.patch
 
 %define _gnu %{nil}
 %ifarch sparc
@@ -415,14 +414,13 @@
 %patch12 -p0 -b .libstdc++-mt-alloc~
 %patch13 -p0 -b .struct-layout~
 #%patch14 -p0 -b .ppc32-hwint32~
-%patch15 -p0 -b .pr21239~
-%patch16 -p0 -b .pr21297~
+%patch15 -p0 -b .pr20961~
+%patch16 -p0 -b .pr21085~
 %patch17 -p0 -b .gfortran-namelist~
 %patch18 -p0 -b .java-awt-thread-init~
 %patch19 -p0 -b .java-x509-extension~
 %patch20 -p0 -b .pr21330~
-%patch21 -p0 -b .pr21265~
-%patch22 -p0 -b .chk-pr21265~
+%patch21 -p0 -b .pr21329~
 
 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
@@ -1417,6 +1415,13 @@
 %endif
 
 %changelog
+* Thu May  5 2005 Jakub Jelinek  <jakub at redhat.com> 4.0.0-4
+- update from CVS
+  - PRs libgcj/21372, target/21284
+- fix fold ICE (James A. Morrison, PR tree-optimization/21085)
+- fix weak decl merging (PR c++/20961)
+- optimize i386/x86-64 movmem sequences (PR target/21329)
+
 * Wed May  4 2005 Jakub Jelinek  <jakub at redhat.com> 4.0.0-3
 - update from CVS
   - PRs middle-end/19985, bootstrap/20633, c++/15875, c++/19542, c/15698,


--- gcc4-chk-pr21265.patch DELETED ---


--- gcc4-pr21239.patch DELETED ---


--- gcc4-pr21265.patch DELETED ---


--- gcc4-pr21297.patch DELETED ---




More information about the fedora-cvs-commits mailing list