patches/gcc/4.0.0/150-pr21951.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
yann@402
     1
Workaround for buglet in std::vector etc. when compiling 
yann@402
     2
with gcc-4.0.0 -Wall -O -fno-exceptions
yann@402
     3
Fixes:
yann@402
     4
yann@402
     5
.../include/c++/4.0.0/bits/vector.tcc: In member function 'void std::vector<_Tp,
yann@402
     6
_Alloc>::reserve(size_t) [with _Tp = int, _Alloc = std::allocator<int>]':
yann@402
     7
.../include/c++/4.0.0/bits/vector.tcc:78: warning: control may reach end of
yann@402
     8
non-void function 'typename _Alloc::pointer std::vector<_Tp,
yann@402
     9
_Alloc>::_M_allocate_and_copy(size_t, _ForwardIterator, _ForwardIterator) [with
yann@402
    10
_ForwardIterator = int*, _Tp = int, _Alloc = std::allocator<int>]' being inlined
yann@402
    11
yann@402
    12
See http://gcc.gnu.org/PR21951
yann@402
    13
yann@402
    14
--- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h.old	2005-06-11 03:58:20.000000000 -0700
yann@402
    15
+++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h	2005-06-11 04:01:21.000000000 -0700
yann@402
    16
@@ -765,13 +765,13 @@
yann@402
    17
 	    {
yann@402
    18
 	      std::__uninitialized_copy_a(__first, __last, __result,
yann@402
    19
 					  this->get_allocator());
yann@402
    20
-	      return __result;
yann@402
    21
 	    }
yann@402
    22
 	  catch(...)
yann@402
    23
 	    {
yann@402
    24
 	      _M_deallocate(__result, __n);
yann@402
    25
 	      __throw_exception_again;
yann@402
    26
 	    }
yann@402
    27
+	  return __result;
yann@402
    28
 	}
yann@402
    29
 
yann@402
    30
 
yann@402
    31
--- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h.old	2005-06-11 03:58:20.000000000 -0700
yann@402
    32
+++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h	2005-06-11 04:05:18.990003248 -0700
yann@402
    33
@@ -84,13 +84,13 @@
yann@402
    34
 	{
yann@402
    35
 	  for (; __first != __last; ++__first, ++__cur)
yann@402
    36
 	    std::_Construct(&*__cur, *__first);
yann@402
    37
-	  return __cur;
yann@402
    38
 	}
yann@402
    39
       catch(...)
yann@402
    40
 	{
yann@402
    41
 	  std::_Destroy(__result, __cur);
yann@402
    42
 	  __throw_exception_again;
yann@402
    43
 	}
yann@402
    44
+      return __cur;
yann@402
    45
     }
yann@402
    46
 
yann@402
    47
   /**
yann@402
    48
@@ -236,13 +236,13 @@
yann@402
    49
 	{
yann@402
    50
 	  for (; __first != __last; ++__first, ++__cur)
yann@402
    51
 	    __alloc.construct(&*__cur, *__first);
yann@402
    52
-	  return __cur;
yann@402
    53
 	}
yann@402
    54
       catch(...)
yann@402
    55
 	{
yann@402
    56
 	  std::_Destroy(__result, __cur, __alloc);
yann@402
    57
 	  __throw_exception_again;
yann@402
    58
 	}
yann@402
    59
+      return __cur;
yann@402
    60
     }
yann@402
    61
 
yann@402
    62
   template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
yann@402
    63
@@ -337,11 +337,13 @@
yann@402
    64
 	{
yann@402
    65
 	  return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
yann@402
    66
 	}
yann@402
    67
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@402
    68
       catch(...)
yann@402
    69
 	{
yann@402
    70
 	  std::_Destroy(__result, __mid, __alloc);
yann@402
    71
 	  __throw_exception_again;
yann@402
    72
 	}
yann@402
    73
+#endif
yann@402
    74
     }
yann@402
    75
 
yann@402
    76
   // __uninitialized_fill_copy
yann@402
    77
@@ -360,11 +362,13 @@
yann@402
    78
 	{
yann@402
    79
 	  return std::__uninitialized_copy_a(__first, __last, __mid, __alloc);
yann@402
    80
 	}
yann@402
    81
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@402
    82
       catch(...)
yann@402
    83
 	{
yann@402
    84
 	  std::_Destroy(__result, __mid, __alloc);
yann@402
    85
 	  __throw_exception_again;
yann@402
    86
 	}
yann@402
    87
+#endif
yann@402
    88
     }
yann@402
    89
 
yann@402
    90
   // __uninitialized_copy_fill
yann@402
    91
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope.old	2005-06-11 03:58:20.000000000 -0700
yann@402
    92
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope	2005-06-11 04:13:26.628870872 -0700
yann@402
    93
@@ -1645,11 +1645,13 @@
yann@402
    94
 	_S_cond_store_eos(__buf[__size]);
yann@402
    95
 	try
yann@402
    96
 	  { return _S_new_RopeLeaf(__buf, __size, __a); }
yann@402
    97
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@402
    98
 	catch(...)
yann@402
    99
 	  {
yann@402
   100
 	    _RopeRep::__STL_FREE_STRING(__buf, __size, __a);
yann@402
   101
 	    __throw_exception_again;
yann@402
   102
 	  }
yann@402
   103
+#endif
yann@402
   104
       }
yann@402
   105
 
yann@402
   106
       // Concatenation of nonempty strings.
yann@402
   107
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory.old	2005-06-11 03:58:20.000000000 -0700
yann@402
   108
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory	2005-06-11 04:13:52.897877376 -0700
yann@402
   109
@@ -85,11 +85,13 @@
yann@402
   110
 	    std::_Construct(&*__cur, *__first);
yann@402
   111
 	  return pair<_InputIter, _ForwardIter>(__first, __cur);
yann@402
   112
 	}
yann@402
   113
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@402
   114
       catch(...)
yann@402
   115
 	{
yann@402
   116
 	  std::_Destroy(__result, __cur);
yann@402
   117
 	  __throw_exception_again;
yann@402
   118
 	}
yann@402
   119
+#endif
yann@402
   120
     }
yann@402
   121
 
yann@402
   122
   template<typename _RandomAccessIter, typename _Size, typename _ForwardIter>
yann@402
   123
@@ -144,11 +146,13 @@
yann@402
   124
 	    __alloc.construct(&*__cur, *__first);
yann@402
   125
 	  return pair<_InputIter, _ForwardIter>(__first, __cur);
yann@402
   126
 	}
yann@402
   127
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@402
   128
       catch(...)
yann@402
   129
 	{
yann@402
   130
 	  std::_Destroy(__result, __cur, __alloc);
yann@402
   131
 	  __throw_exception_again;
yann@402
   132
 	}
yann@402
   133
+#endif
yann@402
   134
     }
yann@402
   135
 
yann@402
   136
   template<typename _InputIter, typename _Size, typename _ForwardIter,
yann@402
   137
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/hashtable.h.old	2005-06-11 03:58:20.000000000 -0700
yann@402
   138
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/hashtable.h	2005-06-11 04:14:28.384482592 -0700
yann@402
   139
@@ -607,13 +607,13 @@
yann@402
   140
 	try
yann@402
   141
 	  {
yann@402
   142
 	    this->get_allocator().construct(&__n->_M_val, __obj);
yann@402
   143
-	    return __n;
yann@402
   144
 	  }
yann@402
   145
 	catch(...)
yann@402
   146
 	  {
yann@402
   147
 	    _M_put_node(__n);
yann@402
   148
 	    __throw_exception_again;
yann@402
   149
 	  }
yann@402
   150
+	return __n;
yann@402
   151
       }
yann@402
   152
 
yann@402
   153
       void