patches/gcc/4.0.0/150-pr21951.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon May 25 17:22:54 2009 +0000 (2009-05-25)
branchgcc-4.4
changeset 1382 b3b1369752ba
permissions -rw-r--r--
/devel/gcc-4.4:
- TODO: add new item

-------- diffstat follows --------
/devel/gcc-4.4/TODO | 1 1 0 0 +
1 file changed, 1 insertion(+)
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