patches/gcc/4.0.0/pr21951.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
yann@1
     1
Workaround for buglet in std::vector etc. when compiling 
yann@1
     2
with gcc-4.0.0 -Wall -O -fno-exceptions
yann@1
     3
Fixes:
yann@1
     4
yann@1
     5
.../include/c++/4.0.0/bits/vector.tcc: In member function 'void std::vector<_Tp,
yann@1
     6
_Alloc>::reserve(size_t) [with _Tp = int, _Alloc = std::allocator<int>]':
yann@1
     7
.../include/c++/4.0.0/bits/vector.tcc:78: warning: control may reach end of
yann@1
     8
non-void function 'typename _Alloc::pointer std::vector<_Tp,
yann@1
     9
_Alloc>::_M_allocate_and_copy(size_t, _ForwardIterator, _ForwardIterator) [with
yann@1
    10
_ForwardIterator = int*, _Tp = int, _Alloc = std::allocator<int>]' being inlined
yann@1
    11
yann@1
    12
See http://gcc.gnu.org/PR21951
yann@1
    13
yann@1
    14
--- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h.old	2005-06-11 03:58:20.000000000 -0700
yann@1
    15
+++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h	2005-06-11 04:01:21.000000000 -0700
yann@1
    16
@@ -765,13 +765,13 @@
yann@1
    17
 	    {
yann@1
    18
 	      std::__uninitialized_copy_a(__first, __last, __result,
yann@1
    19
 					  this->get_allocator());
yann@1
    20
-	      return __result;
yann@1
    21
 	    }
yann@1
    22
 	  catch(...)
yann@1
    23
 	    {
yann@1
    24
 	      _M_deallocate(__result, __n);
yann@1
    25
 	      __throw_exception_again;
yann@1
    26
 	    }
yann@1
    27
+	  return __result;
yann@1
    28
 	}
yann@1
    29
 
yann@1
    30
 
yann@1
    31
--- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h.old	2005-06-11 03:58:20.000000000 -0700
yann@1
    32
+++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h	2005-06-11 04:05:18.990003248 -0700
yann@1
    33
@@ -84,13 +84,13 @@
yann@1
    34
 	{
yann@1
    35
 	  for (; __first != __last; ++__first, ++__cur)
yann@1
    36
 	    std::_Construct(&*__cur, *__first);
yann@1
    37
-	  return __cur;
yann@1
    38
 	}
yann@1
    39
       catch(...)
yann@1
    40
 	{
yann@1
    41
 	  std::_Destroy(__result, __cur);
yann@1
    42
 	  __throw_exception_again;
yann@1
    43
 	}
yann@1
    44
+      return __cur;
yann@1
    45
     }
yann@1
    46
 
yann@1
    47
   /**
yann@1
    48
@@ -236,13 +236,13 @@
yann@1
    49
 	{
yann@1
    50
 	  for (; __first != __last; ++__first, ++__cur)
yann@1
    51
 	    __alloc.construct(&*__cur, *__first);
yann@1
    52
-	  return __cur;
yann@1
    53
 	}
yann@1
    54
       catch(...)
yann@1
    55
 	{
yann@1
    56
 	  std::_Destroy(__result, __cur, __alloc);
yann@1
    57
 	  __throw_exception_again;
yann@1
    58
 	}
yann@1
    59
+      return __cur;
yann@1
    60
     }
yann@1
    61
 
yann@1
    62
   template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
yann@1
    63
@@ -337,11 +337,13 @@
yann@1
    64
 	{
yann@1
    65
 	  return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
yann@1
    66
 	}
yann@1
    67
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@1
    68
       catch(...)
yann@1
    69
 	{
yann@1
    70
 	  std::_Destroy(__result, __mid, __alloc);
yann@1
    71
 	  __throw_exception_again;
yann@1
    72
 	}
yann@1
    73
+#endif
yann@1
    74
     }
yann@1
    75
 
yann@1
    76
   // __uninitialized_fill_copy
yann@1
    77
@@ -360,11 +362,13 @@
yann@1
    78
 	{
yann@1
    79
 	  return std::__uninitialized_copy_a(__first, __last, __mid, __alloc);
yann@1
    80
 	}
yann@1
    81
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@1
    82
       catch(...)
yann@1
    83
 	{
yann@1
    84
 	  std::_Destroy(__result, __mid, __alloc);
yann@1
    85
 	  __throw_exception_again;
yann@1
    86
 	}
yann@1
    87
+#endif
yann@1
    88
     }
yann@1
    89
 
yann@1
    90
   // __uninitialized_copy_fill
yann@1
    91
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope.old	2005-06-11 03:58:20.000000000 -0700
yann@1
    92
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope	2005-06-11 04:13:26.628870872 -0700
yann@1
    93
@@ -1645,11 +1645,13 @@
yann@1
    94
 	_S_cond_store_eos(__buf[__size]);
yann@1
    95
 	try
yann@1
    96
 	  { return _S_new_RopeLeaf(__buf, __size, __a); }
yann@1
    97
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@1
    98
 	catch(...)
yann@1
    99
 	  {
yann@1
   100
 	    _RopeRep::__STL_FREE_STRING(__buf, __size, __a);
yann@1
   101
 	    __throw_exception_again;
yann@1
   102
 	  }
yann@1
   103
+#endif
yann@1
   104
       }
yann@1
   105
 
yann@1
   106
       // Concatenation of nonempty strings.
yann@1
   107
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory.old	2005-06-11 03:58:20.000000000 -0700
yann@1
   108
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory	2005-06-11 04:13:52.897877376 -0700
yann@1
   109
@@ -85,11 +85,13 @@
yann@1
   110
 	    std::_Construct(&*__cur, *__first);
yann@1
   111
 	  return pair<_InputIter, _ForwardIter>(__first, __cur);
yann@1
   112
 	}
yann@1
   113
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@1
   114
       catch(...)
yann@1
   115
 	{
yann@1
   116
 	  std::_Destroy(__result, __cur);
yann@1
   117
 	  __throw_exception_again;
yann@1
   118
 	}
yann@1
   119
+#endif
yann@1
   120
     }
yann@1
   121
 
yann@1
   122
   template<typename _RandomAccessIter, typename _Size, typename _ForwardIter>
yann@1
   123
@@ -144,11 +146,13 @@
yann@1
   124
 	    __alloc.construct(&*__cur, *__first);
yann@1
   125
 	  return pair<_InputIter, _ForwardIter>(__first, __cur);
yann@1
   126
 	}
yann@1
   127
+#ifdef __EXCEPTIONS  // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only
yann@1
   128
       catch(...)
yann@1
   129
 	{
yann@1
   130
 	  std::_Destroy(__result, __cur, __alloc);
yann@1
   131
 	  __throw_exception_again;
yann@1
   132
 	}
yann@1
   133
+#endif
yann@1
   134
     }
yann@1
   135
 
yann@1
   136
   template<typename _InputIter, typename _Size, typename _ForwardIter,
yann@1
   137
--- gcc-4.0.1-20050607/libstdc++-v3/include/ext/hashtable.h.old	2005-06-11 03:58:20.000000000 -0700
yann@1
   138
+++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/hashtable.h	2005-06-11 04:14:28.384482592 -0700
yann@1
   139
@@ -607,13 +607,13 @@
yann@1
   140
 	try
yann@1
   141
 	  {
yann@1
   142
 	    this->get_allocator().construct(&__n->_M_val, __obj);
yann@1
   143
-	    return __n;
yann@1
   144
 	  }
yann@1
   145
 	catch(...)
yann@1
   146
 	  {
yann@1
   147
 	    _M_put_node(__n);
yann@1
   148
 	    __throw_exception_again;
yann@1
   149
 	  }
yann@1
   150
+	return __n;
yann@1
   151
       }
yann@1
   152
 
yann@1
   153
       void