yann@1: Workaround for buglet in std::vector etc. when compiling yann@1: with gcc-4.0.0 -Wall -O -fno-exceptions yann@1: Fixes: yann@1: yann@1: .../include/c++/4.0.0/bits/vector.tcc: In member function 'void std::vector<_Tp, yann@1: _Alloc>::reserve(size_t) [with _Tp = int, _Alloc = std::allocator]': yann@1: .../include/c++/4.0.0/bits/vector.tcc:78: warning: control may reach end of yann@1: non-void function 'typename _Alloc::pointer std::vector<_Tp, yann@1: _Alloc>::_M_allocate_and_copy(size_t, _ForwardIterator, _ForwardIterator) [with yann@1: _ForwardIterator = int*, _Tp = int, _Alloc = std::allocator]' being inlined yann@1: yann@1: See http://gcc.gnu.org/PR21951 yann@1: yann@1: --- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h.old 2005-06-11 03:58:20.000000000 -0700 yann@1: +++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_vector.h 2005-06-11 04:01:21.000000000 -0700 yann@1: @@ -765,13 +765,13 @@ yann@1: { yann@1: std::__uninitialized_copy_a(__first, __last, __result, yann@1: this->get_allocator()); yann@1: - return __result; yann@1: } yann@1: catch(...) yann@1: { yann@1: _M_deallocate(__result, __n); yann@1: __throw_exception_again; yann@1: } yann@1: + return __result; yann@1: } yann@1: yann@1: yann@1: --- gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h.old 2005-06-11 03:58:20.000000000 -0700 yann@1: +++ gcc-4.0.1-20050607/libstdc++-v3/include/bits/stl_uninitialized.h 2005-06-11 04:05:18.990003248 -0700 yann@1: @@ -84,13 +84,13 @@ yann@1: { yann@1: for (; __first != __last; ++__first, ++__cur) yann@1: std::_Construct(&*__cur, *__first); yann@1: - return __cur; yann@1: } yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __cur); yann@1: __throw_exception_again; yann@1: } yann@1: + return __cur; yann@1: } yann@1: yann@1: /** yann@1: @@ -236,13 +236,13 @@ yann@1: { yann@1: for (; __first != __last; ++__first, ++__cur) yann@1: __alloc.construct(&*__cur, *__first); yann@1: - return __cur; yann@1: } yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __cur, __alloc); yann@1: __throw_exception_again; yann@1: } yann@1: + return __cur; yann@1: } yann@1: yann@1: template yann@1: @@ -337,11 +337,13 @@ yann@1: { yann@1: return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); yann@1: } yann@1: +#ifdef __EXCEPTIONS // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __mid, __alloc); yann@1: __throw_exception_again; yann@1: } yann@1: +#endif yann@1: } yann@1: yann@1: // __uninitialized_fill_copy yann@1: @@ -360,11 +362,13 @@ yann@1: { yann@1: return std::__uninitialized_copy_a(__first, __last, __mid, __alloc); yann@1: } yann@1: +#ifdef __EXCEPTIONS // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __mid, __alloc); yann@1: __throw_exception_again; yann@1: } yann@1: +#endif yann@1: } yann@1: yann@1: // __uninitialized_copy_fill yann@1: --- gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope.old 2005-06-11 03:58:20.000000000 -0700 yann@1: +++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/rope 2005-06-11 04:13:26.628870872 -0700 yann@1: @@ -1645,11 +1645,13 @@ yann@1: _S_cond_store_eos(__buf[__size]); yann@1: try yann@1: { return _S_new_RopeLeaf(__buf, __size, __a); } yann@1: +#ifdef __EXCEPTIONS // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only yann@1: catch(...) yann@1: { yann@1: _RopeRep::__STL_FREE_STRING(__buf, __size, __a); yann@1: __throw_exception_again; yann@1: } yann@1: +#endif yann@1: } yann@1: yann@1: // Concatenation of nonempty strings. yann@1: --- gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory.old 2005-06-11 03:58:20.000000000 -0700 yann@1: +++ gcc-4.0.1-20050607/libstdc++-v3/include/ext/memory 2005-06-11 04:13:52.897877376 -0700 yann@1: @@ -85,11 +85,13 @@ yann@1: std::_Construct(&*__cur, *__first); yann@1: return pair<_InputIter, _ForwardIter>(__first, __cur); yann@1: } yann@1: +#ifdef __EXCEPTIONS // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __cur); yann@1: __throw_exception_again; yann@1: } yann@1: +#endif yann@1: } yann@1: yann@1: template yann@1: @@ -144,11 +146,13 @@ yann@1: __alloc.construct(&*__cur, *__first); yann@1: return pair<_InputIter, _ForwardIter>(__first, __cur); yann@1: } yann@1: +#ifdef __EXCEPTIONS // work around http://gcc.gnu.org/PR21951 in gcc-4.0 only yann@1: catch(...) yann@1: { yann@1: std::_Destroy(__result, __cur, __alloc); yann@1: __throw_exception_again; yann@1: } yann@1: +#endif yann@1: } yann@1: yann@1: templateget_allocator().construct(&__n->_M_val, __obj); yann@1: - return __n; yann@1: } yann@1: catch(...) yann@1: { yann@1: _M_put_node(__n); yann@1: __throw_exception_again; yann@1: } yann@1: + return __n; yann@1: } yann@1: yann@1: void