rpms/gcc/FC-3 gcc34-hashtab-recursion.patch, NONE, 1.1 gcc34-i386-movsi-insv.patch, NONE, 1.1 gcc34-pr14084.patch, NONE, 1.1 gcc34-pr18925.patch, NONE, 1.1 gcc34-pr20191.patch, NONE, 1.1 gcc34-pr21955.patch, NONE, 1.1 gcc34-var-tracking-fix.patch, NONE, 1.1 gcc34-vsb-stack.patch, NONE, 1.1 .cvsignore, 1.60, 1.61 gcc34.spec, 1.31, 1.32 sources, 1.61, 1.62 gcc34-c++-pr19916.patch, 1.1, NONE gcc34-c++-redecl.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Fri Jul 22 12:21:42 UTC 2005


Author: jakub

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

Modified Files:
	.cvsignore gcc34.spec sources 
Added Files:
	gcc34-hashtab-recursion.patch gcc34-i386-movsi-insv.patch 
	gcc34-pr14084.patch gcc34-pr18925.patch gcc34-pr20191.patch 
	gcc34-pr21955.patch gcc34-var-tracking-fix.patch 
	gcc34-vsb-stack.patch 
Removed Files:
	gcc34-c++-pr19916.patch gcc34-c++-redecl.patch 
Log Message:
auto-import gcc-3.4.4-2.fc3 on branch FC-3 from gcc-3.4.4-2.fc3.src.rpm

gcc34-hashtab-recursion.patch:
 varasm.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

--- NEW FILE gcc34-hashtab-recursion.patch ---
2005-05-17  Jakub Jelinek  <jakub at redhat.com>

	* varasm.c (struct constant_descriptor_tree): Add hash field.
	(const_desc_hash): Just return hash field.
	(const_desc_eq): If hash values are different, return 0 immediately.
	(output_constant_def): Compute hash field of temporary key, use
	htab_find_slot_with_hash instead of htab_find_slot.  Set hash in
	newly built constant descriptor.
	(lookup_constant_def): Compute hash field of temporary key, use
	htab_find_with_hash instead of htab_find.

--- gcc/varasm.c	16 May 2005 21:37:01 -0000	1.510
+++ gcc/varasm.c	17 May 2005 06:34:48 -0000	1.511
@@ -2361,6 +2361,11 @@ struct constant_descriptor_tree GTY(())
 
   /* The value of the constant.  */
   tree value;
+
+  /* Hash of value.  Computing the hash from value each time
+     hashfn is called can't work properly, as that means recursive
+     use of the hash table during hash table expansion.  */
+  hashval_t hash;
 };
 
 static GTY((param_is (struct constant_descriptor_tree)))
@@ -2374,7 +2379,7 @@ static void maybe_output_constant_def_co
 static hashval_t
 const_desc_hash (const void *ptr)
 {
-  return const_hash_1 (((struct constant_descriptor_tree *)ptr)->value);
+  return ((struct constant_descriptor_tree *)ptr)->hash;
 }
 
 static hashval_t
@@ -2474,8 +2479,11 @@ const_hash_1 (const tree exp)
 static int
 const_desc_eq (const void *p1, const void *p2)
 {
-  return compare_constant (((struct constant_descriptor_tree *)p1)->value,
-			   ((struct constant_descriptor_tree *)p2)->value);
+  const struct constant_descriptor_tree *c1 = p1;
+  const struct constant_descriptor_tree *c2 = p2;
+  if (c1->hash != c2->hash)
+    return 0;
+  return compare_constant (c1->value, c2->value);
 }
 
 /* Compare t1 and t2, and return 1 only if they are known to result in
@@ -2745,12 +2753,14 @@ output_constant_def (tree exp, int defer
   /* Look up EXP in the table of constant descriptors.  If we didn't find
      it, create a new one.  */
   key.value = exp;
-  loc = htab_find_slot (const_desc_htab, &key, INSERT);
+  key.hash = const_hash_1 (exp);
+  loc = htab_find_slot_with_hash (const_desc_htab, &key, key.hash, INSERT);
 
   desc = *loc;
   if (desc == 0)
     {
       desc = build_constant_desc (exp);
+      desc->hash = key.hash;
       *loc = desc;
     }
 
@@ -2853,7 +2863,8 @@ lookup_constant_def (tree exp)
   struct constant_descriptor_tree key;
 
   key.value = exp;
-  desc = htab_find (const_desc_htab, &key);
+  key.hash = const_hash_1 (exp);
+  desc = htab_find_with_hash (const_desc_htab, &key, key.hash);
 
   return (desc ? desc->rtl : NULL_RTX);
 }

gcc34-i386-movsi-insv.patch:
 config/i386/i386.md           |   12 ++++++++++--
 testsuite/gcc.dg/20050510-2.c |   26 ++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

--- NEW FILE gcc34-i386-movsi-insv.patch ---
2005-05-10  Jakub Jelinek  <jakub at redhat.com>

	* config/i386/i386.md (movsi_insv_1, movdi_insv_1_rex64): Mask
	CONST_INT values with 255.

	* gcc.dg/20050510-2.c: New test.

--- gcc/config/i386/i386.md.jj	2005-05-10 00:47:12.000000000 +0200
+++ gcc/config/i386/i386.md	2005-05-10 14:01:42.000000000 +0200
@@ -1771,7 +1771,11 @@
 			 (const_int 8))
 	(match_operand:SI 1 "general_operand" "Qmn"))]
   "!TARGET_64BIT"
-  "mov{b}\t{%b1, %h0|%h0, %b1}"
+{
+  if (GET_CODE (operands[1]) == CONST_INT)
+    operands[1] = GEN_INT (INTVAL (operands[1]) & 255);
+  return "mov{b}\t{%b1, %h0|%h0, %b1}";
+}
   [(set_attr "type" "imov")
    (set_attr "mode" "QI")])
 
@@ -1781,7 +1785,11 @@
 			 (const_int 8))
 	(match_operand:DI 1 "nonmemory_operand" "Qn"))]
   "TARGET_64BIT"
-  "mov{b}\t{%b1, %h0|%h0, %b1}"
+{
+  if (GET_CODE (operands[1]) == CONST_INT)
+    operands[1] = GEN_INT (INTVAL (operands[1]) & 255);
+  return "mov{b}\t{%b1, %h0|%h0, %b1}";
+}
   [(set_attr "type" "imov")
    (set_attr "mode" "QI")])
 
--- gcc/testsuite/gcc.dg/20050510-2.c.jj	2005-04-07 15:51:53.775361896 +0200
+++ gcc/testsuite/gcc.dg/20050510-2.c	2005-05-10 14:37:12.000000000 +0200
@@ -0,0 +1,26 @@
+/* { dg-options run } */
+/* { dg-options "-O2" } */
+
+extern void abort (void);
+
+__attribute__((noinline)) int
+foo (unsigned char *x)
+{
+  if (x[0] != 1 || x[1] != 0x15)
+    abort ();
+  return 0;
+}
+
+static inline void
+bar (unsigned short x)
+{
+  unsigned char s[2] = { x >> 8, x & 0xff };
+  foo (s);
+}
+
+int
+main (void)
+{
+  bar (0x115);
+  return 0;
+}

gcc34-pr14084.patch:
 emit-rtl.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 85 insertions(+), 2 deletions(-)

--- NEW FILE gcc34-pr14084.patch ---
2004-05-27  Josef Zlomek  <zlomekj at suse.cz>

	PR middle-end/14084
	* emit-rtl.c (gen_rtx_REG_offset): Adjust the offset according
	to size of decl.

--- gcc/emit-rtl.c	25 May 2004 12:04:15 -0000	1.391
+++ gcc/emit-rtl.c	27 May 2004 04:28:12 -0000	1.392
@@ -746,13 +746,96 @@ gen_reg_rtx (enum machine_mode mode)
   return val;
 }
 
-/* Generate a register with same attributes as REG,
-   but offsetted by OFFSET.  */
+/* Generate a register with same attributes as REG, but offsetted by OFFSET.
+   Do the big endian correction if needed.  */
 
 rtx
 gen_rtx_REG_offset (rtx reg, enum machine_mode mode, unsigned int regno, int offset)
 {
   rtx new = gen_rtx_REG (mode, regno);
+  tree decl;
+  HOST_WIDE_INT var_size;
+
+  /* PR middle-end/14084
+     The problem appears when a variable is stored in a larger register
+     and later it is used in the original mode or some mode in between
+     or some part of variable is accessed.
+
+     On little endian machines there is no problem because
+     the REG_OFFSET of the start of the variable is the same when
+     accessed in any mode (it is 0).
+
+     However, this is not true on big endian machines.
+     The offset of the start of the variable is different when accessed
+     in different modes.
+     When we are taking a part of the REG we have to change the OFFSET
+     from offset WRT size of mode of REG to offset WRT size of variable.
+
+     If we would not do the big endian correction the resulting REG_OFFSET
+     would be larger than the size of the DECL.
+
+     Examples of correction, for BYTES_BIG_ENDIAN WORDS_BIG_ENDIAN machine:
+
+     REG.mode  MODE  DECL size  old offset  new offset  description
+     DI        SI    4          4           0           int32 in SImode
+     DI        SI    1          4           0           char in SImode
+     DI        QI    1          7           0           char in QImode
+     DI        QI    4          5           1           1st element in QImode
+                                                        of char[4]
+     DI        HI    4          6           2           1st element in HImode
+                                                        of int16[2]
+
+     If the size of DECL is equal or greater than the size of REG
+     we can't do this correction because the register holds the
+     whole variable or a part of the variable and thus the REG_OFFSET
+     is already correct.  */
+
+  decl = REG_EXPR (reg);
+  if ((BYTES_BIG_ENDIAN || WORDS_BIG_ENDIAN)
+      && decl != NULL
+      && offset > 0
+      && GET_MODE_SIZE (GET_MODE (reg)) > GET_MODE_SIZE (mode)
+      && ((var_size = int_size_in_bytes (TREE_TYPE (decl))) > 0
+	  && var_size < GET_MODE_SIZE (GET_MODE (reg))))
+    {
+      int offset_le;
+
+      /* Convert machine endian to little endian WRT size of mode of REG.  */
+      if (WORDS_BIG_ENDIAN)
+	offset_le = ((GET_MODE_SIZE (GET_MODE (reg)) - 1 - offset)
+		     / UNITS_PER_WORD) * UNITS_PER_WORD;
+      else
+	offset_le = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
+
+      if (BYTES_BIG_ENDIAN)
+	offset_le += ((GET_MODE_SIZE (GET_MODE (reg)) - 1 - offset)
+		      % UNITS_PER_WORD);
+      else
+	offset_le += offset % UNITS_PER_WORD;
+
+      if (offset_le >= var_size)
+	{
+	  /* MODE is wider than the variable so the new reg will cover
+	     the whole variable so the resulting OFFSET should be 0.  */
+	  offset = 0;
+	}
+      else
+	{
+	  /* Convert little endian to machine endian WRT size of variable.  */
+	  if (WORDS_BIG_ENDIAN)
+	    offset = ((var_size - 1 - offset_le)
+		      / UNITS_PER_WORD) * UNITS_PER_WORD;
+	  else
+	    offset = (offset_le / UNITS_PER_WORD) * UNITS_PER_WORD;
+
+	  if (BYTES_BIG_ENDIAN)
+	    offset += ((var_size - 1 - offset_le)
+		       % UNITS_PER_WORD);
+	  else
+	    offset += offset_le % UNITS_PER_WORD;
+	}
+    }
+
   REG_ATTRS (new) = get_reg_attrs (REG_EXPR (reg),
 				   REG_OFFSET (reg) + offset);
   return new;

gcc34-pr18925.patch:
 cp/class.c                                      |    8 +++++++-
 testsuite/g++.dg/ext/visibility/staticdatamem.C |   20 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

--- NEW FILE gcc34-pr18925.patch ---
2004-12-13  Mark Mitchell  <mark at codesourcery.com>

	PR c++/18925
	* class.c (layout_class_type): Determine the visibility of static
	data members.

	* g++.dg/ext/visibility/staticdatamem.C: New test.

--- gcc/cp/class.c	8 Dec 2004 08:35:33 -0000	1.692
+++ gcc/cp/class.c	14 Dec 2004 02:21:46 -0000	1.693
@@ -4553,7 +4553,13 @@ layout_class_type (tree t, tree *virtual
              At this point, finish_record_layout will be called, but
 	     S1 is still incomplete.)  */
 	  if (TREE_CODE (field) == VAR_DECL)
-	    maybe_register_incomplete_var (field);
+	    {
+	      maybe_register_incomplete_var (field);
+	      /* The visibility of static data members is determined
+		 at their point of declaration, not their point of
+		 definition.  */
+	      determine_visibility (field);
+	    }
 	  continue;
 	}
 
--- gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C	1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C	14 Dec 2004 02:15:55 -0000	1.1
@@ -0,0 +1,20 @@
+// PR c++/18925
+// { dg-do compile { target ia64-*-linux* } }
+// { dg-options "-fPIC -fvisibility=hidden" }
+// { dg-final { scan-assembler-not "gprel" } }
+
+class __attribute__ ((visibility("default"))) Type 
+{ 
+ private: 
+  static long _staticTypeCount; 
+ public: 
+  Type() { _staticTypeCount++; } 
+  ~Type(); 
+}; 
+ 
+long Type::_staticTypeCount = 0; 
+ 
+Type::~Type() 
+{ 
+ _staticTypeCount--; 
+} 

gcc34-pr20191.patch:
 gcc.c-torture/compile/20050615-1.c |   57 +++++++++++++++++++++++++++++++++++++
 gcc/config/rs6000/rs6000.md        |   20 +++++++-----
 2 files changed, 68 insertions(+), 9 deletions(-)

--- NEW FILE gcc34-pr20191.patch ---
2005-06-15  Janis Johnson  <janis187 at us.ibm.com>

	PR target/20191
	Backport from mainline:

	2004-04-23  Dale Johannesen  <dalej at apple.com>

	* config/rs6000.md (movsf_hardfloat): Add POWER form of nop.
	(movdf_hardfloat64):  Ditto.
	(movdf_softfloat64):  Ditto.

	* config/rs6000.md (movsf_hardfloat): Accept CTR-to-CTR copy.
	(movdf_hardfloat64):  Ditto.

	PR target/20191
	* gcc.c-torture/compile/20050615-1.c: New test.

--- gcc/config/rs6000/rs6000.md	2005-06-14 11:08:15.959387560 -0700
+++ gcc/config/rs6000/rs6000.md	2005-06-14 14:38:33.400313800 -0700
@@ -7839,8 +7839,8 @@
 }")
 
 (define_insn "*movsf_hardfloat"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!cl,!q,!r,!r,!r")
-	(match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,r,h,G,Fn"))]
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!cl,!q,!r,!h,!r,!r")
+	(match_operand:SF 1 "input_operand" "r,m,r,f,m,f,r,r,h,0,G,Fn"))]
   "(gpc_reg_operand (operands[0], SFmode)
    || gpc_reg_operand (operands[1], SFmode))
    && (TARGET_HARD_FLOAT && TARGET_FPRS)"
@@ -7854,10 +7854,11 @@
    mt%0 %1
    mt%0 %1
    mf%1 %0
+   {cror 0,0,0|nop}
    #
    #"
-  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,mtjmpr,*,*,*")
-   (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8")])
+  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,mtjmpr,*,*,*,*")
+   (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,8")])
 
 (define_insn "*movsf_softfloat"
   [(set (match_operand:SF 0 "nonimmediate_operand" "=r,cl,q,r,r,m,r,r,r,r,r,*h")
@@ -8114,8 +8115,8 @@
 ; ld/std require word-aligned displacements -> 'Y' constraint.
 ; List Y->r and r->Y before r->r for reload.
 (define_insn "*movdf_hardfloat64"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,b,!r,f,f,m,!cl,!r,!r,!r,!r")
-	(match_operand:DF 1 "input_operand" "r,Y,m,r,f,m,f,r,h,G,H,F"))]
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,b,!r,f,f,m,!cl,!r,!h,!r,!r,!r")
+	(match_operand:DF 1 "input_operand" "r,Y,m,r,f,m,f,r,h,0,G,H,F"))]
   "TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
    && (gpc_reg_operand (operands[0], DFmode)
        || gpc_reg_operand (operands[1], DFmode))"
@@ -8129,11 +8130,12 @@
    stfd%U0%X0 %1,%0
    mt%0 %1
    mf%1 %0
+   {cror 0,0,0|nop}
    #
    #
    #"
-  [(set_attr "type" "store,load,load,*,fp,fpload,fpstore,mtjmpr,*,*,*,*")
-   (set_attr "length" "4,4,8,4,4,4,4,4,4,8,12,16")])
+  [(set_attr "type" "store,load,load,*,fp,fpload,fpstore,mtjmpr,*,*,*,*,*")
+   (set_attr "length" "4,4,8,4,4,4,4,4,4,4,8,12,16")])
 
 (define_split
   [(set (match_operand:DF 0 "base_reg_operand" "")
@@ -8191,7 +8193,7 @@
    #
    #
    #
-   nop"
+   {cror 0,0,0|nop}"
   [(set_attr "type" "load,store,*,*,*,*,*,*,*")
    (set_attr "length" "4,4,4,4,4,8,12,16,4")])
 
--- /dev/null	2004-06-24 11:06:20.000000000 -0700
+++ gcc.c-torture/compile/20050615-1.c	2005-06-15 11:35:06.000000000 -0700
@@ -0,0 +1,57 @@
+/* Test for PR target/20191.  */
+
+struct S1;
+
+struct S1 {
+  struct S1 *next;
+  float x;
+};
+
+struct S2 {
+  float y;
+};
+
+extern int func_ex1 (float);
+
+extern int f;
+extern float n;
+extern struct S1 *bp1;
+extern struct S2 *bp2;
+
+inline float
+func1 (int f, struct S2 *p2)
+{
+  float a;
+
+  if (f)
+    a = n >= p2->y ? n : p2->y;
+  else
+    a = n;
+  return a;
+}
+
+inline float
+func2 (struct S1 *p1, struct S2 *p2)
+{
+  float a, b;
+
+  if(n <= 1.0)
+    b = func1 (f, p2);
+  else
+    {
+       a = n <= p1->x ? 0.0 : p1->x;
+       b = a >= p2->y ? a : p2->y;
+    }
+  return(b);
+}
+
+void
+func3 (struct S1 *p)
+{
+  float a = 0.0;
+
+  if (f)
+    a = func2 (bp1, bp2);
+  if (func_ex1 (a))
+    bp1 = p;
+}

gcc34-pr21955.patch:
 include/std/std_sstream.h                              |   12 +++
 src/Makefile.am                                        |   15 ++++
 src/Makefile.in                                        |   25 ++++++-
 src/sstream-inst-showmanyc.cc                          |   39 ++++++++++++
 src/sstream-inst.cc                                    |    5 +
 testsuite/27_io/basic_streambuf/in_avail/char/1.cc     |   54 +++++++++++++++++
 testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc  |   54 +++++++++++++++++
 testsuite/27_io/basic_stringbuf/in_avail/char/1.cc     |    4 -
 testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc |   54 +++++++++++++++++
 testsuite/27_io/basic_stringbuf/str/char/1.cc          |    2 
 testsuite/lib/libstdc++.exp                            |    1 
 11 files changed, 258 insertions(+), 7 deletions(-)

--- NEW FILE gcc34-pr21955.patch ---
2005-07-22  Jakub Jelinek  <jakub at redhat.com>

	* src/sstream-inst.cc: Add .hidden directive for
	streamsize basic_stringbuf<{char,wchar_t}>::showmanyc().
	* src/sstream-inst-showmanyc.cc: New file.
	* src/Makefile.am (libstdc++_nonshared.la): Add new library.
	* src/Makefile.in: Rebuilt.
	* testsuite/lib/libstdc++.exp: Append -lstdc++_nonshared for
	testsuite executable linking.

2005-06-08  Benjamin Kosnik  <bkoz at redhat.com>

	PR libstdc++/21955
	* include/std/std_sstream.h (basic_stringbuf::showmanyc): Add.
	* testsuite/27_io/basic_streambuf/in_avail/char/1.cc: New, test
	base class behavior.
	* testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc: Same.
	* testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc: New.
	* testsuite/27_io/basic_stringbuf/in_avail/char/1.cc: Match
	filebuf behavior.
	* testsuite/27_io/basic_stringbuf/str/char/1.cc: Same.

--- libstdc++-v3/src/sstream-inst.cc.jj	2003-07-11 10:28:13.000000000 +0200
+++ libstdc++-v3/src/sstream-inst.cc	2005-07-21 17:46:08.000000000 +0200
@@ -60,3 +60,8 @@ namespace std
   template class basic_stringstream<wchar_t>; 
 #endif
 } // namespace std
+
+#ifdef PIC
+__asm (".hidden _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv");
+__asm (".hidden _ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv");
+#endif
--- libstdc++-v3/src/sstream-inst-showmanyc.cc.jj	2005-07-21 21:27:40.000000000 +0200
+++ libstdc++-v3/src/sstream-inst-showmanyc.cc	2005-07-22 09:16:58.000000000 +0200
@@ -0,0 +1,39 @@
+// Explicit instantiation file.
+
+// Copyright (C) 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <sstream>
+
+namespace std
+{
+  // These symbols are hidden in libstdc++.so, as it is undesirable to export
+  // @@GLIBCXX_3.4.6
+  template streamsize basic_stringbuf<char, char_traits<char>, allocator<char> >::showmanyc();
+  template streamsize basic_stringbuf<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >::showmanyc();
+} // namespace std
--- libstdc++-v3/src/Makefile.am.jj	2004-04-20 15:55:47.000000000 +0200
+++ libstdc++-v3/src/Makefile.am	2005-07-22 09:00:32.000000000 +0200
@@ -25,7 +25,7 @@
 include $(top_srcdir)/fragment.am
 
 # Cross compiler support.
-toolexeclib_LTLIBRARIES = libstdc++.la
+toolexeclib_LTLIBRARIES = libstdc++.la libstdc++_nonshared.la
 
 # Symbol versioning for shared libraries.
 if GLIBCXX_BUILD_VERSIONED_SHLIB
@@ -150,6 +150,11 @@ libstdc___la_DEPENDENCIES = ${version_de
 libstdc___la_LDFLAGS = \
 	-version-info $(libtool_VERSION) ${version_arg} -lm 
 
+libstdc___nonshared_la_SOURCES = \
+	sstream-inst-showmanyc.cc
+libstdc___nonshared_la_LIBADD =
+libstdc___nonshared_la_DEPENDENCIES = $(libstdc___nonshared_la_LIBADD)
+libstdc___nonshared_la_LDFLAGS = -static
 
 # Use special rules for the deprecated source files so that they find
 # deprecated include files.
@@ -159,6 +164,14 @@ strstream.lo: strstream.cc
 strstream.o: strstream.cc
 	$(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
 
+# Use special rules for libstdc++_nonshared.la files, as -prefer-pic
+# doesn't seem to work for some reason.
+sstream-inst-showmanyc.lo: sstream-inst-showmanyc.cc
+	$(LTCXXCOMPILE) -c $< \
+	  && cp -f .libs/sstream-inst-showmanyc.o sstream-inst-showmanyc.o
+sstream-inst-showmanyc.o: sstream-inst-showmanyc.cc
+	$(CXXCOMPILE) -fPIC -DPIC -c $<
+
 # Use special rules for the concept-checking instantiations so that all
 # the generated template functions are also instantiated.  Force the checks
 # to be on so that the instantiations are actually seen.
--- libstdc++-v3/src/Makefile.in.jj	2004-04-20 15:55:47.000000000 +0200
+++ libstdc++-v3/src/Makefile.in	2005-07-22 09:06:15.000000000 +0200
@@ -221,7 +221,7 @@ WARN_CXXFLAGS = \
 AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
 
 # Cross compiler support.
-toolexeclib_LTLIBRARIES = libstdc++.la
+toolexeclib_LTLIBRARIES = libstdc++.la libstdc++_nonshared.la
 
 # Symbol versioning for shared libraries.
 @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE at version_arg = -Wl,--version-script=libstdc++-symbol.ver
@@ -308,6 +308,13 @@ libstdc___la_LDFLAGS = \
 	-version-info $(libtool_VERSION) ${version_arg} -lm 
 
 
+libstdc___nonshared_la_SOURCES = \
+	sstream-inst-showmanyc.cc
+
+libstdc___nonshared_la_LIBADD = 
+libstdc___nonshared_la_DEPENDENCIES = $(libstdc___nonshared_la_LIBADD)
+libstdc___nonshared_la_LDFLAGS = -static
+
 # Use special rules for the deprecated source files so that they find
 # deprecated include files.
 GLIBCXX_INCLUDE_DIR = $(glibcxx_builddir)/include
@@ -379,6 +386,8 @@ am__objects_3 = allocator.lo codecvt.lo 
 	$(am__objects_1) $(am__objects_2)
 am_libstdc___la_OBJECTS = $(am__objects_3)
 libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
+am_libstdc___nonshared_la_OBJECTS = sstream-inst-showmanyc.lo
+libstdc___nonshared_la_OBJECTS = $(am_libstdc___nonshared_la_OBJECTS)
 
 DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
 depcomp =
@@ -386,10 +395,10 @@ am__depfiles_maybe =
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 CXXLD = $(CXX)
-DIST_SOURCES = $(libstdc___la_SOURCES)
+DIST_SOURCES = $(libstdc___la_SOURCES) $(libstdc___nonshared_la_SOURCES)
 DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/fragment.am \
 	Makefile.am
-SOURCES = $(libstdc___la_SOURCES)
+SOURCES = $(libstdc___la_SOURCES) $(libstdc___nonshared_la_SOURCES)
 
 all: all-am
 
@@ -430,6 +439,8 @@ clean-toolexeclibLTLIBRARIES:
 	done
 libstdc++.la: $(libstdc___la_OBJECTS) $(libstdc___la_DEPENDENCIES) 
 	$(CXXLINK) -rpath $(toolexeclibdir) $(libstdc___la_LDFLAGS) $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) $(LIBS)
+libstdc++_nonshared.la: $(libstdc___nonshared_la_OBJECTS) $(libstdc___nonshared_la_DEPENDENCIES) 
+	$(CXXLINK) -rpath $(toolexeclibdir) $(libstdc___nonshared_la_LDFLAGS) $(libstdc___nonshared_la_OBJECTS) $(libstdc___nonshared_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT) core *.core
@@ -674,6 +685,14 @@ strstream.lo: strstream.cc
 strstream.o: strstream.cc
 	$(CXXCOMPILE) -I$(GLIBCXX_INCLUDE_DIR)/backward -Wno-deprecated -c $<
 
+# Use special rules for libstdc++_nonshared.la files, as -prefer-pic
+# doesn't seem to work for some reason.
+sstream-inst-showmanyc.lo: sstream-inst-showmanyc.cc
+	$(LTCXXCOMPILE) -c $< \
+	  && cp -f .libs/sstream-inst-showmanyc.o sstream-inst-showmanyc.o
+sstream-inst-showmanyc.o: sstream-inst-showmanyc.cc
+	$(CXXCOMPILE) -fPIC -DPIC -c $<
+
 # Use special rules for the concept-checking instantiations so that all
 # the generated template functions are also instantiated.  Force the checks
 # to be on so that the instantiations are actually seen.
--- libstdc++-v3/include/std/std_sstream.h.jj	2004-10-04 14:58:25.000000000 +0200
+++ libstdc++-v3/include/std/std_sstream.h	2005-07-21 17:17:16.000000000 +0200
@@ -185,6 +185,18 @@ namespace std
 	_M_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
       }
 
+      virtual streamsize
+      showmanyc()
+      {
+	streamsize __ret = -1;
+	if (_M_mode & ios_base::in)
+	  {
+	    _M_update_egptr();
+	    __ret = this->egptr() - this->gptr();
+	  }
+	return __ret;
+      }
+
       // [documentation is inherited]
       virtual int_type
       underflow();
--- libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc.jj	2003-10-01 12:12:11.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc	2005-07-22 01:22:15.000000000 +0200
@@ -45,7 +45,7 @@ void test03() 
   std::streamsize d1 = strb_01.in_avail();
   std::streamsize d2 = strb_03.in_avail();
   VERIFY( d1 ); // non-zero
-  VERIFY( !d2 ); // zero, cuz ios_base::out
+  VERIFY( d2 == -1 ); // -1, cuz ios_base::out
   VERIFY( d1 != d2 ); //these should be the same
   VERIFY( static_cast<std::streamsize>(str_01.length()) == d1 );  
   VERIFY( strb_01.str() == strb_03.str() ); //ditto
--- libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc.jj	2003-10-01 12:12:10.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc	2005-07-22 01:22:04.000000000 +0200
@@ -49,8 +49,8 @@ void test04() 
   VERIFY( strmof_1 == static_cast<std::streamoff>(str_01.length()) );
   VERIFY( strmof_2 == static_cast<std::streamoff>(str_02.length()) );
   strmof_1 = strb_03.in_avail(); 
-  // zero cuz write-only, or eof()? zero, from showmany
-  VERIFY( strmof_1 == 0 ); 
+  // zero cuz write-only, or eof() to match basic_filebuf
+  VERIFY( strmof_1 == -1 ); 
 }
 
 int main()
--- libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc.jj	2005-07-22 01:22:04.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc	2005-07-22 01:22:04.000000000 +0200
@@ -0,0 +1,54 @@
+// 2005-06-07 Benjamin Kosnik
+
+// Copyright (C) 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+#include <stdexcept>
+
+double  
+test_stringstream()
+{
+  double result;
+  char* source = "1918"; 
+  std::stringstream s;
+  s << source;
+
+  std::string tmp = s.str();
+  std::streambuf* sb = s.rdbuf();
+  int i = sb->in_avail();
+
+  if (i)
+    {
+      s >> result;
+    }
+  else
+    {
+      throw std::runtime_error("conversion failed");
+    }
+  return result;
+}
+
+
+int main ()
+{
+  test_stringstream();
+  return 0;
+}
--- libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc.jj	2005-07-22 01:21:41.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc	2005-07-22 01:21:41.000000000 +0200
@@ -0,0 +1,54 @@
+// 2005-06-07 Benjamin Kosnik  <bkoz at redhat.com>
+
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+typedef std::basic_streambuf<char> 	streambuf_type;
+
+struct testbuf : streambuf_type
+{
+  testbuf() { }
+};
+
+void test05() 
+{
+  typedef streambuf_type::int_type 	int_type;
+  typedef streambuf_type::traits_type 	traits_type;
+  typedef streambuf_type::pos_type 	pos_type;
+  typedef streambuf_type::off_type 	off_type;
+  typedef size_t 			size_type;
+
+  bool test __attribute__((unused)) = true;
+  std::streamoff  			strmof_1, strmof_2;
+  testbuf	sb01;
+
+  // int in_avail()
+  strmof_1 = sb01.in_avail();
+  VERIFY( strmof_1  == 0 ); 
+}
+
+int main() 
+{
+  test05();
+  return 0;
+}
--- libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc.jj	2005-07-22 01:21:41.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc	2005-07-22 01:21:41.000000000 +0200
@@ -0,0 +1,54 @@
+// 2005-06-07 Benjamin Kosnik  <bkoz at redhat.com>
+
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+typedef std::basic_streambuf<wchar_t> 	streambuf_type;
+
+struct testbuf : streambuf_type
+{
+  testbuf() { }
+};
+
+void test05() 
+{
+  typedef streambuf_type::int_type 	int_type;
+  typedef streambuf_type::traits_type 	traits_type;
+  typedef streambuf_type::pos_type 	pos_type;
+  typedef streambuf_type::off_type 	off_type;
+  typedef size_t 			size_type;
+
+  bool test __attribute__((unused)) = true;
+  std::streamoff  			strmof_1, strmof_2;
+  testbuf	sb01;
+
+  // int in_avail()
+  strmof_1 = sb01.in_avail();
+  VERIFY( strmof_1  == 0 ); 
+}
+
+int main() 
+{
+  test05();
+  return 0;
+}
--- libstdc++-v3/testsuite/lib/libstdc++.exp.jj	2005-05-06 12:59:10.000000000 +0200
+++ libstdc++-v3/testsuite/lib/libstdc++.exp	2005-07-22 10:03:52.000000000 +0200
@@ -283,6 +283,7 @@ proc v3_target_compile { source dest typ
     # Link the support objects into executables.
     if { $type == "executable" } {
 	set cxx_final [concat $cxx_final ${v3-test_objs}]
+	lappend options "libs=-lstdc++_nonshared"
     }
 
     lappend options "compiler=$cxx_final"

gcc34-var-tracking-fix.patch:
 Makefile.in    |    3 +
 dwarf2out.c    |   47 +++++++++++++++----------
 var-tracking.c |  104 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 3 files changed, 121 insertions(+), 33 deletions(-)

--- NEW FILE gcc34-var-tracking-fix.patch ---
2005-06-08  Eric Botcazou  <ebotcazou at libertysurf.fr>

	PR debug/21946
	* dwarf2out.c (add_loc_descr_op_piece): Move to the
	DWARF2_DEBUGGING_INFO section.

2005-06-07  Jakub Jelinek  <jakub at redhat.com>

	PR debug/21946
	* dwarf2out.c (add_loc_descr_op_piece): New function.
	(multiple_reg_loc_descriptor, concat_loc_descriptor,
	loc_descriptor): Use it.

	* var-tracking.c: Include regs.h and expr.h.
	(emit_note_insn_var_location): Skip over pieces where offset
	is smaller than previous offset plus previous piece mode size.
	Optimize adjacent hard registers or memory locations.
	* Makefile.in (var-tracking.o): Depend on $(REGS_H) and $(EXPR_H).

--- gcc/dwarf2out.c.jj	2005-06-07 00:39:11.000000000 +0200
+++ gcc/dwarf2out.c	2005-06-07 00:54:10.000000000 +0200
@@ -3747,6 +3748,7 @@ static dw_die_ref subrange_type_die (tre
 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
 static int type_is_enum (tree);
 static unsigned int dbx_reg_number (rtx);
+static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
 static dw_loc_descr_ref reg_loc_descriptor (rtx);
 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
@@ -8176,6 +8178,26 @@ dbx_reg_number (rtx rtl)
   return DBX_REGISTER_NUMBER (regno);
 }
 
+/* Optionally add a DW_OP_piece term to a location description expression.
+   DW_OP_piece is only added if the location description expression already
+   doesn't end with DW_OP_piece.  */
+
+static void
+add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
+{
+  dw_loc_descr_ref loc;
+
+  if (*list_head != NULL)
+    {
+      /* Find the end of the chain.  */
+      for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
+	;
+
+      if (loc->dw_loc_opc != DW_OP_piece)
+	loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
+    }
+}
+
 /* Return a location descriptor that designates a machine register or
    zero if there is none.  */
 
@@ -8235,7 +8257,7 @@ multiple_reg_loc_descriptor (rtx rtl, rt
 
 	  t = one_reg_loc_descriptor (reg);
 	  add_loc_descr (&loc_result, t);
-	  add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
+	  add_loc_descr_op_piece (&loc_result, size);
 	  ++reg;
 	}
       return loc_result;
@@ -8256,7 +8278,7 @@ multiple_reg_loc_descriptor (rtx rtl, rt
       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
       add_loc_descr (&loc_result, t);
       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
-      add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
+      add_loc_descr_op_piece (&loc_result, size);
     }
   return loc_result;
 }
@@ -8551,14 +8573,10 @@ concat_loc_descriptor (rtx x0, rtx x1)
     return 0;
 
   cc_loc_result = x0_ref;
-  add_loc_descr (&cc_loc_result,
-		 new_loc_descr (DW_OP_piece,
-				GET_MODE_SIZE (GET_MODE (x0)), 0));
+  add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
 
   add_loc_descr (&cc_loc_result, x1_ref);
-  add_loc_descr (&cc_loc_result,
-		 new_loc_descr (DW_OP_piece,
-				GET_MODE_SIZE (GET_MODE (x1)), 0));
+  add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
 
   return cc_loc_result;
 }
@@ -8619,8 +8637,7 @@ loc_descriptor (rtx rtl, bool can_use_fb
 	  loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
 				       can_use_fbreg);
 	  mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
-	  add_loc_descr (&loc_result,
-			 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
+	  add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
 	  for (i = 1; i < num_elem; i++)
 	    {
 	      dw_loc_descr_ref temp;
@@ -8629,9 +8646,7 @@ loc_descriptor (rtx rtl, bool can_use_fb
 				     can_use_fbreg);
 	      add_loc_descr (&loc_result, temp);
 	      mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
-	      add_loc_descr (&loc_result,
-			     new_loc_descr (DW_OP_piece,
-					    GET_MODE_SIZE (mode), 0));
+	      add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
 	    }
 	}
       break;
@@ -9930,8 +9945,7 @@ add_location_or_const_value_attribute (d
 	/* Create the first one, so we have something to add to.  */
 	descr = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0), true);
 	mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
-	add_loc_descr (&descr,
-		       new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
+	add_loc_descr_op_piece (&descr, GET_MODE_SIZE (mode));
 	for (i = 1; i < num_elem; i++)
 	  {
 	    dw_loc_descr_ref temp;
@@ -9939,9 +9953,7 @@ add_location_or_const_value_attribute (d
 	    temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0), true);
 	    add_loc_descr (&descr, temp);
 	    mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
-	    add_loc_descr (&descr,
-			   new_loc_descr (DW_OP_piece,
-					  GET_MODE_SIZE (mode), 0));
+	    add_loc_descr_op_piece (&descr, GET_MODE_SIZE (mode));
 	  }
       }
       add_AT_location_description (die, DW_AT_location, descr);
--- gcc/var-tracking.c.jj	2005-06-07 00:39:11.000000000 +0200
+++ gcc/var-tracking.c	2005-06-07 00:52:15.000000000 +0200
@@ -102,6 +102,8 @@
 #include "alloc-pool.h"
 #include "fibheap.h"
 #include "hashtab.h"
+#include "regs.h"
+#include "expr.h"
 
 /* Type of micro operation.  */
 enum micro_operation_type
@@ -2185,10 +2187,12 @@ emit_note_insn_var_location (void **varp
   rtx insn = ((emit_note_data *)data)->insn;
   enum emit_note_where where = ((emit_note_data *)data)->where;
   rtx note;
-  int i;
+  int i, j, n_var_parts;
   bool complete;
   HOST_WIDE_INT last_limit;
   tree type_size_unit;
+  HOST_WIDE_INT offsets[MAX_VAR_PARTS];
+  rtx loc[MAX_VAR_PARTS];
 
 #ifdef ENABLE_CHECKING
   if (!var->decl)
@@ -2197,16 +2201,90 @@ emit_note_insn_var_location (void **varp
 
   complete = true;
   last_limit = 0;
+  n_var_parts = 0;
   for (i = 0; i < var->n_var_parts; i++)
     {
+      enum machine_mode mode, wider_mode;
+
       if (last_limit < var->var_part[i].offset)
 	{
 	  complete = false;
 	  break;
 	}
-      last_limit
-	= (var->var_part[i].offset
-	   + GET_MODE_SIZE (GET_MODE (var->var_part[i].loc_chain->loc)));
+      else if (last_limit > var->var_part[i].offset)
+	continue;
+      offsets[n_var_parts] = var->var_part[i].offset;
+      loc[n_var_parts] = var->var_part[i].loc_chain->loc;
+      mode = GET_MODE (loc[n_var_parts]);
+      last_limit = offsets[n_var_parts] + GET_MODE_SIZE (mode);
+
+      /* Attempt to merge adjacent registers or memory.  */
+      wider_mode = GET_MODE_WIDER_MODE (mode);
+      for (j = i + 1; j < var->n_var_parts; j++)
+	if (last_limit <= var->var_part[j].offset)
+	  break;
+      if (j < var->n_var_parts
+	  && wider_mode != VOIDmode
+	  && GET_CODE (loc[n_var_parts])
+	     == GET_CODE (var->var_part[j].loc_chain->loc)
+	  && mode == GET_MODE (var->var_part[j].loc_chain->loc)
+	  && last_limit == var->var_part[j].offset)
+	{
+	  rtx new_loc = NULL;
+	  rtx loc2 = var->var_part[j].loc_chain->loc;
+
+	  if (REG_P (loc[n_var_parts])
+	      && HARD_REGNO_NREGS (REGNO (loc[n_var_parts]), mode) * 2
+		 == HARD_REGNO_NREGS (REGNO (loc[n_var_parts]), wider_mode)
+	      && REGNO (loc[n_var_parts])
+		 + HARD_REGNO_NREGS (REGNO (loc[n_var_parts]), mode)
+		 == REGNO (loc2))
+	    {
+	      if (! WORDS_BIG_ENDIAN && ! BYTES_BIG_ENDIAN)
+		new_loc = simplify_subreg (wider_mode, loc[n_var_parts],
+					   mode, 0);
+	      else if (WORDS_BIG_ENDIAN && BYTES_BIG_ENDIAN)
+		new_loc = simplify_subreg (wider_mode, loc2, mode, 0);
+	      if (new_loc)
+		{
+		  if (!REG_P (new_loc)
+		      || REGNO (new_loc) != REGNO (loc[n_var_parts]))
+		    new_loc = NULL;
+		  else
+		    REG_ATTRS (new_loc) = REG_ATTRS (loc[n_var_parts]);
+		}
+	    }
+	  else if (GET_CODE (loc[n_var_parts]) == MEM
+		   && GET_CODE (XEXP (loc2, 0)) == PLUS
+		   && GET_CODE (XEXP (XEXP (loc2, 0), 0)) == REG
+		   && GET_CODE (XEXP (XEXP (loc2, 0), 1)) == CONST_INT)
+	    {
+	      if ((GET_CODE (XEXP (loc[n_var_parts], 0)) == REG
+		   && rtx_equal_p (XEXP (loc[n_var_parts], 0),
+				   XEXP (XEXP (loc2, 0), 0))
+		   && INTVAL (XEXP (XEXP (loc2, 0), 1))
+		      == GET_MODE_SIZE (mode))
+		  || (GET_CODE (XEXP (loc[n_var_parts], 0)) == PLUS
+		      && GET_CODE (XEXP (XEXP (loc[n_var_parts], 0), 1))
+			 == CONST_INT
+		      && rtx_equal_p (XEXP (XEXP (loc[n_var_parts], 0), 0),
+				      XEXP (XEXP (loc2, 0), 0))
+		      && INTVAL (XEXP (XEXP (loc[n_var_parts], 0), 1))
+			 + GET_MODE_SIZE (mode)
+			 == INTVAL (XEXP (XEXP (loc2, 0), 1))))
+		new_loc = adjust_address_nv (loc[n_var_parts],
+					     wider_mode, 0);
+	    }
+
+	  if (new_loc)
+	    {
+	      loc[n_var_parts] = new_loc;
+	      mode = wider_mode;
+	      last_limit = offsets[n_var_parts] + GET_MODE_SIZE (mode);
+	      i = j;
+	    }
+	}
+      ++n_var_parts;
     }
   type_size_unit = TYPE_SIZE_UNIT (TREE_TYPE (var->decl));
   if ((unsigned HOST_WIDE_INT) last_limit < TREE_INT_CST_LOW (type_size_unit))
@@ -2222,26 +2300,24 @@ emit_note_insn_var_location (void **varp
       NOTE_VAR_LOCATION (note) = gen_rtx_VAR_LOCATION (VOIDmode, var->decl,
 						       NULL_RTX);
     }
-  else if (var->n_var_parts == 1)
+  else if (n_var_parts == 1)
     {
       rtx expr_list
-	= gen_rtx_EXPR_LIST (VOIDmode,
-			     var->var_part[0].loc_chain->loc,
-			     GEN_INT (var->var_part[0].offset));
+	= gen_rtx_EXPR_LIST (VOIDmode, loc[0], GEN_INT (offsets[0]));
 
       NOTE_VAR_LOCATION (note) = gen_rtx_VAR_LOCATION (VOIDmode, var->decl,
 						       expr_list);
     }
-  else if (var->n_var_parts)
+  else if (n_var_parts)
     {
-      rtx argp[MAX_VAR_PARTS];
       rtx parallel;
 
-      for (i = 0; i < var->n_var_parts; i++)
-	argp[i] = gen_rtx_EXPR_LIST (VOIDmode, var->var_part[i].loc_chain->loc,
-				     GEN_INT (var->var_part[i].offset));
+      for (i = 0; i < n_var_parts; i++)
+	loc[i]
+	  = gen_rtx_EXPR_LIST (VOIDmode, loc[i], GEN_INT (offsets[i]));
+
       parallel = gen_rtx_PARALLEL (VOIDmode,
-				   gen_rtvec_v (var->n_var_parts, argp));
+				   gen_rtvec_v (n_var_parts, loc));
       NOTE_VAR_LOCATION (note) = gen_rtx_VAR_LOCATION (VOIDmode, var->decl,
 						       parallel);
     }
--- gcc/Makefile.in.jj	2005-06-07 00:39:11.000000000 +0200
+++ gcc/Makefile.in	2005-06-07 00:55:12.000000000 +0200
@@ -1693,7 +1693,8 @@ df.o : df.c $(CONFIG_H) $(SYSTEM_H) core
    $(BASIC_BLOCK_H) df.h $(FIBHEAP_H)
 var-tracking.o : var-tracking.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(TREE_H) hard-reg-set.h insn-config.h reload.h flags.h \
-   $(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H)
+   $(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H) \
+   $(REGS_H) $(EXPR_H)
 conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \
    $(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
 profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \

gcc34-vsb-stack.patch:
 Makefile.in                     |    3 
 c-pragma.c                      |   22 ++--
 doc/invoke.texi                 |    4 
 testsuite/gcc.dg/visibility-d.c |  205 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 222 insertions(+), 12 deletions(-)

--- NEW FILE gcc34-vsb-stack.patch ---
2005-07-22  Jakub Jelinek  <jakub at redhat.com>

	PR middle-end/20303
	* c-pragma.c: Include varray.h.
	(visibility_stack): New variable.
	(handle_pragma_visibility): Use VARRAY.
	* Makefile.in (c-pragma.o): Depend on varray.h.
	* doc/invoke.texi: Remove the nested visibility push limit.

	* gcc.dg/visibility-d.c: New test.

--- gcc/Makefile.in.jj	2005-07-21 15:31:14.000000000 +0200
+++ gcc/Makefile.in	2005-07-22 11:20:35.000000000 +0200
@@ -1345,7 +1345,8 @@ c-aux-info.o : c-aux-info.c  $(CONFIG_H)
 c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
     flags.h toplev.h $(C_COMMON_H) real.h
 c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
-    function.h c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) gt-c-pragma.h
+    function.h c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) \
+    varray.h gt-c-pragma.h
 graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h flags.h output.h \
     $(RTL_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
 sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
--- gcc/doc/invoke.texi.jj	2005-06-07 00:39:11.000000000 +0200
+++ gcc/doc/invoke.texi	2005-07-22 12:03:55.000000000 +0200
@@ -11418,8 +11418,8 @@ For those adding visibility support to e
 @samp{#pragma GCC visibility} of use. This works by you enclosing
 the declarations you wish to set visibility for with (for example)
 @samp{#pragma GCC visibility push(hidden)} and
- at samp{#pragma GCC visibility pop}. These can be nested up to sixteen
-times. Bear in mind that symbol visibility should be viewed @strong{as
+ at samp{#pragma GCC visibility pop}.
+Bear in mind that symbol visibility should be viewed @strong{as
 part of the API interface contract} and thus all new code should
 always specify visibility when it is not the default ie; declarations
 only for use within the local DSO should @strong{always} be marked explicitly
--- gcc/c-pragma.c.jj	2004-09-01 18:16:57.000000000 +0200
+++ gcc/c-pragma.c	2005-07-22 11:42:24.000000000 +0200
@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - S
 #include "c-common.h"
 #include "output.h"
 #include "tm_p.h"
+#include "varray.h"
 
 #define GCC_BAD(msgid) do { warning (msgid); return; } while (0)
 #define GCC_BAD2(msgid, arg) do { warning (msgid, arg); return; } while (0)
@@ -483,6 +484,8 @@ maybe_apply_renaming_pragma (tree decl, 
 
 
 #ifdef HANDLE_PRAGMA_VISIBILITY
+static GTY(()) varray_type visibility_stack;
+
 static void handle_pragma_visibility (cpp_reader *);
 
 /* Sets the default visibility for symbols to something other than that
@@ -490,11 +493,13 @@ static void handle_pragma_visibility (cp
 static void
 handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED)
 { /* Form is #pragma GCC visibility push(hidden)|pop */
-  static int visstack [16], visidx;
   tree x;
   enum cpp_ttype token;
   enum { bad, push, pop } action = bad;
  
+  if (!visibility_stack)
+    VARRAY_INT_INIT (visibility_stack, 32, "visibility_stack");
+
   token = c_lex (&x);
   if (token == CPP_NAME)
     {
@@ -510,14 +515,17 @@ handle_pragma_visibility (cpp_reader *du
     {
       if (pop == action)
         {
-          if (!visidx)
+          int visidx = VARRAY_ACTIVE_SIZE (visibility_stack);
+
+          if (visidx <= 0)
             {
               GCC_BAD ("No matching push for '#pragma GCC visibility pop'");
             }
           else
             {
-              default_visibility = visstack[--visidx];
-              visibility_options.inpragma = (visidx>0);
+              default_visibility = VARRAY_INT (visibility_stack, visidx - 1);
+              VARRAY_POP (visibility_stack);
+              visibility_options.inpragma = (visidx>1);
             }
         }
       else
@@ -529,14 +537,10 @@ handle_pragma_visibility (cpp_reader *du
             {
               GCC_BAD ("malformed #pragma GCC visibility push");
             }
-          else if (visidx >= 16)
-            {
-              GCC_BAD ("No more than sixteen #pragma GCC visibility pushes allowed at once");
-            }
           else
             {
               const char *str = IDENTIFIER_POINTER (x);
-              visstack[visidx++] = default_visibility;
+              VARRAY_PUSH_INT (visibility_stack, (int) default_visibility);
               if (!strcmp (str, "default"))
                 default_visibility = VISIBILITY_DEFAULT;
               else if (!strcmp (str, "internal"))
--- gcc/testsuite/gcc.dg/visibility-d.c.jj	2005-07-22 11:28:44.000000000 +0200
+++ gcc/testsuite/gcc.dg/visibility-d.c	2005-07-22 11:59:35.000000000 +0200
@@ -0,0 +1,205 @@
+/* PR middle-end/20303 */
+/* Test nesting of #pragma GCC visibility. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo00" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo01" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo02" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo03" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo04" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo05" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo06" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo07" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo08" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo09" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo10" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo11" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo12" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo13" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo14" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo15" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo16" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo17" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo18" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo19" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo20" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo21" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo22" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo23" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo24" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo25" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo26" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo27" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo28" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo29" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo30" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo31" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo32" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo33" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo34" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo35" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo36" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo37" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo38" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo39" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo40" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo41" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo42" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo43" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo44" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo45" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo46" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo47" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo48" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo49" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo50" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo51" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo52" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo53" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo54" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo55" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo56" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo57" } } */
+/* { dg-final { scan-assembler-not "\\.hidden\[^\\n\]foo58" } } */
+/* { dg-final { scan-assembler "\\.hidden\[^\\n\]foo59" } } */
+
+#pragma GCC visibility push(default)
+void foo00();
+#pragma GCC visibility push(hidden)
+void foo01();
+#pragma GCC visibility push(default)
+void foo02();
+#pragma GCC visibility push(hidden)
+void foo03();
+#pragma GCC visibility push(default)
+void foo04();
+#pragma GCC visibility push(default)
+void foo05();
+#pragma GCC visibility push(default)
+void foo06();
+#pragma GCC visibility push(hidden)
+void foo07();
+#pragma GCC visibility push(default)
+void foo08();
+#pragma GCC visibility push(hidden)
+void foo09();
+#pragma GCC visibility push(default)
+void foo10();
+#pragma GCC visibility push(hidden)
+void foo11();
+#pragma GCC visibility push(hidden)
+void foo12();
+#pragma GCC visibility push(hidden)
+void foo13();
+#pragma GCC visibility push(default)
+void foo14();
+#pragma GCC visibility push(hidden)
+void foo15();
+#pragma GCC visibility push(default)
+void foo16();
+#pragma GCC visibility push(hidden)
+void foo17();
+#pragma GCC visibility push(default)
+void foo18();
+#pragma GCC visibility push(hidden)
+void foo19();
+#pragma GCC visibility push(default)
+void foo20();
+#pragma GCC visibility push(hidden)
+void foo21();
+#pragma GCC visibility push(default)
+void foo22();
+#pragma GCC visibility push(hidden)
+void foo23();
+#pragma GCC visibility push(default)
+void foo24();
+#pragma GCC visibility push(hidden)
+void foo25();
+#pragma GCC visibility push(default)
+void foo26();
+#pragma GCC visibility push(hidden)
+void foo27();
+#pragma GCC visibility push(default)
+void foo28();
+#pragma GCC visibility push(hidden)
+void foo29();
+#pragma GCC visibility pop
+void foo30();
+#pragma GCC visibility pop
+void foo31();
+#pragma GCC visibility pop
+void foo32();
+#pragma GCC visibility pop
+void foo33();
+#pragma GCC visibility pop
+void foo34();
+#pragma GCC visibility pop
+void foo35();
+#pragma GCC visibility pop
+void foo36();
+#pragma GCC visibility pop
+void foo37();
+#pragma GCC visibility pop
+void foo38();
+#pragma GCC visibility pop
+void foo39();
+#pragma GCC visibility pop
+void foo40();
+#pragma GCC visibility pop
+void foo41();
+#pragma GCC visibility pop
+void foo42();
+#pragma GCC visibility pop
+void foo43();
+#pragma GCC visibility pop
+void foo44();
+#pragma GCC visibility pop
+void foo45();
+#pragma GCC visibility pop
+void foo46();
+#pragma GCC visibility pop
+void foo47();
+#pragma GCC visibility pop
+void foo48();
+#pragma GCC visibility pop
+void foo49();
+#pragma GCC visibility pop
+void foo50();
+#pragma GCC visibility pop
+void foo51();
+#pragma GCC visibility pop
+void foo52();
+#pragma GCC visibility pop
+void foo53();
+#pragma GCC visibility pop
+void foo54();
+#pragma GCC visibility pop
+void foo55();
+#pragma GCC visibility pop
+void foo56();
+#pragma GCC visibility pop
+void foo57();
+#pragma GCC visibility pop
+void foo58();
+#pragma GCC visibility push (hidden)
+void foo59();
+#pragma GCC visibility pop
+#pragma GCC visibility pop
+
+#define D(N) \
+void foo##N##0() { } \
+void foo##N##1() { } \
+void foo##N##2() { } \
+void foo##N##3() { } \
+void foo##N##4() { } \
+void foo##N##5() { } \
+void foo##N##6() { } \
+void foo##N##7() { } \
+void foo##N##8() { } \
+void foo##N##9() { }
+D(0)
+D(1)
+D(2)
+D(3)
+D(4)
+D(5)


Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/gcc/FC-3/.cvsignore,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- .cvsignore	14 Mar 2005 17:50:24 -0000	1.60
+++ .cvsignore	22 Jul 2005 12:21:40 -0000	1.61
@@ -1 +1 @@
-gcc-3.4.3-20050228.tar.bz2
+gcc-3.4.4-20050721.tar.bz2


Index: gcc34.spec
===================================================================
RCS file: /cvs/dist/rpms/gcc/FC-3/gcc34.spec,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- gcc34.spec	14 Mar 2005 17:50:24 -0000	1.31
+++ gcc34.spec	22 Jul 2005 12:21:40 -0000	1.32
@@ -1,6 +1,6 @@
-%define DATE 20050228
+%define DATE 20050721
 %define gcc_version 3.4.3
-%define gcc_release 22.fc3
+%define gcc_release 2
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %ifarch %{ix86} alpha ia64 ppc x86_64 s390 sparc sparc64
@@ -24,8 +24,11 @@
 %define jpackage_priority 100
 Summary: Various compilers (C, C++, Objective-C, Java, ...)
 Name: gcc
-Version: %{gcc_version}
-Release: %{gcc_release}
+Version: 3.4.4
+Release: 2.fc3
+%if "%{version}" != "%{gcc_version}"
+%define gcc_provides 3.4.3-26
+%endif
 License: GPL
 Group: Development/Languages
 Source0: gcc-%{version}-%{DATE}.tar.bz2
@@ -61,8 +64,8 @@
 Obsoletes: egcs
 Obsoletes: gcc-chill
 %if !%{build_ada}
-Obsoletes: gcc-gnat < %{version}-%{release}
-Obsoletes: libgnat < %{version}-%{release}
+Obsoletes: gcc-gnat < %{gcc_version}
+Obsoletes: libgnat < %{gcc_version}
 %endif
 %ifarch sparc sparc64
 Obsoletes: egcs64
@@ -71,6 +74,9 @@
 Provides: gcc34
 Prereq: /sbin/install-info
 AutoReq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc = %{gcc_provides}
+%endif
 
 Patch1: gcc34-multi32-hack.patch
 Patch2: gcc34-ice-hack.patch
@@ -79,8 +85,14 @@
 Patch5: gcc34-java-nomulti.patch
 Patch6: gcc34-gnuc-rh-release.patch
 Patch7: gcc34-pr16104.patch
-Patch8: gcc34-c++-pr19916.patch
-Patch9: gcc34-c++-redecl.patch
+Patch8: gcc34-var-tracking-fix.patch
+Patch9: gcc34-i386-movsi-insv.patch
+Patch10: gcc34-pr18925.patch
+Patch11: gcc34-pr14084.patch
+Patch12: gcc34-hashtab-recursion.patch
+Patch13: gcc34-pr20191.patch
+Patch14: gcc34-pr21955.patch
+Patch15: gcc34-vsb-stack.patch
 
 %define _gnu %{nil}
 %ifarch sparc
@@ -101,6 +113,9 @@
 Summary: GCC version 3.4 shared support library
 Group: System Environment/Libraries
 Autoreq: false
+%if "%{version}" != "%{gcc_version}"
+Provides: libgcc = %{gcc_provides}
+%endif
 
 %description -n libgcc
 This package contains GCC shared support library which is needed
@@ -116,6 +131,9 @@
 Obsoletes: gcc34-c++
 Provides: gcc34-c++
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-c++ = %{gcc_provides}
+%endif
 
 %description c++
 This package adds C++ support to the GNU Compiler Collection.
@@ -129,6 +147,9 @@
 Obsoletes: libstdc++34
 Provides: libstdc++34
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libstdc++ = %{gcc_provides}
+%endif
 
 %description -n libstdc++
 The libstdc++ package contains a rewritten standard compliant GCC Standard
@@ -142,6 +163,9 @@
 Obsoletes: libstdc++34-devel
 Provides: libstdc++34-devel
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libstdc++-devel = %{gcc_provides}
+%endif
 
 %description -n libstdc++-devel
 This is the GNU implementation of the standard C++ libraries.  This
@@ -155,6 +179,9 @@
 Requires: libobjc = %{version}-%{release}
 Obsoletes: gcc3-objc
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-objc = %{gcc_provides}
+%endif
 
 %description objc
 gcc-objc provides Objective-C support for the GCC.
@@ -165,6 +192,9 @@
 Summary: Objective-C runtime
 Group: System Environment/Libraries
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libobjc = %{gcc_provides}
+%endif
 
 %description -n libobjc
 This package contains Objective-C shared library which is needed to run
@@ -178,6 +208,9 @@
 Prereq: /sbin/install-info
 Obsoletes: gcc3-g77
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-g77 = %{gcc_provides}
+%endif
 
 %description g77
 The gcc-g77 package provides support for compiling Fortran 77
@@ -187,6 +220,9 @@
 Summary: Fortran 77 runtime
 Group: System Environment/Libraries
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libf2c = %{gcc_provides}
+%endif
 
 %description -n libf2c
 This package contains Fortran 77 shared library which is needed to run
@@ -202,6 +238,9 @@
 Provides: gcc34-java
 Prereq: /sbin/install-info
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-java = %{gcc_provides}
+%endif
 
 %description java
 This package adds support for compiling Java(tm) programs and
@@ -225,6 +264,9 @@
 # Kaffe includes jar too
 Conflicts: kaffe
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libgcj = %{gcc_provides}
+%endif
 
 %description -n libgcj
 The Java(tm) runtime library. You will need this package to run your Java
@@ -238,6 +280,9 @@
 Obsoletes: libgcj34-devel
 Provides: libgcj34-devel
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libgcj-devel = %{gcc_provides}
+%endif
 
 %description -n libgcj-devel
 The Java(tm) static libraries and C header files. You will need this
@@ -248,6 +293,9 @@
 Group: Development/Languages
 Requires: gcc = %{version}-%{release}, %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-sparc32 = %{gcc_provides}
+%endif
 
 %description sparc32
 This package contains the GNU C compiler which only supports generating
@@ -261,6 +309,9 @@
 Requires: gcc-c++ = %{version}-%{release}, gcc-sparc32 = %{version}-%{release}
 Requires: %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-c++-sparc32 = %{gcc_provides}
+%endif
 
 %description c++-sparc32
 This package contains the GNU C++ compiler which only supports generating
@@ -273,6 +324,9 @@
 Group: Development/Languages
 Requires: gcc = %{version}-%{release}, %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-ppc32 = %{gcc_provides}
+%endif
 
 %description ppc32
 This package contains the GNU C compiler which only supports generating
@@ -286,6 +340,9 @@
 Requires: gcc-c++ = %{version}-%{release}, gcc-ppc32 = %{version}-%{release}
 Requires: %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-c++-ppc32 = %{gcc_provides}
+%endif
 
 %description c++-ppc32
 This package contains the GNU C++ compiler which only supports generating
@@ -301,6 +358,9 @@
 Obsoletes: gnupro
 %endif
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: cpp = %{gcc_provides}
+%endif
 
 %description -n cpp
 Cpp is the GNU C-Compatible Compiler Preprocessor.
@@ -331,6 +391,9 @@
 Obsoletes: gnat-devel, gcc3-gnat
 Prereq: /sbin/install-info
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: gcc-gnat = %{gcc_provides}
+%endif
 
 %description gnat
 GNAT is a GNU Ada 95 front-end to GCC. This package includes development tools,
@@ -341,6 +404,9 @@
 Group: System Environment/Libraries
 Obsoletes: gnat libgnat3
 Autoreq: true
+%if "%{version}" != "%{gcc_version}"
+Provides: libgnat = %{gcc_provides}
+%endif
 
 %description -n libgnat
 GNAT is a GNU Ada 95 front-end to GCC. This package includes shared libraries,
@@ -361,11 +427,17 @@
 %patch5 -p0 -b .java-nomulti~
 %patch6 -p0 -b .gnuc-rh-release~
 %patch7 -p0 -b .pr16104~
-%patch8 -p0 -b .c++-pr19916~
-%patch9 -p0 -b .c++-redecl~
+%patch8 -p0 -b .var-tracking-fix~
+%patch9 -p0 -b .i386-movsi-insv~
+%patch10 -p0 -b .pr18925~
+%patch11 -p0 -b .pr14084~
+%patch12 -p0 -b .hashtab-recursion~
+%patch13 -p0 -b .pr20191~
+%patch14 -p0 -b .pr21955~
+%patch15 -p0 -b .vsb-stack~
 
-perl -pi -e 's/3\.4\.4/3.4.3/' gcc/version.c
-perl -pi -e 's/"%{gcc_version}"/"%{gcc_version} \(release\)"/' gcc/version.c
+perl -pi -e 's/3\.4\.5/3.4.4/' gcc/version.c
+perl -pi -e 's/"%{version}"/"%{version} \(release\)"/' gcc/version.c
 perl -pi -e 's/\((prerelease|experimental|release|Red Hat[^)]*)\)/\(Red Hat %{version}-%{gcc_release}\)/' gcc/version.c
 
 # Misdesign in libstdc++
@@ -556,8 +628,8 @@
 chmod 644 $RPM_BUILD_ROOT%{_infodir}/gnat*
 %endif
 
-FULLPATH=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
-FULLEPATH=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+FULLPATH=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+FULLEPATH=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
 
 cp -a %{gcc_target_platform}/libiberty/c++filt $RPM_BUILD_ROOT%{_prefix}/bin/c++filt
 chmod 755 $RPM_BUILD_ROOT%{_prefix}/bin/c++filt
@@ -574,7 +646,7 @@
 cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`"
 for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do
   if ! diff -up $cxxconfig $i; then
-    cat > $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/c++config.h <<EOF
+    cat > $RPM_BUILD_ROOT%{_prefix}/include/c++/%{version}/%{gcc_target_platform}/bits/c++config.h <<EOF
 #ifndef _CPP_CPPCONFIG_WRAPPER
 #define _CPP_CPPCONFIG_WRAPPER 1
 #include <bits/wordsize.h>
@@ -599,10 +671,10 @@
 
 %ifarch sparc ppc
 # Install the sparc/ppc -m32 only compilers
-FULLPATH32=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}
-FULLEPATH32=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}
+FULLPATH32=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{_target_platform}/%{version}
+FULLEPATH32=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
 mkdir -p $FULLPATH32 $FULLEPATH32
-ln -sf %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include \
+ln -sf %{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}/include \
   $FULLPATH32/
 install -m 755 gcc32/gcc/cc1 $FULLEPATH32/
 install -m 755 gcc32/gcc/cc1plus $FULLEPATH32/
@@ -610,8 +682,8 @@
   $RPM_BUILD_ROOT%{_prefix}/bin/%{_target_platform}-gcc
 %endif
 %ifarch sparc ppc
-cp -al $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform} \
-  $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{_target_platform}
+cp -al $RPM_BUILD_ROOT%{_prefix}/include/c++/%{version}/%{gcc_target_platform} \
+  $RPM_BUILD_ROOT%{_prefix}/include/c++/%{version}/%{_target_platform}
 %endif
 %ifarch sparc64
 ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \
@@ -649,9 +721,9 @@
 fi
 
 mkdir -p $RPM_BUILD_ROOT/%{_lib}
-mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcc_s.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1
-chmod 755 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1
-ln -sf libgcc_s-%{gcc_version}-%{DATE}.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s.so.1
+mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcc_s.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{version}-%{DATE}.so.1
+chmod 755 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{version}-%{DATE}.so.1
+ln -sf libgcc_s-%{version}-%{DATE}.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s.so.1
 ln -sf /%{_lib}/libgcc_s.so.1 $FULLPATH/libgcc_s.so
 %ifarch sparc ppc
 ln -sf /lib64/libgcc_s.so.1 $FULLPATH/libgcc_s_64.so
@@ -676,7 +748,8 @@
 pushd $FULLPATH
 if [ "%{_lib}" = "lib" ]; then
 ln -sf ../../../libobjc.so.1 libobjc.so
-ln -sf ../../../libstdc++.so.6.* libstdc++.so
+ln -sf ../../../libstdc++.so.6.* libstdc++_shared.so
+echo 'GROUP ( -lstdc++_nonshared -lstdc++_shared )' > libstdc++.so
 %if %{build_java}
 ln -sf ../../../libgcj.so.5.* libgcj.so
 ln -sf ../../../lib-gnu-java-awt-peer-gtk.so.5.* lib-gnu-java-awt-peer-gtk.so
@@ -694,7 +767,8 @@
 %endif
 else
 ln -sf ../../../../%{_lib}/libobjc.so.1 libobjc.so
-ln -sf ../../../../%{_lib}/libstdc++.so.6.* libstdc++.so
+ln -sf ../../../../%{_lib}/libstdc++.so.6.* libstdc++_shared.so
+echo 'GROUP ( -lstdc++_nonshared -lstdc++_shared )' > libstdc++.so
 %if %{build_java}
 ln -sf ../../../../%{_lib}/libgcj.so.5.* libgcj.so
 ln -sf ../../../../%{_lib}/lib-gnu-java-awt-peer-gtk.so.5.* lib-gnu-java-awt-peer-gtk.so
@@ -713,13 +787,15 @@
 fi
 mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libstdc++.*a $FULLLPATH/
 mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libsupc++.*a .
+mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libstdc++_nonshared.*a .
 mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libg2c.*a .
 mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libfrtbegin.*a .
 mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.*a .
 
 %ifarch sparc ppc
 ln -sf ../../../../../lib64/libobjc.so.1 64/libobjc.so
-ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++.so
+ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++_shared.so
+echo 'GROUP ( -lstdc++_nonshared -lstdc++_shared )' > 64/libstdc++.so
 if [ "%{build_java}" -gt 0 ]; then
 ln -sf ../`echo ../../../../lib/libgcj.so.5.* | sed s~/lib/~/lib64/~` 64/libgcj.so
 ln -sf ../`echo ../../../../lib/lib-gnu-java-awt-peer-gtk.so.5.* | sed s~/lib/~/lib64/~` 64/lib-gnu-java-awt-peer-gtk.so
@@ -728,6 +804,7 @@
 fi
 ln -sf ../`echo ../../../../lib/libg2c.so.0.* | sed s~/lib/~/lib64/~` 64/libg2c.so
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libsupc++.*a 64/
+mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libstdc++_nonshared.*a 64/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libg2c.*a 64/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libfrtbegin.*a 64/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libobjc.*a 64/
@@ -748,7 +825,8 @@
 %ifarch %{multilib_64_archs}
 mkdir -p 32
 ln -sf ../../../../libobjc.so.1 32/libobjc.so
-ln -sf ../`echo ../../../../lib64/libstdc++.so.6.* | sed s~/../lib64/~/~` 32/libstdc++.so
+ln -sf ../`echo ../../../../lib64/libstdc++.so.6.* | sed s~/../lib64/~/~` 32/libstdc++_shared.so
+echo 'GROUP ( -lstdc++_nonshared -lstdc++_shared )' > 32/libstdc++.so
 if [ "%{build_java}" -gt 0 ]; then
 ln -sf ../`echo ../../../../lib64/libgcj.so.5.* | sed s~/../lib64/~/~` 32/libgcj.so
 ln -sf ../`echo ../../../../lib64/lib-gnu-java-awt-peer-gtk.so.5.* | sed s~/../lib64/~/~` 32/lib-gnu-java-awt-peer-gtk.so
@@ -757,6 +835,7 @@
 fi
 ln -sf ../`echo ../../../../lib64/libg2c.so.0.* | sed s~/../lib64/~/~` 32/libg2c.so
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libsupc++.*a 32/
+mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libstdc++_nonshared.*a 32/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libg2c.*a 32/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libfrtbegin.*a 32/
 mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libobjc.*a 32/
@@ -776,12 +855,12 @@
 fi
 %else
 %ifarch %{multilib_64_archs}
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libstdc++.a 32/libstdc++.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{version}/libstdc++.a 32/libstdc++.a
 if [ "%{build_java}" -gt 0 ]; then
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcj.a 32/libgcj.a
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/lib-gnu-java-awt-peer-gtk.a 32/lib-gnu-java-awt-peer-gtk.a
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/lib-org-w3c-dom.a 32/lib-org-w3c-dom.a
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/lib-org-xml-sax.a 32/lib-org-xml-sax.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{version}/libgcj.a 32/libgcj.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{version}/lib-gnu-java-awt-peer-gtk.a 32/lib-gnu-java-awt-peer-gtk.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{version}/lib-org-w3c-dom.a 32/lib-org-w3c-dom.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{version}/lib-org-xml-sax.a 32/lib-org-xml-sax.a
 fi
 %endif
 %endif
@@ -844,6 +923,23 @@
 gcc -static -Os %{SOURCE1} -o $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade
 strip $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade
 
+%if "%{version}" != "%{gcc_version}"
+mv -f $RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/{%{version},%{gcc_version}}
+ln -sf %{gcc_version} $RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+mv -f $RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/{%{version},%{gcc_version}}
+ln -sf %{gcc_version} $RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+mv -f $RPM_BUILD_ROOT%{_prefix}/include/c++/{%{version},%{gcc_version}}
+ln -sf %{gcc_version} $RPM_BUILD_ROOT%{_prefix}/include/c++/%{version}
+mv -f $RPM_BUILD_ROOT%{_prefix}/share/java/libgcj-{%{version},%{gcc_version}}.jar
+ln -sf libgcj-%{gcc_version}.jar $RPM_BUILD_ROOT%{_prefix}/share/java/libgcj-%{version}.jar
+%ifarch sparc ppc
+mv -f $RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{_target_platform}/{%{version},%{gcc_version}}
+ln -sf %{gcc_version} $RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
+mv -f $RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{_target_platform}/{%{version},%{gcc_version}}
+ln -sf %{gcc_version} $RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{_target_platform}/%{version}
+%endif
+%endif
+
 cd ..
 %find_lang %{name}
 
@@ -983,9 +1079,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stddef.h
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdarg.h
@@ -1047,11 +1149,14 @@
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1
 
 %files -n libgcc
 %defattr(-,root,root)
-/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1
+/%{_lib}/libgcc_s-%{version}-%{DATE}.so.1
 /%{_lib}/libgcc_s.so.1
 %{_prefix}/sbin/libgcc_post_upgrade
 %doc gcc/COPYING.LIB
@@ -1066,24 +1171,36 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1plus
 %ifarch sparc ppc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++_shared.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++_nonshared.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libsupc++.a
 %endif
 %ifarch %{multilib_64_archs}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++_shared.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++_nonshared.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libsupc++.a
 %endif
 %ifarch sparc ppc %{multilib_64_archs}
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++_shared.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++_nonshared.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a
 %endif
 %ifarch sparc sparc64 ppc ppc64
@@ -1101,6 +1218,9 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %ifarch sparc ppc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libstdc++.a
@@ -1114,6 +1234,8 @@
 %endif
 %ifnarch sparc ppc %{multilib_64_archs}
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++_shared.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++_nonshared.a
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a
 %endif
 %doc libstdc++-v3/ChangeLog* libstdc++-v3/README* libstdc++-v3/docs/html/
@@ -1123,9 +1245,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/objc
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1obj
@@ -1157,9 +1285,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/f771
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libfrtbegin.a
@@ -1199,9 +1333,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jc1
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jvgenmain
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.so
@@ -1253,6 +1393,9 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.spec
 #%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/gc*.h
@@ -1276,9 +1419,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}
 %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
 %dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{version}
+%endif
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude
 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/gnat1
@@ -1297,9 +1446,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{_target_platform}
 %dir %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{_target_platform}
 %dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1
 %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}/include
 
@@ -1308,6 +1463,9 @@
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{_target_platform}
 %dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1plus
 %endif
 
@@ -1317,9 +1475,15 @@
 %dir %{_prefix}/lib/gcc
 %dir %{_prefix}/lib/gcc/%{_target_platform}
 %dir %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/lib/gcc/%{_target_platform}/%{version}
+%endif
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{_target_platform}
 %dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1
 %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}/include
 
@@ -1328,12 +1492,77 @@
 %dir %{_prefix}/libexec/gcc
 %dir %{_prefix}/libexec/gcc/%{_target_platform}
 %dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}
+%if "%{version}" != "%{gcc_version}"
+%{_prefix}/libexec/gcc/%{_target_platform}/%{version}
+%endif
 %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1plus
 %endif
 
 %changelog
-* Mon Mar 14 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.3-22.fc3
+* Fri Jul 22 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.4-2
+- update from gcc-3_4-branch
+  - PRs c++/10611, c++/19608, c++/19884, c++/20563, c++/20789, c++/21336,
+	c++/21853, c++/21903, c++/21987, c/22308, libstdc++/21286,
+	rtl-optimization/22167, target/19933, target/20301, target/21888,
+	target/21889, target/22083
+  - fix -march=i386 -masm=intel -fpic (#162585)
+- on ppc64 and s390x, change the obsoletes for gcc-gnat and libgnat
+  to < %{gcc_version}
+- fix visibility handling of static class members
+  (Mark Mitchell, #159197, PR c++/18925)
+- fix some -fvar-tracking bugs that were causing bogus DW_OP_piece ops
+- fix -fvar-tracking on big-endian targets (Josef Zlomek,
+  PR middle-end/14084)
+- avoid recursive use of varasm hash tables (#157308)
+- on ppc accept CTR-to-CTR copy in mov[sd]f_hardfloat patterns
+  (Dale Johannesen, Janis Johnson, #160815, IT#74566,
+   PRs target/20191, target/22081)
+- remove limit of 16 nested GCC visibility pragmas (PR middle-end/20303)
+- fix stringbuf in_avail() (Benjamin Kosnik, #159408, IT#72781)
+
+* Thu May 26 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.4-1
+- update from gcc-3_4-branch
+  - GCC 3.4.4 release
+    - PRs middle-end/21709, c++/21768
+  - fix reg-stack ICE (#158407, PR target/21716)
+  - fix ppc64 libgcj (Andrew Haley, #154684, #142611)
+- add provides, so that packages requiring gcc = 3.4.3 or
+  libstdc++-devel = 3.4.3 etc. can be satisfied
+- use 3.4.3 directories and make 3.4.4 just a symlink,
+  so that other packages using the 3.4.3 directories are satisfied
+  and we don't try to replace a directory with a symlink (which rpm doesn't
+  like)
+
+* Tue May 10 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.3-25
+- update from gcc-3_4-branch
+  - PRs c++/21427, debug/16676, libffi/21285, target/16925, target/19051,
+	target/21416
+- don't enable -fvar-tracking on ia64 for -O0 or -g0 by default
+- fix warnings in <limits> when compiling with GCC 4 (Mark Mitchell, #157174)
+- fix warnings in <locale_facets.tcc> (#157190, PR libstdc++/16678)
+- fix output of i?86 movb $cst, %ah etc. instructions (#154116)
+- fix a regression introduced by PR target/14981 backport
+- fix VEC_SELECT handling in the combiner (PR rtl-optimization/21239)
+- fix i?86 address canonicalization (PR target/21297)
+
+* Sat May  7 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.3-24
+- -fvar-tracking support (Josef Zlomek, Daniel Berlin)
+
+* Fri May  6 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.3-23
+- update from gcc-3_4-branch
+  - PRs bootstrap/20633, c++/18464, c++/18644, c++/19034,
+	c++/19311, c++/19312, c++/19991, c++/20142, c++/20147, c++/20147,
+	c++/20240, c++/20333, c++/20679, c++/20995, c++/21025, c/11459,
+	c/18502, c/20740, c/21213, libstdc++/21035, libstdc++/21131,
+	middle-end/19225, middle-end/20364, rtl-optimization/19683,
+	target/14981, target/15491, target/17822, target/17824, target/18251,
+	target/18551, target/19819, target/20277, target/20288, target/20611,
+	target/20670, target/21098
+  - make libgcov symbols hidden (#162930, IT#72501, PR middle-end/19985)
 - add Req/BuildReq for glib2 and libart_lgpl (#150923)
+- fix ada build with make -jN N>1
+
+* Thu Mar  3 2005 Jakub Jelinek  <jakub at redhat.com> 3.4.3-22
 - fix PR c++/19916 (Mark Mitchell, #148793)
 - fixed C++ redeclaration handling (Alexandre Oliva, #149098)
 
@@ -1529,7 +1758,7 @@
   (#135611)
 - make sure .toc{,1} sections are created on ppc -m64 -mminimal-toc
   (#134248, PR target/17751)
-- define __GNUC_RH_RELEASE__ macro to match %%{gcc_release} rpm macro
+- define __GNUC_RH_RELEASE__ macro to match %%{release} rpm macro
   (well, its first number)
 
 * Thu Oct  7 2004 Jakub Jelinek  <jakub at redhat.com> 3.4.2-5


Index: sources
===================================================================
RCS file: /cvs/dist/rpms/gcc/FC-3/sources,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- sources	14 Mar 2005 17:50:24 -0000	1.61
+++ sources	22 Jul 2005 12:21:40 -0000	1.62
@@ -1 +1 @@
-ca096b876862165ff61df69ff838f2a8  gcc-3.4.3-20050228.tar.bz2
+366165a58d2b9a416e694e0ae3180afc  gcc-3.4.4-20050721.tar.bz2


--- gcc34-c++-pr19916.patch DELETED ---


--- gcc34-c++-redecl.patch DELETED ---




More information about the fedora-cvs-commits mailing list