rpms/gcc/devel gcc41-expr_nonzero_p.patch, NONE, 1.1 gcc41-libstdc++-bitset.patch, NONE, 1.1 gcc41-mmintrin.patch, NONE, 1.1 gcc41-pr22275.patch, NONE, 1.1 gcc41-pr25626.patch, NONE, 1.1 gcc41-pr26151.patch, NONE, 1.1 gcc41-pr26209.patch, NONE, 1.1 gcc41-vrp.patch, NONE, 1.1 .cvsignore, 1.133, 1.134 gcc41.spec, 1.34, 1.35 sources, 1.135, 1.136 gcc41-ldbl-default-libstdc++.patch, 1.4, NONE gcc41-ldbl-default.patch, 1.3, NONE gcc41-pr26092.patch, 1.1, NONE gcc41-pr26246.patch, 1.1, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Tue Feb 14 17:04:39 UTC 2006


Author: jakub

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

Modified Files:
	.cvsignore gcc41.spec sources 
Added Files:
	gcc41-expr_nonzero_p.patch gcc41-libstdc++-bitset.patch 
	gcc41-mmintrin.patch gcc41-pr22275.patch gcc41-pr25626.patch 
	gcc41-pr26151.patch gcc41-pr26209.patch gcc41-vrp.patch 
Removed Files:
	gcc41-ldbl-default-libstdc++.patch gcc41-ldbl-default.patch 
	gcc41-pr26092.patch gcc41-pr26246.patch 
Log Message:
4.1.0-0.26


gcc41-expr_nonzero_p.patch:
 0 files changed

--- NEW FILE gcc41-expr_nonzero_p.patch ---
2006-02-10  Jeff Law  <law at redhat.com>

	* fold-const.c (tree_expr_nonzero_p): Fix thinko.

--- gcc/fold-const.c	(revision 110848)
+++ gcc/fold-const.c	(revision 110849)
@@ -11256,7 +11256,7 @@ tree_expr_nonzero_p (tree t)
 	tree inner_type = TREE_TYPE (TREE_OPERAND (t, 0));
 	tree outer_type = TREE_TYPE (t);
 
-	return (TYPE_PRECISION (inner_type) >= TYPE_PRECISION (outer_type)
+	return (TYPE_PRECISION (outer_type) >= TYPE_PRECISION (inner_type)
 		&& tree_expr_nonzero_p (TREE_OPERAND (t, 0)));
       }
       break;

gcc41-libstdc++-bitset.patch:
 0 files changed

--- NEW FILE gcc41-libstdc++-bitset.patch ---
2006-01-30  Paolo Carlini  <pcarlini at suse.de>

	* include/std/std_bitset.h (bitset<>::_M_copy_to_string):
	Call the internal _Unchecked_set(size_t) instead of set.

--- libstdc++-v3/include/std/std_bitset.h	(revision 110410)
+++ libstdc++-v3/include/std/std_bitset.h	(working copy)
@@ -1156,7 +1157,7 @@
 	      case '0':
 		break;
 	      case '1':
-		set(__i);
+		_Unchecked_set(__i);
 		break;
 	      default:
 		__throw_invalid_argument(__N("bitset::_M_copy_from_string"));

gcc41-mmintrin.patch:
 0 files changed

--- NEW FILE gcc41-mmintrin.patch ---
2006-01-27  H.J. Lu  <hongjiu.lu at intel.com>

	* config/i386/emmintrin.h (_mm_cvtsd_f64): Add missing Intel
	intrinsic.
	(_mm_cvtsi128_si64): Likewise.
	(_mm_cvtsd_si64): Likewise.
	(_mm_cvttsd_si64): Likewise.
	(_mm_cvtsi64_sd): Likewise.
	(_mm_cvtsi64_si128): Likewise.
	* config/i386/mmintrin.h (_m_from_int64): Likewise.
	(_mm_cvtsi64_m64): Likewise.
	(_m_to_int64): Likewise.
	(_mm_cvtm64_si64): Likewise.
	* config/i386/xmmintrin.h (_mm_cvtss_si64): Likewise.
	(_mm_cvttss_si64): Likewise.
	(_mm_cvtsi64_ss): Likewise.
	(_mm_cvtss_f32): Likewise.

--- gcc/config/i386/mmintrin.h	(revision 110310)
+++ gcc/config/i386/mmintrin.h	(revision 110311)
@@ -25,7 +26,7 @@
    Public License.  */
 
 /* Implemented from the specification included in the Intel C++ Compiler
-   User Guide and Reference, version 8.0.  */
+   User Guide and Reference, version 9.0.  */
 
 #ifndef _MMINTRIN_H_INCLUDED
 #define _MMINTRIN_H_INCLUDED
@@ -69,13 +70,27 @@ _m_from_int (int __i)
 
 #ifdef __x86_64__
 /* Convert I to a __m64 object.  */
+
+/* Intel intrinsic.  */
+static __inline __m64  __attribute__((__always_inline__))
+_m_from_int64 (long long __i)
+{
+  return (__m64) __i;
+}
+
+static __inline __m64  __attribute__((__always_inline__))
+_mm_cvtsi64_m64 (long long __i)
+{
+  return (__m64) __i;
+}
+
+/* Microsoft intrinsic.  */
 static __inline __m64  __attribute__((__always_inline__))
 _mm_cvtsi64x_si64 (long long __i)
 {
   return (__m64) __i;
 }
 
-/* Convert I to a __m64 object.  */
 static __inline __m64  __attribute__((__always_inline__))
 _mm_set_pi64x (long long __i)
 {
@@ -97,7 +112,22 @@ _m_to_int (__m64 __i)
 }
 
 #ifdef __x86_64__
-/* Convert the lower 32 bits of the __m64 object into an integer.  */
+/* Convert the __m64 object to a 64bit integer.  */
+
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_m_to_int64 (__m64 __i)
+{
+  return (long long)__i;
+}
+
+static __inline long long __attribute__((__always_inline__))
+_mm_cvtm64_si64 (__m64 __i)
+{
+  return (long long)__i;
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvtsi64_si64x (__m64 __i)
 {
--- gcc/config/i386/xmmintrin.h	(revision 110310)
+++ gcc/config/i386/xmmintrin.h	(revision 110311)
@@ -25,7 +26,7 @@
    Public License.  */
 
 /* Implemented from the specification included in the Intel C++ Compiler
-   User Guide and Reference, version 8.0.  */
+   User Guide and Reference, version 9.0.  */
 
 #ifndef _XMMINTRIN_H_INCLUDED
 #define _XMMINTRIN_H_INCLUDED
@@ -491,8 +492,17 @@ _mm_cvt_ss2si (__m128 __A)
 }
 
 #ifdef __x86_64__
-/* Convert the lower SPFP value to a 32-bit integer according to the current
-   rounding mode.  */
+/* Convert the lower SPFP value to a 32-bit integer according to the
+   current rounding mode.  */
+
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_mm_cvtss_si64 (__m128 __A)
+{
+  return __builtin_ia32_cvtss2si64 ((__v4sf) __A);
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvtss_si64x (__m128 __A)
 {
@@ -529,6 +539,15 @@ _mm_cvtt_ss2si (__m128 __A)
 
 #ifdef __x86_64__
 /* Truncate the lower SPFP value to a 32-bit integer.  */
+
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_mm_cvttss_si64 (__m128 __A)
+{
+  return __builtin_ia32_cvttss2si64 ((__v4sf) __A);
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvttss_si64x (__m128 __A)
 {
@@ -565,6 +584,15 @@ _mm_cvt_si2ss (__m128 __A, int __B)
 
 #ifdef __x86_64__
 /* Convert B to a SPFP value and insert it as element zero in A.  */
+
+/* Intel intrinsic.  */
+static __inline __m128 __attribute__((__always_inline__))
+_mm_cvtsi64_ss (__m128 __A, long long __B)
+{
+  return (__m128) __builtin_ia32_cvtsi642ss ((__v4sf) __A, __B);
+}
+
+/* Microsoft intrinsic.  */
 static __inline __m128 __attribute__((__always_inline__))
 _mm_cvtsi64x_ss (__m128 __A, long long __B)
 {
@@ -911,6 +939,12 @@ _mm_store_ss (float *__P, __m128 __A)
   *__P = __builtin_ia32_vec_ext_v4sf ((__v4sf)__A, 0);
 }
 
+static __inline float __attribute__((__always_inline__))
+_mm_cvtss_f32 (__m128 __A)
+{
+  return __builtin_ia32_vec_ext_v4sf ((__v4sf)__A, 0);
+}
+
 /* Store four SPFP values.  The address must be 16-byte aligned.  */
 static __inline void __attribute__((__always_inline__))
 _mm_store_ps (float *__P, __m128 __A)
--- gcc/config/i386/emmintrin.h	(revision 110310)
+++ gcc/config/i386/emmintrin.h	(revision 110311)
@@ -25,7 +25,7 @@
    Public License.  */
 
 /* Implemented from the specification included in the Intel C++ Compiler
-   User Guide and Reference, version 8.0.  */
+   User Guide and Reference, version 9.0.  */
 
 #ifndef _EMMINTRIN_H_INCLUDED
 #define _EMMINTRIN_H_INCLUDED
@@ -158,6 +158,12 @@ _mm_store_sd (double *__P, __m128d __A)
   *__P = __builtin_ia32_vec_ext_v2df (__A, 0);
 }
 
+static __inline double __attribute__((__always_inline__))
+_mm_cvtsd_f64 (__m128d __A)
+{
+  return __builtin_ia32_vec_ext_v2df (__A, 0);
+}
+
 static __inline void __attribute__((__always_inline__))
 _mm_storel_pd (double *__P, __m128d __A)
 {
@@ -199,6 +205,14 @@ _mm_cvtsi128_si32 (__m128i __A)
 }
 
 #ifdef __x86_64__
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_mm_cvtsi128_si64 (__m128i __A)
+{
+  return __builtin_ia32_vec_ext_v2di ((__v2di)__A, 0);
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvtsi128_si64x (__m128i __A)
 {
@@ -789,6 +803,14 @@ _mm_cvtsd_si32 (__m128d __A)
 }
 
 #ifdef __x86_64__
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_mm_cvtsd_si64 (__m128d __A)
+{
+  return __builtin_ia32_cvtsd2si64 ((__v2df) __A);
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvtsd_si64x (__m128d __A)
 {
@@ -803,6 +825,14 @@ _mm_cvttsd_si32 (__m128d __A)
 }
 
 #ifdef __x86_64__
+/* Intel intrinsic.  */
+static __inline long long __attribute__((__always_inline__))
+_mm_cvttsd_si64 (__m128d __A)
+{
+  return __builtin_ia32_cvttsd2si64 ((__v2df) __A);
+}
+
+/* Microsoft intrinsic.  */
 static __inline long long __attribute__((__always_inline__))
 _mm_cvttsd_si64x (__m128d __A)
 {
@@ -823,6 +853,14 @@ _mm_cvtsi32_sd (__m128d __A, int __B)
 }
 
 #ifdef __x86_64__
+/* Intel intrinsic.  */
+static __inline __m128d __attribute__((__always_inline__))
+_mm_cvtsi64_sd (__m128d __A, long long __B)
+{
+  return (__m128d)__builtin_ia32_cvtsi642sd ((__v2df) __A, __B);
+}
+
+/* Microsoft intrinsic.  */
 static __inline __m128d __attribute__((__always_inline__))
 _mm_cvtsi64x_sd (__m128d __A, long long __B)
 {
@@ -1379,6 +1417,14 @@ _mm_cvtsi32_si128 (int __A)
 }
 
 #ifdef __x86_64__
+/* Intel intrinsic.  */
+static __inline __m128i __attribute__((__always_inline__))
+_mm_cvtsi64_si128 (long long __A)
+{
+  return _mm_set_epi64x (0, __A);
+}
+
+/* Microsoft intrinsic.  */
 static __inline __m128i __attribute__((__always_inline__))
 _mm_cvtsi64x_si128 (long long __A)
 {

gcc41-pr22275.patch:
 0 files changed

--- NEW FILE gcc41-pr22275.patch ---
2006-02-14  Michael Matz  <matz at suse.de>

	PR middle-end/22275

	* stor-layout.c (layout_decl): Zero-width bitfields aren't
	influenced by maximum_field_alignment or DECL_PACKED.
	(update_alignment_for_field): Ditto.
	(place_field): Ditto.
	* doc/extend.texi (<#pragma pack>, <Type Attributes>): Document
	this behaviour.

--- gcc/stor-layout.c	(revision 110979)
+++ gcc/stor-layout.c	(revision 110982)
@@ -337,6 +337,8 @@ layout_decl (tree decl, unsigned int kno
     /* For fields, it's a bit more complicated...  */
     {
       bool old_user_align = DECL_USER_ALIGN (decl);
+      bool zero_bitfield = false;
+      unsigned int mfa;
 
       if (DECL_BIT_FIELD (decl))
 	{
@@ -345,9 +347,9 @@ layout_decl (tree decl, unsigned int kno
 	  /* A zero-length bit-field affects the alignment of the next
 	     field.  */
 	  if (integer_zerop (DECL_SIZE (decl))
-	      && ! DECL_PACKED (decl)
 	      && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
 	    {
+	      zero_bitfield = true;
 #ifdef PCC_BITFIELD_TYPE_MATTERS
 	      if (PCC_BITFIELD_TYPE_MATTERS)
 		do_type_align (type, decl);
@@ -408,12 +410,13 @@ layout_decl (tree decl, unsigned int kno
 	 check old_user_align instead.  */
       if (DECL_PACKED (decl)
 	  && !old_user_align
+	  && !zero_bitfield
 	  && (DECL_NONADDRESSABLE_P (decl)
 	      || DECL_SIZE_UNIT (decl) == 0
 	      || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
 	DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
 
-      if (! DECL_USER_ALIGN (decl) && ! DECL_PACKED (decl))
+      if (! DECL_USER_ALIGN (decl) && (! DECL_PACKED (decl) || zero_bitfield))
 	{
 	  /* Some targets (i.e. i386, VMS) limit struct field alignment
 	     to a lower boundary than alignment of variables unless
@@ -427,9 +430,13 @@ layout_decl (tree decl, unsigned int kno
 #endif
 	}
 
+      if (zero_bitfield)
+        mfa = initial_max_fld_align * BITS_PER_UNIT;
+      else
+	mfa = maximum_field_alignment;
       /* Should this be controlled by DECL_USER_ALIGN, too?  */
-      if (maximum_field_alignment != 0)
-	DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
+      if (mfa != 0)
+	DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
     }
 
   /* Evaluate nonconstant size only once, either now or as soon as safe.  */
@@ -713,7 +720,16 @@ update_alignment_for_field (record_layou
 	    type_align = ADJUST_FIELD_ALIGN (field, type_align);
 #endif
 
-	  if (maximum_field_alignment != 0)
+	  /* Targets might chose to handle unnamed and hence possibly
+	     zero-width bitfield.  Those are not influenced by #pragmas
+	     or packed attributes.  */
+	  if (integer_zerop (DECL_SIZE (field)))
+	    {
+	      if (initial_max_fld_align)
+	        type_align = MIN (type_align,
+				  initial_max_fld_align * BITS_PER_UNIT);
+	    }
+	  else if (maximum_field_alignment != 0)
 	    type_align = MIN (type_align, maximum_field_alignment);
 	  else if (DECL_PACKED (field))
 	    type_align = MIN (type_align, BITS_PER_UNIT);
@@ -1175,6 +1191,10 @@ place_field (record_layout_info rli, tre
   if (DECL_BIT_FIELD_TYPE (field))
     {
       unsigned int type_align = TYPE_ALIGN (type);
+      unsigned int mfa = maximum_field_alignment;
+
+      if (integer_zerop (DECL_SIZE (field)))
+        mfa = initial_max_fld_align * BITS_PER_UNIT;
 
       /* Only the MS bitfields use this.  We used to also put any kind of
 	 packed bit fields into prev_field, but that makes no sense, because
@@ -1183,8 +1203,8 @@ place_field (record_layout_info rli, tre
 	 are also not fulfilled.
 	 There is no sane value to set rli->remaining_in_alignment to when
 	 a packed bitfield in prev_field is unaligned.  */
-      if (maximum_field_alignment != 0)
-	type_align = MIN (type_align, maximum_field_alignment);
+      if (mfa != 0)
+	type_align = MIN (type_align, mfa);
       gcc_assert (rli->prev_field
 		  || actual_align >= type_align || DECL_PACKED (field)
 		  || integer_zerop (DECL_SIZE (field))
--- gcc/doc/extend.texi	(revision 110979)
+++ gcc/doc/extend.texi	(revision 110982)
@@ -3288,9 +3288,10 @@ alignment.  See your linker documentatio
 
 @item packed
 This attribute, attached to @code{struct} or @code{union} type
-definition, specifies that each member of the structure or union is
-placed to minimize the memory required.  When attached to an @code{enum}
-definition, it indicates that the smallest integral type should be used.
+definition, specifies that each member (other than zero-width bitfields)
+of the structure or union is placed to minimize the memory required.  When
+attached to an @code{enum} definition, it indicates that the smallest
+integral type should be used.
 
 @opindex fshort-enums
 Specifying this attribute for @code{struct} and @code{union} types is
@@ -9423,10 +9424,10 @@ way of knowing that that happened.)
 @subsection Structure-Packing Pragmas
 
 For compatibility with Win32, GCC supports a set of @code{#pragma}
-directives which change the maximum alignment of members of structures,
-unions, and classes subsequently defined.  The @var{n} value below always
-is required to be a small power of two and specifies the new alignment
-in bytes.
+directives which change the maximum alignment of members of structures
+(other than zero-width bitfields), unions, and classes subsequently
+defined.  The @var{n} value below always is required to be a small power
+of two and specifies the new alignment in bytes.
 
 @enumerate
 @item @code{#pragma pack(@var{n})} simply sets the new alignment.

gcc41-pr25626.patch:
 0 files changed

--- NEW FILE gcc41-pr25626.patch ---
2006-01-15  Paolo Carlini  <pcarlini at suse.de>
	    Gabriel Dos Reis  <gdr at integrable-solutions.net>

	PR libstdc++/25626
	* include/std/std_valarray.h (valarray(const slice_array<>&),
	valarray(const gslice_array<>&), valarray(const mask_array<>&),
	valarray(const indirect_array<>&), valarray(const _Expr<>&)):
	Forward to __valarray_copy_construct, not __valarray_copy.
	* include/bits/valarray_array.h
	(__valarray_copy_construct(_Array<>, _Array<>, _Array<>, size_t),
	__valarray_copy_construct(_Array<>, size_t, size_t, _Array<>)):
	New.

--- libstdc++-v3/include/bits/valarray_array.h	(revision 109725)
+++ libstdc++-v3/include/bits/valarray_array.h	(revision 109726)
@@ -428,6 +428,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       _Tp* const __restrict__ _M_data;
     };
 
+
+  // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]]
+  template<typename _Tp>
+    inline void
+    __valarray_copy_construct(_Array<_Tp> __a, _Array<size_t> __i,
+			      _Array<_Tp> __b, size_t __n)
+    { std::__valarray_copy_construct(__a._M_data, __i._M_data,
+				     __b._M_data, __n); }
+
+  // Copy-construct plain array __b[<__n>] from strided array __a[<__n : __s>]
+  template<typename _Tp>
+    inline void
+    __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s,
+			      _Array<_Tp> __b)
+    { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); }
+
   template<typename _Tp>
     inline void
     __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)
--- libstdc++-v3/include/std/std_valarray.h	(revision 109725)
+++ libstdc++-v3/include/std/std_valarray.h	(revision 109726)
@@ -583,7 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     valarray<_Tp>::valarray(const slice_array<_Tp>& __sa)
     : _M_size(__sa._M_sz), _M_data(__valarray_get_storage<_Tp>(__sa._M_sz))
     {
-      std::__valarray_copy
+      std::__valarray_copy_construct
 	(__sa._M_array, __sa._M_sz, __sa._M_stride, _Array<_Tp>(_M_data));
     }
 
@@ -593,7 +593,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     : _M_size(__ga._M_index.size()),
       _M_data(__valarray_get_storage<_Tp>(_M_size))
     {
-      std::__valarray_copy
+      std::__valarray_copy_construct
 	(__ga._M_array, _Array<size_t>(__ga._M_index),
 	 _Array<_Tp>(_M_data), _M_size);
     }
@@ -603,7 +603,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     valarray<_Tp>::valarray(const mask_array<_Tp>& __ma)
     : _M_size(__ma._M_sz), _M_data(__valarray_get_storage<_Tp>(__ma._M_sz))
     {
-      std::__valarray_copy
+      std::__valarray_copy_construct
 	(__ma._M_array, __ma._M_mask, _Array<_Tp>(_M_data), _M_size);
     }
 
@@ -612,7 +612,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     valarray<_Tp>::valarray(const indirect_array<_Tp>& __ia)
     : _M_size(__ia._M_sz), _M_data(__valarray_get_storage<_Tp>(__ia._M_sz))
     {
-      std::__valarray_copy
+      std::__valarray_copy_construct
 	(__ia._M_array, __ia._M_index, _Array<_Tp>(_M_data), _M_size);
     }
 
@@ -620,7 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     inline
     valarray<_Tp>::valarray(const _Expr<_Dom, _Tp>& __e)
     : _M_size(__e.size()), _M_data(__valarray_get_storage<_Tp>(_M_size))
-    { std::__valarray_copy(__e, _M_size, _Array<_Tp>(_M_data)); }
+    { std::__valarray_copy_construct(__e, _M_size, _Array<_Tp>(_M_data)); }
 
   template<typename _Tp>
     inline

gcc41-pr26151.patch:
 0 files changed

--- NEW FILE gcc41-pr26151.patch ---
2006-02-14  Volker Reichelt  <reichelt at igpm.rwth-aachen.de>

	PR c++/26151
	* parser.c (cp_parser_decl_specifier_seq): Check for duplicate
	decl-specifiers.  Remove extra check for duplicate 'friend'.
	* decl.c (grokdeclarator): Remove check for duplicate
	decl-specifiers.  Set longlong together with long_p.

--- gcc/cp/decl.c	(revision 110979)
+++ gcc/cp/decl.c	(revision 110982)
@@ -6662,7 +6662,6 @@ grokdeclarator (const cp_declarator *dec
      this value will be NULL_TREE, even if the entity is located at
      namespace scope.  */
   tree in_namespace = NULL_TREE;
-  cp_decl_spec ds;
   cp_storage_class storage_class;
   bool unsigned_p, signed_p, short_p, long_p, thread_p;
   bool type_was_error_mark_node = false;
@@ -6671,6 +6670,7 @@ grokdeclarator (const cp_declarator *dec
   unsigned_p = declspecs->specs[(int)ds_unsigned];
   short_p = declspecs->specs[(int)ds_short];
   long_p = declspecs->specs[(int)ds_long];
+  longlong = declspecs->specs[(int)ds_long] >= 2;
   thread_p = declspecs->specs[(int)ds_thread];
 
   if (decl_context == FUNCDEF)
@@ -6884,45 +6884,6 @@ grokdeclarator (const cp_declarator *dec
   explicit_int = declspecs->explicit_int_p;
   explicit_char = declspecs->explicit_char_p;
 
-  /* Check for repeated decl-specifiers.  */
-  for (ds = ds_first; ds != ds_last; ++ds)
-    {
-      unsigned count = declspecs->specs[(int)ds];
-      if (count < 2)
-	continue;
-      /* The "long" specifier is a special case because of
-	 "long long".  */
-      if (ds == ds_long)
-	{
-	  if (count > 2)
-	    error ("%<long long long%> is too long for GCC");
-	  else if (pedantic && !in_system_header && warn_long_long)
-	    pedwarn ("ISO C++ does not support %<long long%>");
-	  else
-	    longlong = 1;
-	}
-      else if (declspecs->specs[(int)ds] > 1)
-	{
-	  static const char *const decl_spec_names[] = {
-	    "signed",
-	    "unsigned",
-	    "short",
-	    "long",
-	    "const",
-	    "volatile",
-	    "restrict",
-	    "inline",
-	    "virtual",
-	    "explicit",
-	    "friend",
-	    "typedef",
-	    "__complex",
-	    "__thread"
-	  };
-	  error ("duplicate %qs", decl_spec_names[(int)ds]);
-	}
-    }
-
 #if 0
   /* See the code below that used this.  */
   if (typedef_decl)
--- gcc/cp/parser.c	(revision 110979)
+++ gcc/cp/parser.c	(revision 110982)
@@ -7290,6 +7290,7 @@ cp_parser_decl_specifier_seq (cp_parser*
 			      int* declares_class_or_enum)
 {
   bool constructor_possible_p = !parser->in_declarator_p;
+  cp_decl_spec ds;
 
   /* Clear DECL_SPECS.  */
   clear_decl_specs (decl_specs);
@@ -7324,8 +7325,7 @@ cp_parser_decl_specifier_seq (cp_parser*
 	  /* decl-specifier:
 	       friend  */
 	case RID_FRIEND:
-	  if (decl_specs->specs[(int) ds_friend]++)
-	    error ("duplicate %<friend%>");
+	  ++decl_specs->specs[(int) ds_friend];
 	  /* Consume the token.  */
 	  cp_lexer_consume_token (parser->lexer);
 	  break;
@@ -7491,6 +7491,42 @@ cp_parser_decl_specifier_seq (cp_parser*
       flags |= CP_PARSER_FLAGS_OPTIONAL;
     }
 
+  /* Check for repeated decl-specifiers.  */
+  for (ds = ds_first; ds != ds_last; ++ds)
+    {
+      unsigned count = decl_specs->specs[(int)ds];
+      if (count < 2)
+	continue;
+      /* The "long" specifier is a special case because of "long long".  */
+      if (ds == ds_long)
+	{
+	  if (count > 2)
+	    error ("%<long long long%> is too long for GCC");
+	  else if (pedantic && !in_system_header && warn_long_long)
+	    pedwarn ("ISO C++ does not support %<long long%>");
+	}
+      else if (count > 1)
+	{
+	  static const char *const decl_spec_names[] = {
+	    "signed",
+	    "unsigned",
+	    "short",
+	    "long",
+	    "const",
+	    "volatile",
+	    "restrict",
+	    "inline",
+	    "virtual",
+	    "explicit",
+	    "friend",
+	    "typedef",
+	    "__complex",
+	    "__thread"
+	  };
+	  error ("duplicate %qs", decl_spec_names[(int)ds]);
+	}
+    }
+
   /* Don't allow a friend specifier with a class definition.  */
   if (decl_specs->specs[(int) ds_friend] != 0
       && (*declares_class_or_enum & 2))

gcc41-pr26209.patch:
 tree-cfg.c        |    5 +----
 tree-cfgcleanup.c |   15 ++++++++++-----
 tree-ssa-loop.c   |    3 ++-
 3 files changed, 13 insertions(+), 10 deletions(-)

--- NEW FILE gcc41-pr26209.patch ---
2006-02-13  Zdenek Dvorak  <dvorakz at suse.cz>

	PR tree-optimization/26209
	* tree-ssa-loop.c (pass_scev_cprop): Add TODO_cleanup_cfg.
	* tree-cfgcleanup.c (cleanup_control_flow): Remove dead
	eh edges.
	* tree-cfg.c (replace_uses_by): Do not alter cfg.

--- gcc/tree-cfg.c.jj	2006-02-02 16:39:45.000000000 +0100
+++ gcc/tree-cfg.c	2006-02-14 16:14:08.000000000 +0100
@@ -1324,10 +1324,7 @@ replace_uses_by (tree name, tree val)
       if (TREE_CODE (rhs) == ADDR_EXPR)
 	recompute_tree_invarant_for_addr_expr (rhs);
 
-      /* If the statement could throw and now cannot, we need to prune cfg.  */
-      if (maybe_clean_or_replace_eh_stmt (stmt, stmt))
-	tree_purge_dead_eh_edges (bb_for_stmt (stmt));
-
+      maybe_clean_or_replace_eh_stmt (stmt, stmt);
       mark_new_vars_to_rename (stmt);
     }
 
--- gcc/tree-ssa-loop.c.jj	2006-02-02 16:39:51.000000000 +0100
+++ gcc/tree-ssa-loop.c	2006-02-14 16:14:02.000000000 +0100
@@ -303,7 +303,8 @@ struct tree_opt_pass pass_scev_cprop =
   0,					/* properties_provided */
   0,					/* properties_destroyed */
   0,					/* todo_flags_start */
-  TODO_dump_func | TODO_update_ssa_only_virtuals,
+  TODO_dump_func | TODO_cleanup_cfg
+    | TODO_update_ssa_only_virtuals,
 					/* todo_flags_finish */
   0					/* letter */
 };
--- gcc/tree-cfgcleanup.c.jj	2006-02-02 16:39:41.000000000 +0100
+++ gcc/tree-cfgcleanup.c	2006-02-14 16:14:05.000000000 +0100
@@ -157,19 +157,24 @@ cleanup_control_flow (void)
     {
       bsi = bsi_last (bb);
 
+      /* If the last statement of the block could throw and now cannot,
+	 we need to prune cfg.  */
+      tree_purge_dead_eh_edges (bb);
+
       if (bsi_end_p (bsi))
 	continue;
 
       stmt = bsi_stmt (bsi);
+
       if (TREE_CODE (stmt) == COND_EXPR
 	  || TREE_CODE (stmt) == SWITCH_EXPR)
 	retval |= cleanup_control_expr_graph (bb, bsi);
-
       /* If we had a computed goto which has a compile-time determinable
 	 destination, then we can eliminate the goto.  */
-      if (TREE_CODE (stmt) == GOTO_EXPR
-	  && TREE_CODE (GOTO_DESTINATION (stmt)) == ADDR_EXPR
-	  && TREE_CODE (TREE_OPERAND (GOTO_DESTINATION (stmt), 0)) == LABEL_DECL)
+      else if (TREE_CODE (stmt) == GOTO_EXPR
+	       && TREE_CODE (GOTO_DESTINATION (stmt)) == ADDR_EXPR
+	       && (TREE_CODE (TREE_OPERAND (GOTO_DESTINATION (stmt), 0))
+		   == LABEL_DECL))
 	{
 	  edge e;
 	  tree label;
@@ -213,7 +218,7 @@ cleanup_control_flow (void)
 
       /* Check for indirect calls that have been turned into
 	 noreturn calls.  */
-      if (noreturn_call_p (stmt) && remove_fallthru_edge (bb->succs))
+      else if (noreturn_call_p (stmt) && remove_fallthru_edge (bb->succs))
 	{
 	  free_dominance_info (CDI_DOMINATORS);
 	  retval = true;

gcc41-vrp.patch:
 0 files changed

--- NEW FILE gcc41-vrp.patch ---
2006-02-13  Jeff Law  <law at redhat.com>

	* tree-vrp.c (extract_range_from_binary_expr): Remove handling of
	TRUTH_XOR_EPR.

--- gcc/tree-vrp.c	(revision 110937)
+++ gcc/tree-vrp.c	(revision 110938)
@@ -1278,8 +1278,7 @@ extract_range_from_binary_expr (value_ra
       && code != TRUTH_ANDIF_EXPR
       && code != TRUTH_ORIF_EXPR
       && code != TRUTH_AND_EXPR
-      && code != TRUTH_OR_EXPR
-      && code != TRUTH_XOR_EXPR)
+      && code != TRUTH_OR_EXPR)
     {
       set_value_range_to_varying (vr);
       return;
@@ -1365,8 +1364,7 @@ extract_range_from_binary_expr (value_ra
   if (code == TRUTH_ANDIF_EXPR
       || code == TRUTH_ORIF_EXPR
       || code == TRUTH_AND_EXPR
-      || code == TRUTH_OR_EXPR
-      || code == TRUTH_XOR_EXPR)
+      || code == TRUTH_OR_EXPR)
     {
       /* If one of the operands is zero, we know that the whole
 	 expression evaluates zero.  */


Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/.cvsignore,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -r1.133 -r1.134
--- .cvsignore	13 Feb 2006 14:40:12 -0000	1.133
+++ .cvsignore	14 Feb 2006 17:04:22 -0000	1.134
@@ -1 +1 @@
-gcc-4.1.0-20060213.tar.bz2
+gcc-4.1.0-20060214.tar.bz2


Index: gcc41.spec
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc41.spec,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- gcc41.spec	13 Feb 2006 14:40:12 -0000	1.34
+++ gcc41.spec	14 Feb 2006 17:04:24 -0000	1.35
@@ -1,6 +1,6 @@
-%define DATE 20060213
+%define DATE 20060214
 %define gcc_version 4.1.0
-%define gcc_release 0.25
+%define gcc_release 0.26
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %ifarch %{ix86} x86_64 ia64
@@ -105,12 +105,16 @@
 Patch8: gcc41-java-slow_pthread_self.patch
 Patch9: gcc41-fortran-finclude.patch
 Patch10: gcc41-ppc32-retaddr.patch
-Patch11: gcc41-ldbl-default.patch
-Patch12: gcc41-ldbl-default-libstdc++.patch
-Patch13: gcc41-sparc64-g7.patch
-Patch14: gcc41-fortran-where.patch
-Patch15: gcc41-pr26092.patch
-Patch16: gcc41-pr26246.patch
+Patch11: gcc41-sparc64-g7.patch
+Patch12: gcc41-fortran-where.patch
+Patch13: gcc41-expr_nonzero_p.patch
+Patch14: gcc41-libstdc++-bitset.patch
+Patch15: gcc41-mmintrin.patch
+Patch16: gcc41-pr22275.patch
+Patch17: gcc41-pr25626.patch
+Patch18: gcc41-pr26151.patch
+Patch19: gcc41-pr26209.patch
+Patch20: gcc41-vrp.patch
 
 %define _gnu %{nil}
 %ifarch sparc
@@ -400,12 +404,16 @@
 %patch8 -p0 -b .java-slow_pthread_self~
 %patch9 -p0 -b .fortran-finclude~
 %patch10 -p0 -b .ppc32-retaddr~
-%patch11 -p0 -b .ldbl-default~
-%patch12 -p0 -b .ldbl-default-libstdc++~
-%patch13 -p0 -b .sparc64-g7~
-%patch14 -p0 -b .fortran-where~
-%patch15 -p0 -b .pr26092~
-%patch16 -p0 -b .pr26246~
+%patch11 -p0 -b .sparc64-g7~
+%patch12 -p0 -b .fortran-where~
+%patch13 -p0 -b .expr_nonzero_p~
+%patch14 -p0 -b .libstdc++-bitset~
+%patch15 -p0 -b .mmintrin~
+%patch16 -p0 -b .pr22275~
+%patch17 -p0 -b .pr25626~
+%patch18 -p0 -b .pr26151~
+%patch19 -p0 -b .pr26209~
+%patch20 -p0 -b .vrp~
 
 sed -i -e 's/4\.1\.0/4.1.0/' gcc/BASE-VER gcc/version.c
 sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c
@@ -1424,6 +1432,23 @@
 %doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Tue Feb 14 2006 Jakub Jelinek <jakub at redhat.com> 4.1.0-0.26
+- update from gcc-4_1-branch (-r110903:110978)
+  - PRs fortran/20861, fortran/20871, fortran/25059, fortran/25070,
+	fortran/25083, fortran/25088, fortran/25103, fortran/26038,
+	fortran/26074, inline-asm/16194, libfortran/24685,
+	libfortran/25425, target/26141, tree-optimization/26258
+- ABI change - revert to GCC 3.3 and earlier behaviour of
+  zero sized bitfields in packed structs (Michael Matz, PR middle-end/22275)
+- fix valarrays vs. non-POD (Paolo Carlini, Gabriel Dos Reis,
+  PR libstdc++/25626)
+- fix C++ duplicate declspec diagnostics (Volker Reichelt, PR c++/26151)
+- fix dominance ICE (Zdenek Dvorak, PR tree-optimization/26209)
+- add some new Intel {,e,x}mmintrin.h intrinsics (H.J. Lu)
+- speedup bitset<>::_M_copy_to_string (Paolo Carlini)
+- fix tree_expr_nonzero_p (Jeff Law)
+- fix TRUTH_XOR_EXPR handling in VRP (Jeff Law)
+
 * Mon Feb 13 2006 Jakub Jelinek <jakub at redhat.com> 4.1.0-0.25
 - update from gcc-4_1-branch (-r110831:110903)
   - PRs c++/16405, c++/24996, fortran/14771, fortran/20858, fortran/25756,


Index: sources
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/sources,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -r1.135 -r1.136
--- sources	13 Feb 2006 14:40:12 -0000	1.135
+++ sources	14 Feb 2006 17:04:24 -0000	1.136
@@ -1 +1 @@
-d1949cf2e79cf95e7f46d7b3e8f1dddc  gcc-4.1.0-20060213.tar.bz2
+c492d5acbe9bade087754f9216d87d13  gcc-4.1.0-20060214.tar.bz2


--- gcc41-ldbl-default-libstdc++.patch DELETED ---


--- gcc41-ldbl-default.patch DELETED ---


--- gcc41-pr26092.patch DELETED ---


--- gcc41-pr26246.patch DELETED ---




More information about the fedora-cvs-commits mailing list