This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[v3] -fno-exceptions, round two



Updated patch. Getting closer.......

2001-02-12  Benjamin Kosnik  <bkoz@redhat.com>

	Add support for -fno-exceptions.
	* include/bits/exception_support.h: Remove.
	* include/bits/basic_string.h: Remove exception_support.
	(string::_M_check): Replace __OUTOFRANGE with __throw_out_of_range.
	(string::at): Same.
	(string::substr): Same.
	* include/bits/basic_string.tcc (string::reserve): Replace
	__LENGTHERROR with __throw_length_error.
	(string::_S_create): Same.
	(string::resize): Same.
	(string::_M_replace): Same.
	(string::replace): Same.
	(string::copy): Replace __OUTOFRANGE with __throw_out_of_range.
	(string::compare): Same.
	* include/bits/stl_vector.h: Remove exception_support.
	* src/Makefile.am (base_headers): Remove here.
	* src/Makefile.in: Regenerate.

	* include/bits/stl_range_errors.h: Remove.
	* include/bits/stl_deque.h: Use __throw_range_error.
	* include/bits/std_deque.h: Include functexcept.h.
	* include/bits/std_vector.h: Same.
	* src/Makefile.am (base_headers): Remove here.
	* src/Makefile.in: Regenerate.
	* include/ext/stl_bvector.h (class __BVECTOR): Use __throw_range_error.
	* include/ext/bvector: Remove stl_range_errors.h

	* include/bits/c++config (_GLIBCPP_USE_EXCEPTIONS): Remove.

	* include/bits/functexcept.h: New file.
	* src/functexcept.cc: New file. Definitions for function-based
	exception routines.
	* src/Makefile.am (sources): Add functexcept.cc.
	* src/Makefile.in: Regenerate.

	* include/bits/stl_config.h (__STL_USE_EXCEPTIONS): Wrap with
	__EXCEPTIONS.

	* include/bits/localefwd.h: Include functexcept.h.
	* include/bits/std_iosfwd.h: Same.

	* include/bits/basic_ios.h: Use __throw_ios_failure instead of
	throw basic_ios::failure.
	* include/bits/fstream.tcc (filebuf::_M_allocate_buffers):
	Use __throw_exception_again.
	(filebuf::_M_filebuf_init): Same.
	* include/bits/streambuf.tcc (__copy_streambufs): Same.
	* include/bits/ostream.tcc (ostream::operator<<): Same.
	* include/bits/istream.tcc (istream::operator>>): Same.
	* include/bits/basic_string.tcc (string::_M_mutate): Same.
	(string::_S_construct): Same.
	(string::_M_clone): Same.
	* include/bits/locale_facets.tcc (use_facet(const locale&)): Use
	__throw_bad_cast.
	(num_put<_CharT, _OutIter>::do_put): Use __throw_exception_again.
	* src/localename.cc (locale::_Imp::_Imp(const _Impl&, size_t): Use
	__throw_exception_again.
	(locale::_Imp::_Imp(string, size_t): Same.
	(locale::_Imp::_M_replace_facet): Use __throw_runtime_error.
	* src/locale.cc (locale::_M_coalesce): Use __throw_exception_again.
	(locale::locale(const char*)): Use __throw_runtime_error.
	(locale::classic): Use __throw_exception_again.
	(locale::_S_normalize_category): Use __throw_runtime_error.

	* src/stdexcept.cc: Remove cruft.

	* libsupc++/new_opnt.cc: Include functexcept.h.
	* libsupc++/vec.cc: Same.
	(__cxa_vec_new2): Use __throw_exception_again.
	(__cxa_vec_new3): Same.
	(__cxa_vec_ctor): Same.
	(__cxa_vec_delete3): Same.
	(__cxa_vec_cctor): Same.
	(__cxa_vec_delete2): Same.
	(__cxa_vec_dtor): Same.
	* libsupc++/exception_support.cc: Include bits/functexcept.h. Only
	compile exception-handling bits if __EXCEPTIONS is defined.
	Remove old ABI support.
	* libsupc++/new_op.cc (new): Include functexcept.h. Use
	std::__throw_bad_alloc() instead of throw bad_alloc.

Index: include/bits/basic_ios.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/basic_ios.h,v
retrieving revision 1.1
diff -c -p -r1.1 basic_ios.h
*** basic_ios.h	2000/10/05 11:27:01	1.1
--- basic_ios.h	2001/02/14 23:23:31
***************
*** 1,6 ****
  // Iostreams base classes -*- C++ -*-
  
! // Copyright (C) 1997-1999 Free Software Foundation, Inc.
  //
  // This file is part of the GNU ISO C++ Library.  This library is free
  // software; you can redistribute it and/or modify it under the
--- 1,6 ----
  // Iostreams base classes -*- C++ -*-
  
! // Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
  //
  // This file is part of the GNU ISO C++ Library.  This library is free
  // software; you can redistribute it and/or modify it under the
*************** namespace std {
*** 105,111 ****
  	else
  	  _M_streambuf_state = __state | badbit;
  	if ((this->rdstate() & this->exceptions()))
! 	  throw failure("basic_ios::clear(iostate) caused exception");
        }
  
        inline void 
--- 105,111 ----
  	else
  	  _M_streambuf_state = __state | badbit;
  	if ((this->rdstate() & this->exceptions()))
! 	  __throw_ios_failure("basic_ios::clear(iostate) caused exception");
        }
  
        inline void 
Index: include/bits/basic_string.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/basic_string.h,v
retrieving revision 1.4
diff -c -p -r1.4 basic_string.h
*** basic_string.h	2001/02/07 20:26:24	1.4
--- basic_string.h	2001/02/14 23:23:34
***************
*** 34,40 ****
  #ifndef _CPP_BITS_STRING_H
  #define _CPP_BITS_STRING_H	1
  
- #include <bits/exception_support.h>
  #include <bits/atomicity.h>
  
  namespace std {
--- 34,39 ----
*************** namespace std {
*** 261,267 ****
        iterator 
        _M_check(size_type __pos) const
        { 
! 	__OUTOFRANGE(__pos > this->size()); 
  	return _M_ibegin() + __pos; 
        }
  
--- 260,267 ----
        iterator 
        _M_check(size_type __pos) const
        { 
! 	if (__pos > this->size())
! 	  __throw_out_of_range("basic_string::_M_check"); 
  	return _M_ibegin() + __pos; 
        }
  
*************** namespace std {
*** 432,445 ****
        const_reference 
        at(size_type __n) const
        {
! 	__OUTOFRANGE(__n >= this->size());
  	return _M_data()[__n]; 
        }
  
        reference 
        at(size_type __n)
        {
! 	__OUTOFRANGE(__n >= size());
  	_M_leak(); 
  	return _M_data()[__n]; 
        }
--- 432,447 ----
        const_reference 
        at(size_type __n) const
        {
! 	if (__n >= this->size())
! 	  __throw_out_of_range("basic_string::at");
  	return _M_data()[__n]; 
        }
  
        reference 
        at(size_type __n)
        {
! 	if (__n >= size())
! 	  __throw_out_of_range("basic_string::at");
  	_M_leak(); 
  	return _M_data()[__n]; 
        }
*************** namespace std {
*** 809,815 ****
        basic_string 
        substr(size_type __pos = 0, size_type __n = npos) const
        { 
! 	__OUTOFRANGE(__pos > this->size());
  	return basic_string(*this, __pos, __n); 
        }
  
--- 811,818 ----
        basic_string 
        substr(size_type __pos = 0, size_type __n = npos) const
        { 
! 	if (__pos > this->size())
! 	  __throw_out_of_range("basic_string::substr");
  	return basic_string(*this, __pos, __n); 
        }
  
Index: include/bits/basic_string.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/basic_string.tcc,v
retrieving revision 1.2
diff -c -p -r1.2 basic_string.tcc
*** basic_string.tcc	2001/01/12 21:24:15	1.2
--- basic_string.tcc	2001/02/14 23:23:36
*************** namespace std
*** 87,130 ****
  	_Rep* __r = _Rep::_S_create(__i, __a);
  	traits_type::copy(__r->_M_refdata(), __buf, __i);
  	__r->_M_length = __i;
! 	try {
! 	  // NB: this loop looks precisely this way because
! 	  // it avoids comparing __beg != __end any more
! 	  // than strictly necessary; != might be expensive!
! 	  for (;;)
! 	    {
! 	      _CharT* __p = __r->_M_refdata() + __r->_M_length;
! 	      _CharT* __last = __r->_M_refdata() + __r->_M_capacity;
! 	      for (;;)
! 		{
! 		  if (__beg == __end)
! 		    {
! 		      __r->_M_length = __p - __r->_M_refdata();
! 		      *__p = _Rep::_S_terminal;       // grrr.
! 		      return __r->_M_refdata();
! 		    }
! 		  if (__p == __last)
! 		    break;
! 		  *__p++ = *__beg; 
! 		  ++__beg;
! 		}
! 	      // Allocate more space.
! 	      size_type __len = __p - __r->_M_refdata();
! 	      _Rep* __another = _Rep::_S_create(__len + 1, __a);
! 	      traits_type::copy(__another->_M_refdata(), 
! 				__r->_M_refdata(), __len);
! 	      __r->_M_destroy(__a);
! 	      __r = __another;
! 	      __r->_M_length = __len;
! 	    }
! 	}
! 	catch (...) {
  	    __r->_M_destroy(__a); 
! 	    throw;
! 	}
  	return 0;
        }
! 
    template<typename _CharT, typename _Traits, typename _Alloc>
      template <class _InIter>
        _CharT*
--- 87,132 ----
  	_Rep* __r = _Rep::_S_create(__i, __a);
  	traits_type::copy(__r->_M_refdata(), __buf, __i);
  	__r->_M_length = __i;
! 	try 
! 	  {
! 	    // NB: this loop looks precisely this way because
! 	    // it avoids comparing __beg != __end any more
! 	    // than strictly necessary; != might be expensive!
! 	    for (;;)
! 	      {
! 		_CharT* __p = __r->_M_refdata() + __r->_M_length;
! 		_CharT* __last = __r->_M_refdata() + __r->_M_capacity;
! 		for (;;)
! 		  {
! 		    if (__beg == __end)
! 		      {
! 			__r->_M_length = __p - __r->_M_refdata();
! 			*__p = _Rep::_S_terminal;       // grrr.
! 			return __r->_M_refdata();
! 		      }
! 		    if (__p == __last)
! 		      break;
! 		    *__p++ = *__beg; 
! 		    ++__beg;
! 		  }
! 		// Allocate more space.
! 		size_type __len = __p - __r->_M_refdata();
! 		_Rep* __another = _Rep::_S_create(__len + 1, __a);
! 		traits_type::copy(__another->_M_refdata(), 
! 				  __r->_M_refdata(), __len);
! 		__r->_M_destroy(__a);
! 		__r = __another;
! 		__r->_M_length = __len;
! 	      }
! 	  }
! 	catch(...) 
! 	  {
  	    __r->_M_destroy(__a); 
! 	    __throw_exception_again;
! 	  }
  	return 0;
        }
!   
    template<typename _CharT, typename _Traits, typename _Alloc>
      template <class _InIter>
        _CharT*
*************** namespace std
*** 139,151 ****
  
  	// Check for out_of_range and length_error exceptions.
  	_Rep* __r = _Rep::_S_create(__dnew, __a);
! 	try { 
! 	  _S_copy_chars(__r->_M_refdata(), __beg, __end); 
! 	}
! 	catch (...) { 
! 	  __r->_M_destroy(__a); 
! 	  throw; 
! 	}
  	__r->_M_length = __dnew;
  
  	__r->_M_refdata()[__dnew] = _Rep::_S_terminal;  // grrr.
--- 141,153 ----
  
  	// Check for out_of_range and length_error exceptions.
  	_Rep* __r = _Rep::_S_create(__dnew, __a);
! 	try 
! 	  { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
! 	catch(...) 
! 	  { 
! 	    __r->_M_destroy(__a); 
! 	    __throw_exception_again;
! 	  }
  	__r->_M_length = __dnew;
  
  	__r->_M_refdata()[__dnew] = _Rep::_S_terminal;  // grrr.
*************** namespace std
*** 162,175 ****
  
        // Check for out_of_range and length_error exceptions.
        _Rep* __r = _Rep::_S_create(__n, __a);
!       try { 
! 	if (__n) 
! 	  traits_type::assign(__r->_M_refdata(), __n, __c); 
!       }
!       catch (...) { 
! 	__r->_M_destroy(__a); 
! 	throw; 
!       }
        __r->_M_length = __n;
        __r->_M_refdata()[__n] = _Rep::_S_terminal;  // grrr
        return __r->_M_refdata();
--- 164,179 ----
  
        // Check for out_of_range and length_error exceptions.
        _Rep* __r = _Rep::_S_create(__n, __a);
!       try 
! 	{ 
! 	  if (__n) 
! 	    traits_type::assign(__r->_M_refdata(), __n, __c); 
! 	}
!       catch(...) 
! 	{ 
! 	  __r->_M_destroy(__a); 
! 	  __throw_exception_again;
! 	}
        __r->_M_length = __n;
        __r->_M_refdata()[__n] = _Rep::_S_terminal;  // grrr
        return __r->_M_refdata();
*************** namespace std
*** 276,292 ****
  	  // Must reallocate.
  	  allocator_type __a = get_allocator();
  	  _Rep* __r = _Rep::_S_create(__new_size, __a);
! 	  try {
! 	    if (__pos)
! 	      traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
! 	    if (__how_much)
! 	      traits_type::copy(__r->_M_refdata() + __pos + __len2, 
! 				__src, __how_much);
! 	  }
! 	  catch (...) { 
! 	    __r->_M_dispose(get_allocator()); 
! 	    throw; 
! 	  }
  	  _M_rep()->_M_dispose(__a);
  	  _M_data(__r->_M_refdata());
        }
--- 280,298 ----
  	  // Must reallocate.
  	  allocator_type __a = get_allocator();
  	  _Rep* __r = _Rep::_S_create(__new_size, __a);
! 	  try 
! 	    {
! 	      if (__pos)
! 		traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
! 	      if (__how_much)
! 		traits_type::copy(__r->_M_refdata() + __pos + __len2, 
! 				  __src, __how_much);
! 	    }
! 	  catch(...) 
! 	    { 
! 	      __r->_M_dispose(get_allocator()); 
! 	      __throw_exception_again;
! 	    }
  	  _M_rep()->_M_dispose(__a);
  	  _M_data(__r->_M_refdata());
        }
*************** namespace std
*** 307,313 ****
      {
        if (__res > this->capacity() || _M_rep()->_M_is_shared())
          {
! 	  __LENGTHERROR(__res > this->max_size());
  	  allocator_type __a = get_allocator();
  	  _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
  	  _M_rep()->_M_dispose(__a);
--- 313,320 ----
      {
        if (__res > this->capacity() || _M_rep()->_M_is_shared())
          {
! 	  if (__res > this->max_size())
! 	    __throw_length_error("basic_string::reserve");
  	  allocator_type __a = get_allocator();
  	  _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
  	  _M_rep()->_M_dispose(__a);
*************** namespace std
*** 351,363 ****
      basic_string<_CharT, _Traits, _Alloc>::_Rep::
      _S_create(size_t __capacity, const _Alloc& __alloc)
      {
  #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
        // 83.  String::npos vs. string::max_size()
!       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
!       __LENGTHERROR(__capacity > _S_max_size);
  #else
!       __LENGTHERROR(__capacity == npos);
  #endif
  
        // NB: Need an array of char_type[__capacity], plus a
        // terminating null char_type() element, plus enough for the
--- 358,371 ----
      basic_string<_CharT, _Traits, _Alloc>::_Rep::
      _S_create(size_t __capacity, const _Alloc& __alloc)
      {
+       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
  #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
        // 83.  String::npos vs. string::max_size()
!       if (__capacity > _S_max_size)
  #else
!       if (__capacity == npos)
  #endif
+ 	__throw_length_error("basic_string::_S_create");
  
        // NB: Need an array of char_type[__capacity], plus a
        // terminating null char_type() element, plus enough for the
*************** namespace std
*** 381,393 ****
        _Rep* __r = _Rep::_S_create(_M_length + __res, __alloc);
        if (_M_length)
  	{
! 	  try { 
! 	    traits_type::copy(__r->_M_refdata(), _M_refdata(), _M_length); 
! 	  }
! 	  catch (...)  { 
! 	    __r->_M_destroy(__alloc); 
! 	    throw; 
! 	  }
  	}
        __r->_M_length = _M_length;
        return __r->_M_refdata();
--- 389,401 ----
        _Rep* __r = _Rep::_S_create(_M_length + __res, __alloc);
        if (_M_length)
  	{
! 	  try 
! 	    { traits_type::copy(__r->_M_refdata(), _M_refdata(), _M_length); }
! 	  catch(...)  
! 	    { 
! 	      __r->_M_destroy(__alloc); 
! 	      __throw_exception_again;
! 	    }
  	}
        __r->_M_length = _M_length;
        return __r->_M_refdata();
*************** namespace std
*** 410,416 ****
      void
      basic_string<_CharT, _Traits, _Alloc>::resize(size_type __n, _CharT __c)
      {
!       __LENGTHERROR(__n > max_size());
        size_type __size = this->size();
        if (__size < __n)
  	this->append(__n - __size, __c);
--- 418,425 ----
      void
      basic_string<_CharT, _Traits, _Alloc>::resize(size_type __n, _CharT __c)
      {
!       if (__n > max_size())
! 	__throw_length_error("basic_string::resize");
        size_type __size = this->size();
        if (__size < __n)
  	this->append(__n - __size, __c);
*************** namespace std
*** 441,447 ****
  	size_type __dmax = this->max_size();
  	size_type __dnew = static_cast<size_type>(distance(__k1, __k2));
  
! 	__LENGTHERROR(__dmax <= __dnew);
  	size_type __off = __i1 - _M_ibegin();
  	_M_mutate(__off, __dold, __dnew);
  	// Invalidated __i1, __i2
--- 450,457 ----
  	size_type __dmax = this->max_size();
  	size_type __dnew = static_cast<size_type>(distance(__k1, __k2));
  
! 	if (__dmax <= __dnew)
! 	  __throw_length_error("basic_string::_M_replace");
  	size_type __off = __i1 - _M_ibegin();
  	_M_mutate(__off, __dold, __dnew);
  	// Invalidated __i1, __i2
*************** namespace std
*** 551,557 ****
      {
        size_type __n1 = __i2 - __i1;
        size_type __off1 = __i1 - _M_ibegin();
!       __LENGTHERROR(max_size() - (this->size() - __n1) <= __n2);
        _M_mutate (__off1, __n1, __n2);
        // Invalidated __i1, __i2
        if (__n2)
--- 561,568 ----
      {
        size_type __n1 = __i2 - __i1;
        size_type __off1 = __i1 - _M_ibegin();
!       if (max_size() - (this->size() - __n1) <= __n2)
! 	__throw_length_error("basic_string::replace");
        _M_mutate (__off1, __n1, __n2);
        // Invalidated __i1, __i2
        if (__n2)
*************** namespace std
*** 564,570 ****
      basic_string<_CharT, _Traits, _Alloc>::
      copy(_CharT* __s, size_type __n, size_type __pos) const
      {
!       __OUTOFRANGE(__pos > this->size());
        
        if (__n > this->size() - __pos)
  	__n = this->size() - __pos;
--- 575,582 ----
      basic_string<_CharT, _Traits, _Alloc>::
      copy(_CharT* __s, size_type __n, size_type __pos) const
      {
!       if (__pos > this->size())
! 	__throw_out_of_range("basic_string::copy");
        
        if (__n > this->size() - __pos)
  	__n = this->size() - __pos;
*************** namespace std
*** 751,757 ****
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
!       __OUTOFRANGE(__pos > __size);
        
        size_type __rsize= min(__size - __pos, __n);
        size_type __len = min(__rsize, __osize);
--- 763,770 ----
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
!       if (__pos > __size)
! 	__throw_out_of_range("basic_string::compare");
        
        size_type __rsize= min(__size - __pos, __n);
        size_type __len = min(__rsize, __osize);
*************** namespace std
*** 769,776 ****
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
!       __OUTOFRANGE(__pos1 > __size);
!       __OUTOFRANGE(__pos2 > __osize);
        
        size_type __rsize = min(__size - __pos1, __n1);
        size_type __rosize = min(__osize - __pos2, __n2);
--- 782,789 ----
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
!       if (__pos1 > __size || __pos2 > __osize)
! 	__throw_out_of_range("basic_string::compare");
        
        size_type __rsize = min(__size - __pos1, __n1);
        size_type __rosize = min(__osize - __pos2, __n2);
*************** namespace std
*** 803,809 ****
  	    size_type __n2) const
      {
        size_type __size = this->size();
!       __OUTOFRANGE(__pos > __size);
        
        size_type __osize = min(traits_type::length(__s), __n2);
        size_type __rsize = min(__size - __pos, __n1);
--- 816,823 ----
  	    size_type __n2) const
      {
        size_type __size = this->size();
!       if (__pos > __size)
! 	__throw_out_of_range("basic_string::compare");
        
        size_type __osize = min(traits_type::length(__s), __n2);
        size_type __rsize = min(__size - __pos, __n1);
Index: include/bits/c++config
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/c++config,v
retrieving revision 1.8
diff -c -p -r1.8 c++config
*** c++config	2001/01/03 15:53:28	1.8
--- c++config	2001/02/14 23:23:36
***************
*** 36,47 ****
  // The current version of the C++ library in compressed ISO date format.
  #define __GLIBCPP__ 20010102
  
- // This flag controls the error handling in string, and perhaps other
- // bits as time goes on: check out bits/basic_string.h for more
- // info. It also helps alleviate the circular dependency between
- // string and exception.
- # define _GLIBCPP_USE_EXCEPTIONS 1 
- 
  // This is necessary until GCC supports separate template
  // compilation.  
  #define _GLIBCPP_NO_TEMPLATE_EXPORT 1
--- 36,41 ----
Index: include/bits/fstream.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/fstream.tcc,v
retrieving revision 1.4
diff -c -p -r1.4 fstream.tcc
*** fstream.tcc	2001/01/16 07:55:25	1.4
--- fstream.tcc	2001/02/14 23:23:37
*************** namespace std
*** 49,55 ****
  	  catch(...) 
  	    {
  	      delete _M_file;
! 	      throw;
  	    }
  	}
      }
--- 49,55 ----
  	  catch(...) 
  	    {
  	      delete _M_file;
! 	      __throw_exception_again;
  	    }
  	}
      }
*************** namespace std
*** 67,73 ****
  	  catch(...) 
  	    {
  	      delete [] _M_buf;
! 	      throw;
  	    }
  	  
  	  // Allocate pback buffer.
--- 67,73 ----
  	  catch(...) 
  	    {
  	      delete [] _M_buf;
! 	      __throw_exception_again;
  	    }
  	  
  	  // Allocate pback buffer.
*************** namespace std
*** 76,82 ****
  	  catch(...) 
  	    {
  	      delete [] _M_pback;
! 	      throw;
  	    }
  	}
      }
--- 76,82 ----
  	  catch(...) 
  	    {
  	      delete [] _M_pback;
! 	      __throw_exception_again;
  	    }
  	}
      }
Index: include/bits/istream.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/istream.tcc,v
retrieving revision 1.5
diff -c -p -r1.5 istream.tcc
*** istream.tcc	2001/02/07 01:54:19	1.5
--- istream.tcc	2001/02/14 23:23:40
*************** namespace std {
*** 92,98 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 92,98 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 114,120 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 114,120 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 136,142 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 136,142 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 160,166 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 160,166 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 184,190 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 184,190 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 208,214 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 208,214 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 232,238 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 232,238 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 256,262 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 256,262 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 280,286 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 280,286 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 304,310 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 304,310 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 329,335 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 329,335 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 353,359 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 353,359 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 378,384 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 378,384 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 402,408 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 402,408 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 426,432 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 426,432 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 450,456 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 450,456 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 495,501 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __c;
--- 495,501 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __c;
*************** namespace std {
*** 527,533 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 527,533 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 568,574 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        *__s = char_type(NULL);
--- 568,574 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        *__s = char_type(NULL);
*************** namespace std {
*** 664,670 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        *__s = char_type(NULL);
--- 664,670 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        *__s = char_type(NULL);
*************** namespace std {
*** 708,714 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 708,714 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 732,738 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	} 
        return __c;
--- 732,738 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	} 
        return __c;
*************** namespace std {
*** 776,782 ****
  		// Turn this on without causing an ios::failure to be thrown.
  		this->setstate(ios_base::badbit);
  		if ((this->exceptions() & ios_base::badbit) != 0)
! 		  throw;
  	      }
  	    }
  	}
--- 776,782 ----
  		// Turn this on without causing an ios::failure to be thrown.
  		this->setstate(ios_base::badbit);
  		if ((this->exceptions() & ios_base::badbit) != 0)
! 		  __throw_exception_again;
  	      }
  	    }
  	}
*************** namespace std {
*** 813,819 ****
  		// Turn this on without causing an ios::failure to be thrown.
  		this->setstate(ios_base::badbit);
  		if ((this->exceptions() & ios_base::badbit) != 0)
! 		  throw;
  	      }
  	    }
  	}
--- 813,819 ----
  		// Turn this on without causing an ios::failure to be thrown.
  		this->setstate(ios_base::badbit);
  		if ((this->exceptions() & ios_base::badbit) != 0)
! 		  __throw_exception_again;
  	      }
  	    }
  	}
*************** namespace std {
*** 841,847 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        else
--- 841,847 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        else
*************** namespace std {
*** 869,875 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        else
--- 869,875 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        else
*************** namespace std {
*** 899,905 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __ret;
--- 899,905 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __ret;
*************** namespace std {
*** 923,929 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __ret;
--- 923,929 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __ret;
*************** namespace std {
*** 950,956 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 950,956 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 976,982 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 976,982 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 999,1005 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __in.setstate(ios_base::badbit);
  	    if ((__in.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        else
--- 999,1005 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __in.setstate(ios_base::badbit);
  	    if ((__in.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        else
*************** namespace std {
*** 1059,1065 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __in.setstate(ios_base::badbit);
  	    if ((__in.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        if (!__extracted)
--- 1059,1065 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __in.setstate(ios_base::badbit);
  	    if ((__in.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        if (!__extracted)
Index: include/bits/locale_facets.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/locale_facets.tcc,v
retrieving revision 1.8
diff -c -p -r1.8 locale_facets.tcc
*** locale_facets.tcc	2001/02/07 01:54:19	1.8
--- locale_facets.tcc	2001/02/14 23:23:45
*************** namespace std
*** 75,81 ****
        __vec_facet* __facet = __loc._M_impl->_M_facets;
        const locale::facet* __fp = (*__facet)[__i]; 
        if (__fp == 0 || __i >= __facet->size())
!         throw bad_cast();
        return static_cast<const _Facet&>(*__fp);
      }
  
--- 75,81 ----
        __vec_facet* __facet = __loc._M_impl->_M_facets;
        const locale::facet* __fp = (*__facet)[__i]; 
        if (__fp == 0 || __i >= __facet->size())
!         __throw_bad_cast();
        return static_cast<const _Facet&>(*__fp);
      }
  
*************** namespace std
*** 1098,1104 ****
        }
        catch (...) {
          __io.flags(__fmt);
!         throw;
        }
      }
  
--- 1098,1104 ----
        }
        catch (...) {
          __io.flags(__fmt);
!         __throw_exception_again;
        }
      }
  
Index: include/bits/localefwd.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/localefwd.h,v
retrieving revision 1.11
diff -c -p -r1.11 localefwd.h
*** localefwd.h	2001/02/07 20:26:24	1.11
--- localefwd.h	2001/02/14 23:23:46
***************
*** 35,44 ****
  #define _CPP_BITS_LOCCORE_H	1
  
  #include <bits/c++config.h>
  #include <bits/std_climits.h>	// For CHAR_BIT
  #include <bits/std_string.h> 	// For string
  #include <bits/std_cctype.h>	// For isspace, etc.
! #include <bits/c++locale.h>     // Defines __c_locale.
  
  namespace std
  {
--- 35,45 ----
  #define _CPP_BITS_LOCCORE_H	1
  
  #include <bits/c++config.h>
+ #include <bits/c++locale.h>     // Defines __c_locale.
  #include <bits/std_climits.h>	// For CHAR_BIT
  #include <bits/std_string.h> 	// For string
  #include <bits/std_cctype.h>	// For isspace, etc.
! #include <bits/functexcept.h>
  
  namespace std
  {
Index: include/bits/ostream.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/ostream.tcc,v
retrieving revision 1.2
diff -c -p -r1.2 ostream.tcc
*** ostream.tcc	2001/02/07 01:54:19	1.2
--- ostream.tcc	2001/02/14 23:23:47
*************** namespace std {
*** 59,65 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 		throw;
  	  }
  	}
        return *this;
--- 59,65 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 81,87 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 		throw;
  	  }
  	}
        return *this;
--- 81,87 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 103,109 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 		throw;
  	  }
  	}
        return *this;
--- 103,109 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 125,131 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 125,131 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 155,161 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 155,161 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 177,183 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 177,183 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 206,212 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 206,212 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 228,234 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 228,234 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 251,257 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 251,257 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 273,279 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 273,279 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 295,301 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return *this;
--- 295,301 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    this->setstate(ios_base::badbit);
  	    if ((this->exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return *this;
*************** namespace std {
*** 512,518 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __out;
--- 512,518 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __out;
*************** namespace std {
*** 545,551 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __out;
--- 545,551 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __out;
*************** namespace std {
*** 577,583 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __out;
--- 577,583 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __out;
*************** namespace std {
*** 620,626 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __out;
--- 620,626 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __out;
*************** namespace std {
*** 653,659 ****
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      throw;
  	  }
  	}
        return __out;
--- 653,659 ----
  	    // Turn this on without causing an ios::failure to be thrown.
  	    __out.setstate(ios_base::badbit);
  	    if ((__out.exceptions() & ios_base::badbit) != 0)
! 	      __throw_exception_again;
  	  }
  	}
        return __out;
Index: include/bits/std_deque.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/std_deque.h,v
retrieving revision 1.1
diff -c -p -r1.1 std_deque.h
*** std_deque.h	2000/10/05 11:27:01	1.1
--- std_deque.h	2001/02/14 23:23:48
***************
*** 27,33 ****
  #ifndef _CPP_DEQUE
  #define _CPP_DEQUE 1
  
! #include <bits/stl_range_errors.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_alloc.h>
  #include <bits/stl_construct.h>
--- 27,33 ----
  #ifndef _CPP_DEQUE
  #define _CPP_DEQUE 1
  
! #include <bits/functexcept.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_alloc.h>
  #include <bits/stl_construct.h>
Index: include/bits/std_iosfwd.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/std_iosfwd.h,v
retrieving revision 1.2
diff -c -p -r1.2 std_iosfwd.h
*** std_iosfwd.h	2001/02/07 20:26:24	1.2
--- std_iosfwd.h	2001/02/14 23:23:48
***************
*** 1,6 ****
  // Forwarding declarations -*- C++ -*-
  
! // Copyright (C) 1997-1999 Free Software Foundation, Inc.
  //
  // This file is part of the GNU ISO C++ Library.  This library is free
  // software; you can redistribute it and/or modify it under the
--- 1,6 ----
  // Forwarding declarations -*- C++ -*-
  
! // Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
  //
  // This file is part of the GNU ISO C++ Library.  This library is free
  // software; you can redistribute it and/or modify it under the
***************
*** 37,42 ****
--- 37,43 ----
  #include <bits/c++config.h>
  #include <bits/std_cwchar.h> // For mbstate_t
  #include <bits/stringfwd.h> // For string forward declarations.
+ #include <bits/functexcept.h>
  
  namespace std 
  {
Index: include/bits/std_vector.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/std_vector.h,v
retrieving revision 1.1
diff -c -p -r1.1 std_vector.h
*** std_vector.h	2000/10/05 11:27:01	1.1
--- std_vector.h	2001/02/14 23:23:48
***************
*** 27,33 ****
  #ifndef _CPP_VECTOR
  #define _CPP_VECTOR 1
  
! #include <bits/stl_range_errors.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_alloc.h>
  #include <bits/stl_construct.h>
--- 27,33 ----
  #ifndef _CPP_VECTOR
  #define _CPP_VECTOR 1
  
! #include <bits/functexcept.h>
  #include <bits/stl_algobase.h>
  #include <bits/stl_alloc.h>
  #include <bits/stl_construct.h>
Index: include/bits/stl_config.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/stl_config.h,v
retrieving revision 1.3
diff -c -p -r1.3 stl_config.h
*** stl_config.h	2000/11/25 19:36:53	1.3
--- stl_config.h	2001/02/14 23:23:50
***************
*** 265,271 ****
  #   define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
  #   define __STL_HAS_NAMESPACES
  #   define __STL_USE_NAMESPACES
! #   define __STL_USE_EXCEPTIONS
  #   define __STL_THROW_RANGE_ERRORS 
  #   define __STL_CAN_THROW_RANGE_ERRORS 
  #   define __STL_USE_STD_ALLOCATORS 
--- 265,273 ----
  #   define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
  #   define __STL_HAS_NAMESPACES
  #   define __STL_USE_NAMESPACES
! #   ifdef __EXCEPTIONS
! #     define __STL_USE_EXCEPTIONS
! #   endif
  #   define __STL_THROW_RANGE_ERRORS 
  #   define __STL_CAN_THROW_RANGE_ERRORS 
  #   define __STL_USE_STD_ALLOCATORS 
Index: include/bits/stl_deque.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/stl_deque.h,v
retrieving revision 1.1
diff -c -p -r1.1 stl_deque.h
*** stl_deque.h	2000/10/05 11:27:01	1.1
--- stl_deque.h	2001/02/14 23:23:54
*************** public:                         // Basic
*** 499,505 ****
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __stl_throw_range_error("deque");
    }
  
    reference at(size_type __n)
--- 499,505 ----
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __throw_range_error("deque");
    }
  
    reference at(size_type __n)
Index: include/bits/stl_vector.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/stl_vector.h,v
retrieving revision 1.1
diff -c -p -r1.1 stl_vector.h
*** stl_vector.h	2000/10/05 11:27:01	1.1
--- stl_vector.h	2001/02/14 23:23:56
***************
*** 31,37 ****
  #ifndef __SGI_STL_INTERNAL_VECTOR_H
  #define __SGI_STL_INTERNAL_VECTOR_H
  
! #include <bits/exception_support.h>
  
  #include <bits/concept_checks.h>
  
--- 31,37 ----
  #ifndef __SGI_STL_INTERNAL_VECTOR_H
  #define __SGI_STL_INTERNAL_VECTOR_H
  
! #include <bits/functexcept.h>
  
  #include <bits/concept_checks.h>
  
*************** public:
*** 231,237 ****
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __out_of_range("vector");
    }
  
    reference at(size_type __n)
--- 231,237 ----
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __throw_out_of_range("vector");
    }
  
    reference at(size_type __n)
Index: include/bits/streambuf.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/streambuf.tcc,v
retrieving revision 1.3
diff -c -p -r1.3 streambuf.tcc
*** streambuf.tcc	2001/02/07 01:54:19	1.3
--- streambuf.tcc	2001/02/14 23:23:57
*************** namespace std {
*** 215,221 ****
        }
        catch(exception& __fail) {
  	if ((__ios.exceptions() & ios_base::failbit) != 0)
! 	  throw;
        }
        return __ret;
      }
--- 215,221 ----
        }
        catch(exception& __fail) {
  	if ((__ios.exceptions() & ios_base::failbit) != 0)
! 	  __throw_exception_again;
        }
        return __ret;
      }
Index: include/ext/bvector
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/ext/bvector,v
retrieving revision 1.1
diff -c -p -r1.1 bvector
*** bvector	2000/10/05 11:27:02	1.1
--- bvector	2001/02/14 23:23:57
***************
*** 27,40 ****
  #ifndef __SGI_STL_BVECTOR_H
  #define __SGI_STL_BVECTOR_H
  
- #include <bits/stl_range_errors.h>
- #ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- #include <bits/std_vector.h>
- #else
- #include <bits/std_algobase.h>
- #include <bits/atl_alloc.h>
- #endif 
  
  #include <ext/stl_bvector.h>
  
  #ifdef __STL_USE_NAMESPACES
--- 27,34 ----
  #ifndef __SGI_STL_BVECTOR_H
  #define __SGI_STL_BVECTOR_H
  
  
+ #include <bits/std_vector.h>
  #include <ext/stl_bvector.h>
  
  #ifdef __STL_USE_NAMESPACES
Index: include/ext/stl_bvector.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/ext/stl_bvector.h,v
retrieving revision 1.1
diff -c -p -r1.1 stl_bvector.h
*** stl_bvector.h	2000/10/05 11:27:02	1.1
--- stl_bvector.h	2001/02/14 23:23:59
*************** public:
*** 522,528 ****
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __stl_throw_range_error("vector<bool>");
    }
  
    reference at(size_type __n)
--- 522,528 ----
  #ifdef __STL_THROW_RANGE_ERRORS
    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
!       __throw_range_error("vector<bool>");
    }
  
    reference at(size_type __n)
Index: libsupc++/cxxabi.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/cxxabi.h,v
retrieving revision 1.1
diff -c -p -r1.1 cxxabi.h
*** cxxabi.h	2000/10/10 23:43:26	1.1
--- cxxabi.h	2001/02/14 23:24:01
***************
*** 1,8 ****
! /* new abi support -*- C++ -*-
!    Copyright (C) 2000
!    Free Software Foundation, Inc.
!    Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>  */
! 
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
--- 1,7 ----
! // new abi support -*- C++ -*-
!   
! // Copyright (C) 2000 Free Software Foundation, Inc.
! //
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
***************
*** 29,34 ****
--- 28,35 ----
  // invalidate any other reasons why the executable file might be covered by
  // the GNU General Public License.
  
+ // Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
+  
  /* This file declares the new abi entry points into the runtime. It is not
     normally necessary for user programs to include this header, or use the
     entry points directly. However, this header is available should that be
Index: libsupc++/del_op.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/del_op.cc,v
retrieving revision 1.1
diff -c -p -r1.1 del_op.cc
*** del_op.cc	2000/10/06 23:31:22	1.1
--- del_op.cc	2001/02/14 23:24:01
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/del_opnt.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/del_opnt.cc,v
retrieving revision 1.1
diff -c -p -r1.1 del_opnt.cc
*** del_opnt.cc	2000/10/06 23:31:22	1.1
--- del_opnt.cc	2001/02/14 23:24:01
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/del_opv.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/del_opv.cc,v
retrieving revision 1.1
diff -c -p -r1.1 del_opv.cc
*** del_opv.cc	2000/10/06 23:31:22	1.1
--- del_opv.cc	2001/02/14 23:24:01
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/del_opvnt.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/del_opvnt.cc,v
retrieving revision 1.1
diff -c -p -r1.1 del_opvnt.cc
*** del_opvnt.cc	2000/10/06 23:31:22	1.1
--- del_opvnt.cc	2001/02/14 23:24:01
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/exception
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/exception,v
retrieving revision 1.2
diff -c -p -r1.2 exception
*** exception	2001/01/17 07:44:56	1.2
--- exception	2001/02/14 23:24:01
***************
*** 1,7 ****
  // Exception Handling support header for -*- C++ -*-
  
  // Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation
! 
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
--- 1,7 ----
  // Exception Handling support header for -*- C++ -*-
  
  // Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation
! //
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
Index: libsupc++/exception_support.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/exception_support.cc,v
retrieving revision 1.8
diff -c -p -r1.8 exception_support.cc
*** exception_support.cc	2001/01/24 03:04:36	1.8
--- exception_support.cc	2001/02/14 23:24:02
***************
*** 1,10 ****
  // Functions for Exception Support for -*- C++ -*-
  
! // Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000,
! // 2001 Free Software Foundation
! 
  // This file is part of GNU CC.
! 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
--- 1,10 ----
  // Functions for Exception Support for -*- C++ -*-
  
! // Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 
! // Free Software Foundation
! //
  // This file is part of GNU CC.
! //
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
***************
*** 35,40 ****
--- 35,41 ----
  #include "exception"
  #include <cstddef>
  #include "exception_support.h"
+ #include <bits/functexcept.h>
  
  /* Define terminate, unexpected, set_terminate, set_unexpected as
     well as the default terminate func and default unexpected func.  */
*************** std::unexpected ()
*** 83,100 ****
  }
  
  /* Language-specific EH info pointer, defined in libgcc2. */
- 
  extern "C" cp_eh_info **__get_eh_info (); 	// actually void **
  
  /* Exception allocate and free, defined in libgcc2. */
  extern "C" void *__eh_alloc(std::size_t);
  extern "C" void __eh_free(void *);
  
  /* Is P the type_info node for a pointer of some kind?  */
- 
  extern bool __is_pointer (void *);
  
  
  /* OLD Compiler hook to return a pointer to the info for the current exception.
     Used by get_eh_info ().  This fudges the actualy returned value to
     point to the beginning of what USE to be the cp_eh_info structure.
--- 84,101 ----
  }
  
  /* Language-specific EH info pointer, defined in libgcc2. */
  extern "C" cp_eh_info **__get_eh_info (); 	// actually void **
+ #define CP_EH_INFO ((cp_eh_info *) *__get_eh_info ())
  
  /* Exception allocate and free, defined in libgcc2. */
  extern "C" void *__eh_alloc(std::size_t);
  extern "C" void __eh_free(void *);
  
  /* Is P the type_info node for a pointer of some kind?  */
  extern bool __is_pointer (void *);
  
  
+ #ifdef __EXCEPTIONS
  /* OLD Compiler hook to return a pointer to the info for the current exception.
     Used by get_eh_info ().  This fudges the actualy returned value to
     point to the beginning of what USE to be the cp_eh_info structure.
*************** __cp_exception_info (void)
*** 106,113 ****
    return &((*__get_eh_info ())->value);
  }
  
- #define CP_EH_INFO ((cp_eh_info *) *__get_eh_info ())
- 
  /* Old Compiler hook to return a pointer to the info for the current exception.
     Used by get_eh_info ().  */
  
--- 107,112 ----
*************** __check_null_eh_spec (void)
*** 348,381 ****
  {
    __check_eh_spec (0, 0);
  }
  
  // Helpers for rtti. Although these don't return, we give them return types so
  // that the type system is not broken.
- 
- #if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100
- #define THROW_BAD_CAST __throw_bad_cast
- #define THROW_BAD_TYPEID __throw_bad_typeid
- #else 
- #define THROW_BAD_CAST __cxa_bad_cast
- #define THROW_BAD_TYPEID __cxa_bad_typeid
- #endif
- 
  extern "C" void *
! THROW_BAD_CAST ()
  {
!   throw std::bad_cast ();
    return 0;
  }
  
  extern "C" std::type_info const &
! THROW_BAD_TYPEID ()
  {
!   throw std::bad_typeid ();
    return typeid (void);
  }
  
  /* Has the current exception been caught?  */
- 
  bool
  std::uncaught_exception () throw()
  {
--- 347,371 ----
  {
    __check_eh_spec (0, 0);
  }
+ #endif //__EXCEPTIONS
  
  // Helpers for rtti. Although these don't return, we give them return types so
  // that the type system is not broken.
  extern "C" void *
! __cxa_bad_cast ()
  {
!   std::__throw_bad_cast();
    return 0;
  }
  
  extern "C" std::type_info const &
!  __cxa_bad_typeid ()
  {
!   std::__throw_bad_typeid();
    return typeid (void);
  }
  
  /* Has the current exception been caught?  */
  bool
  std::uncaught_exception () throw()
  {
Index: libsupc++/exception_support.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/exception_support.h,v
retrieving revision 1.1
diff -c -p -r1.1 exception_support.h
*** exception_support.h	2000/11/19 04:53:38	1.1
--- exception_support.h	2001/02/14 23:24:02
***************
*** 1,5 ****
! // Copyright (C) 2000
! // Free Software Foundation, Inc.
  // 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
--- 1,4 ----
! // Copyright (C) 2000 Free Software Foundation, Inc.
  // 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
Index: libsupc++/new_handler.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/new_handler.cc,v
retrieving revision 1.1
diff -c -p -r1.1 new_handler.cc
*** new_handler.cc	2000/10/06 23:31:22	1.1
--- new_handler.cc	2001/02/14 23:24:03
***************
*** 1,4 ****
--- 1,5 ----
  // Implementation file for the -*- C++ -*- dynamic memory management header.
+ 
  // Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/new_op.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/new_op.cc,v
retrieving revision 1.2
diff -c -p -r1.2 new_op.cc
*** new_op.cc	2000/10/21 16:50:28	1.2
--- new_op.cc	2001/02/14 23:24:03
***************
*** 1,5 ****
  // Support routines for the -*- C++ -*- dynamic memory management.
! // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
  //
--- 1,6 ----
  // Support routines for the -*- C++ -*- dynamic memory management.
! 
! // Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation
  //
  // This file is part of GNU CC.
  //
***************
*** 28,35 ****
  // the GNU General Public License.
  
  #include "new"
  using std::new_handler;
- using std::bad_alloc;
  
  extern "C" void *malloc (std::size_t);
  extern new_handler __new_handler;
--- 29,37 ----
  // the GNU General Public License.
  
  #include "new"
+ #include <bits/functexcept.h>
+ 
  using std::new_handler;
  
  extern "C" void *malloc (std::size_t);
  extern new_handler __new_handler;
*************** operator new (std::size_t sz) throw (std
*** 47,56 ****
      {
        new_handler handler = __new_handler;
        if (! handler)
! 	throw bad_alloc ();
        handler ();
        p = (void *) malloc (sz);
      }
  
    return p;
  }
--- 49,61 ----
      {
        new_handler handler = __new_handler;
        if (! handler)
! 	std::__throw_bad_alloc();
        handler ();
        p = (void *) malloc (sz);
      }
  
    return p;
  }
Index: libsupc++/new_opnt.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/new_opnt.cc,v
retrieving revision 1.2
diff -c -p -r1.2 new_opnt.cc
*** new_opnt.cc	2000/10/21 16:50:28	1.2
--- new_opnt.cc	2001/02/14 23:24:03
***************
*** 1,5 ****
  // Support routines for the -*- C++ -*- dynamic memory management.
! // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
  //
--- 1,6 ----
  // Support routines for the -*- C++ -*- dynamic memory management.
! 
! // Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation
  //
  // This file is part of GNU CC.
  //
***************
*** 28,33 ****
--- 29,36 ----
  // the GNU General Public License.
  
  #include "new"
+ #include <bits/functexcept.h>
+ 
  using std::new_handler;
  using std::bad_alloc;
  
Index: libsupc++/new_opv.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/new_opv.cc,v
retrieving revision 1.2
diff -c -p -r1.2 new_opv.cc
*** new_opv.cc	2000/10/21 16:50:28	1.2
--- new_opv.cc	2001/02/14 23:24:03
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/new_opvnt.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/new_opvnt.cc,v
retrieving revision 1.2
diff -c -p -r1.2 new_opvnt.cc
*** new_opvnt.cc	2000/10/21 16:50:29	1.2
--- new_opvnt.cc	2001/02/14 23:24:03
***************
*** 1,4 ****
--- 1,5 ----
  // Boilerplate support routines for -*- C++ -*- dynamic memory management.
+ 
  // Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/pure.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/pure.cc,v
retrieving revision 1.5
diff -c -p -r1.5 pure.cc
*** pure.cc	2001/02/06 07:27:25	1.5
--- pure.cc	2001/02/14 23:24:03
***************
*** 1,4 ****
--- 1,5 ----
  // -*- C++ -*- 
+ 
  // Copyright (C) 2000 Free Software Foundation
  //
  // This file is part of GNU CC.
Index: libsupc++/tinfo.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/tinfo.cc,v
retrieving revision 1.3
diff -c -p -r1.3 tinfo.cc
*** tinfo.cc	2001/02/04 08:37:50	1.3
--- tinfo.cc	2001/02/14 23:24:07
***************
*** 1,8 ****
  // Methods for type_info for -*- C++ -*- Run Time Type Identification.
- // Copyright (C) 1994, 1996, 1998, 1999, 2000 Free Software Foundation
  
  // This file is part of GNU CC.
! 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
--- 1,9 ----
  // Methods for type_info for -*- C++ -*- Run Time Type Identification.
  
+ // Copyright (C) 1994, 1996, 1998, 1999, 2000 Free Software Foundation
+ //
  // This file is part of GNU CC.
! //
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
Index: libsupc++/tinfo.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/tinfo.h,v
retrieving revision 1.3
diff -c -p -r1.3 tinfo.h
*** tinfo.h	2000/10/21 16:50:29	1.3
--- tinfo.h	2001/02/14 23:24:07
***************
*** 1,4 ****
--- 1,5 ----
  // RTTI support internals for -*- C++ -*-
+ 
  // Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000 Free Software Foundation
  
  #include "typeinfo"
Index: libsupc++/tinfo2.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/tinfo2.cc,v
retrieving revision 1.3
diff -c -p -r1.3 tinfo2.cc
*** tinfo2.cc	2001/02/04 08:37:50	1.3
--- tinfo2.cc	2001/02/14 23:24:08
***************
*** 1,8 ****
  // Methods for type_info for -*- C++ -*- Run Time Type Identification.
- // Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation
  
  // This file is part of GNU CC.
! 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
--- 1,10 ----
  // Methods for type_info for -*- C++ -*- Run Time Type Identification.
  
+ // Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001 
+ // Free Software Foundation
+ //
  // This file is part of GNU CC.
! //
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
Index: libsupc++/typeinfo
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/typeinfo,v
retrieving revision 1.3
diff -c -p -r1.3 typeinfo
*** typeinfo	2001/02/04 08:37:50	1.3
--- typeinfo	2001/02/14 23:24:09
***************
*** 1,6 ****
  // RTTI support for -*- C++ -*-
- // Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000 Free Software Foundation
  
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
--- 1,7 ----
  // RTTI support for -*- C++ -*-
  
+ // Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000 Free Software Foundation
+ //
  // This file is part of GNU CC.
  //
  // GNU CC is free software; you can redistribute it and/or modify
Index: libsupc++/vec.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/libsupc++/vec.cc,v
retrieving revision 1.3
diff -c -p -r1.3 vec.cc
*** vec.cc	2000/11/19 02:22:53	1.3
--- vec.cc	2001/02/14 23:24:09
***************
*** 1,8 ****
  // new abi support -*- C++ -*-
! // Copyright (C) 2000
! // Free Software Foundation, Inc.
! // Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
  // 
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
--- 1,9 ----
  // new abi support -*- C++ -*-
! 
! // Copyright (C) 2000, 2001 Free Software Foundation, Inc.
  // 
+ // This file is part of GNU CC.
+ //
  // GNU CC is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
  // the Free Software Foundation; either version 2, or (at your option)
***************
*** 27,50 ****
  // invalidate any other reasons why the executable file might be covered by
  // the GNU General Public License.
  
  #if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
  #include <cxxabi.h>
  #include <new>
  #include <exception>
  
  #include "exception_support.h"
  
  namespace __cxxabiv1
  {
! 
! namespace 
! {
! struct uncatch_exception {
!   uncatch_exception () { p = __uncatch_exception (); }
!   ~uncatch_exception () { __recatch_exception (p); }
! 
!   cp_eh_info *p;
! };
  }
  
  /* allocate and construct array */
--- 28,53 ----
  // invalidate any other reasons why the executable file might be covered by
  // the GNU General Public License.
  
+ // Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
+ 
  #if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
  #include <cxxabi.h>
  #include <new>
  #include <exception>
+ #include <bits/functexcept.h>
  
  #include "exception_support.h"
  
  namespace __cxxabiv1
  {
!   namespace 
!   {
!     struct uncatch_exception 
!     {
!       uncatch_exception () { p = __uncatch_exception (); }
!       ~uncatch_exception () { __recatch_exception (p); }
!       cp_eh_info *p;
!     };
  }
  
  /* allocate and construct array */
*************** __cxa_vec_new2 (std::size_t element_coun
*** 88,94 ****
  	uncatch_exception ue;
  	dealloc (base - padding_size);
        }
!       throw;
      }
    return base;
  }
--- 91,97 ----
  	uncatch_exception ue;
  	dealloc (base - padding_size);
        }
!       __throw_exception_again;
      }
    return base;
  }
*************** __cxa_vec_new3 (std::size_t element_coun
*** 121,127 ****
  	uncatch_exception ue;
  	dealloc (base - padding_size, size);
        }
!       throw;
      }
    return base;
  }
--- 124,130 ----
  	uncatch_exception ue;
  	dealloc (base - padding_size, size);
        }
!       __throw_exception_again;
      }
    return base;
  }
*************** __cxa_vec_ctor (void *array_address,
*** 149,155 ****
  	uncatch_exception ue;
  	__cxa_vec_dtor (array_address, ix, element_size, destructor);
        }
!       throw;
      }
  }
  
--- 152,158 ----
  	uncatch_exception ue;
  	__cxa_vec_dtor (array_address, ix, element_size, destructor);
        }
!       __throw_exception_again;
      }
  }
  
*************** __cxa_vec_cctor (void *dest_array,
*** 180,186 ****
  	uncatch_exception ue;
  	__cxa_vec_dtor (dest_array, ix, element_size, destructor);
        }
!       throw;
      }
  }
  
--- 183,189 ----
  	uncatch_exception ue;
  	__cxa_vec_dtor (dest_array, ix, element_size, destructor);
        }
!       __throw_exception_again;
      }
  }
  
*************** __cxa_vec_dtor (void *array_address,
*** 218,224 ****
  	    __cxa_vec_dtor (array_address, ix, element_size,
  			    destructor);
  	  }
!           throw;
          }
      }
  }
--- 221,227 ----
  	    __cxa_vec_dtor (array_address, ix, element_size,
  			    destructor);
  	  }
!           __throw_exception_again;
          }
      }
  }
*************** __cxa_vec_delete2 (void *array_address,
*** 259,265 ****
  	    uncatch_exception ue;
  	    dealloc (base);
  	  }
!           throw;
          }
      }
    dealloc (base);
--- 262,268 ----
  	    uncatch_exception ue;
  	    dealloc (base);
  	  }
!           __throw_exception_again;
          }
      }
    dealloc (base);
*************** __cxa_vec_delete3 (void *array_address,
*** 291,297 ****
  	    uncatch_exception ue;
  	    dealloc (base, size);
  	  }
!           throw;
          }
      }
    dealloc (base, size);
--- 294,300 ----
  	    uncatch_exception ue;
  	    dealloc (base, size);
  	  }
! 	  __throw_exception_again;
          }
      }
    dealloc (base, size);
Index: src/Makefile.am
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/Makefile.am,v
retrieving revision 1.71
diff -c -p -r1.71 Makefile.am
*** Makefile.am	2001/02/07 20:26:24	1.71
--- Makefile.am	2001/02/14 23:24:10
*************** base_headers = \
*** 73,79 ****
  	bits/valarray_array.h bits/valarray_array.tcc bits/valarray_meta.h \
  	bits/std_valarray.h bits/mask_array.h bits/slice.h bits/slice_array.h \
  	bits/gslice.h bits/gslice_array.h bits/indirect_array.h \
- 	bits/exception_support.h \
  	bits/std_fstream.h bits/std_iomanip.h \
  	bits/ios_base.h bits/fpos.h bits/basic_ios.h bits/basic_ios.tcc \
  	bits/std_ios.h bits/std_iosfwd.h bits/std_iostream.h \
--- 73,78 ----
*************** base_headers = \
*** 97,103 ****
  	bits/stl_relops.h bits/stl_set.h \
  	bits/stl_stack.h bits/stl_tempbuf.h \
  	bits/stl_tree.h bits/stl_uninitialized.h bits/stl_vector.h \
! 	bits/type_traits.h bits/stl_range_errors.h bits/std_algorithm.h \
  	bits/concept_checks.h bits/container_concepts.h \
  	bits/sequence_concepts.h bits/stl_config.h bits/stl_construct.h
  
--- 96,102 ----
  	bits/stl_relops.h bits/stl_set.h \
  	bits/stl_stack.h bits/stl_tempbuf.h \
  	bits/stl_tree.h bits/stl_uninitialized.h bits/stl_vector.h \
! 	bits/type_traits.h bits/std_algorithm.h \
  	bits/concept_checks.h bits/container_concepts.h \
  	bits/sequence_concepts.h bits/stl_config.h bits/stl_construct.h
  
*************** build_headers = \
*** 166,175 ****
  
  sources = \
  	limitsMEMBERS.cc \
! 	complex_io.cc \
! 	stdexcept.cc bitset.cc \
          globals.cc \
! 	c++io.cc ios.cc strstream.cc \
  	c++locale.cc locale.cc localename.cc codecvt.cc \
  	locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc string-inst.cc
  
--- 165,173 ----
  
  sources = \
  	limitsMEMBERS.cc \
! 	stdexcept.cc functexcept.cc bitset.cc \
          globals.cc \
! 	c++io.cc ios.cc complex_io.cc strstream.cc \
  	c++locale.cc locale.cc localename.cc codecvt.cc \
  	locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc string-inst.cc
  
Index: src/complex_io.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/complex_io.cc,v
retrieving revision 1.3
diff -c -p -r1.3 complex_io.cc
*** complex_io.cc	2000/10/31 01:26:06	1.3
--- complex_io.cc	2001/02/14 23:24:12
*************** namespace std
*** 90,152 ****
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream< char, char_traits<char> >&,
!                complex<float>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream< char, char_traits<char> >&,
!                const complex<float>&);
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream< char, char_traits<char> >&,
!                complex<double>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream< char, char_traits<char> >&,
!                const complex<double>&);
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream< char, char_traits<char> >&,
!                complex<long double>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream< char, char_traits<char> >&,
                 const complex<long double>&);
  
  #ifdef _GLIBCPP_USE_WCHAR_T
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream< wchar_t, char_traits<wchar_t> >&,
                 complex<float>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream< wchar_t, char_traits<wchar_t> >&,
                 const complex<float>&);
  
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream< wchar_t, char_traits<wchar_t> >&,
                 complex<double>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream< wchar_t, char_traits<wchar_t> >&,
                 const complex<double>&);
  
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream< wchar_t, char_traits<wchar_t> >&,
                 complex<long double>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream< wchar_t, char_traits<wchar_t> >&,
                 const complex<long double>&);
  #endif //_GLIBCPP_USE_WCHAR_T
  }
--- 90,150 ----
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream<char, char_traits<char> >&, complex<float>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream<char, char_traits<char> >&, 
! 	       const complex<float>&);
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream<char, char_traits<char> >&, complex<double>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream<char, char_traits<char> >&, 
! 	       const complex<double>&);
  
    template
      basic_istream<char, char_traits<char> >&
!     operator>>(basic_istream<char, char_traits<char> >&, 
! 	       complex<long double>&);
  
    template
      basic_ostream<char, char_traits<char> >&
!     operator<<(basic_ostream<char, char_traits<char> >&,
                 const complex<long double>&);
  
  #ifdef _GLIBCPP_USE_WCHAR_T
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
                 complex<float>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
                 const complex<float>&);
  
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
                 complex<double>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
                 const complex<double>&);
  
    template
      basic_istream<wchar_t, char_traits<wchar_t> >&
!     operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
                 complex<long double>&);
  
    template
      basic_ostream<wchar_t, char_traits<wchar_t> >&
!     operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
                 const complex<long double>&);
  #endif //_GLIBCPP_USE_WCHAR_T
  }
Index: src/locale.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/locale.cc,v
retrieving revision 1.28
diff -c -p -r1.28 locale.cc
*** locale.cc	2001/02/12 09:06:39	1.28
--- locale.cc	2001/02/14 23:24:15
*************** namespace std 
*** 349,355 ****
      catch (...) 
        { 
  	_M_impl->_M_remove_reference(); 
! 	throw; 
        }
    }
  
--- 349,355 ----
      catch (...) 
        { 
  	_M_impl->_M_remove_reference(); 
! 	__throw_exception_again;
        }
    }
  
*************** namespace std 
*** 376,382 ****
  	  _M_impl = new _Impl(__s, 1);
        }
      else
!       throw runtime_error("attempt to create locale from NULL name");
    }
  
    locale::locale(const locale& __base, const char* __s, category __cat)
--- 376,382 ----
  	  _M_impl = new _Impl(__s, 1);
        }
      else
!       __throw_runtime_error("attempt to create locale from NULL name");
    }
  
    locale::locale(const locale& __base, const char* __s, category __cat)
*************** namespace std 
*** 468,474 ****
  	      }
  	    _S_classic = _S_global = 0;
  	    // XXX MT
! 	    throw;
  	  }
        }
      return *__classic_locale;
--- 468,474 ----
  	      }
  	    _S_classic = _S_global = 0;
  	    // XXX MT
! 	    __throw_exception_again;
  	  }
        }
      return *__classic_locale;
*************** namespace std 
*** 509,515 ****
  	    __ret = all;
  	    break;
  	  default:
! 	    throw runtime_error("bad locale category");
  	  }
        }
      return __ret;
--- 509,515 ----
  	    __ret = all;
  	    break;
  	  default:
! 	    __throw_runtime_error("bad locale category");
  	  }
        }
      return __ret;
Index: src/localename.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/localename.cc,v
retrieving revision 1.12
diff -c -p -r1.12 localename.cc
*** localename.cc	2001/01/30 09:18:51	1.12
--- localename.cc	2001/02/14 23:24:16
*************** namespace std {
*** 53,59 ****
      catch(...) 
        {
  	delete _M_facets;
! 	throw;
        }
  
      for (size_t i = 0; i < _S_num_categories; ++i)
--- 53,59 ----
      catch(...) 
        {
  	delete _M_facets;
! 	__throw_exception_again;
        }
  
      for (size_t i = 0; i < _S_num_categories; ++i)
*************** namespace std {
*** 83,89 ****
      catch(...) 
        {
  	delete _M_facets;
! 	throw;
        }
  
      // Name all the categories.
--- 83,89 ----
      catch(...) 
        {
  	delete _M_facets;
! 	__throw_exception_again;
        }
  
      // Name all the categories.
*************** namespace std {
*** 159,165 ****
      if (__index == 0 
  	|| __imp->_M_facets->size() <= __index 
  	|| (*(__imp->_M_facets))[__index] == 0)
!       throw runtime_error("no locale facet");
  	
      _M_install_facet(__idp, (*(__imp->_M_facets))[__index]); 
    }
--- 159,165 ----
      if (__index == 0 
  	|| __imp->_M_facets->size() <= __index 
  	|| (*(__imp->_M_facets))[__index] == 0)
!       __throw_runtime_error("no locale facet");
  	
      _M_install_facet(__idp, (*(__imp->_M_facets))[__index]); 
    }
Index: src/stdexcept.cc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/src/stdexcept.cc,v
retrieving revision 1.2
diff -c -p -r1.2 stdexcept.cc
*** stdexcept.cc	2001/02/07 20:26:24	1.2
--- stdexcept.cc	2001/02/14 23:24:16
***************
*** 33,41 ****
  
  #include <bits/std_string.h>
  #include <bits/std_stdexcept.h>
- #if 1
- #include <bits/stl_range_errors.h>
- #endif
  
  namespace std 
  {
--- 33,38 ----
*************** namespace std 
*** 77,103 ****
  
    underflow_error::underflow_error(const string& __arg)
    : runtime_error(__arg) { }
- 
- #if 1
-   // XXX need to deal with this.
-   void
-   __out_of_range(const char *str)
-   { throw out_of_range(str); }
- 
-   void 
-   __length_error(const char *str)
-   { throw length_error(str); }
- 
-   // XXX: From stl_range_errors.h, eventually these approaches need to
-   // be merged.
-   void 
-   __stl_throw_range_error(const char* __msg) 
-   { throw range_error(__msg); }
- 
-   void 
-   __stl_throw_length_error(const char* __msg)
-   { throw length_error(__msg); }
- #endif
  } // namespace std
  
  
--- 74,79 ----
Index: include/bits/functexcept.h
===================================================================
RCS file: functexcept.h
diff -N functexcept.h
*** /dev/null	Tue May  5 13:32:27 1998
--- functexcept.h	Wed Feb 14 15:33:14 2001
***************
*** 0 ****
--- 1,92 ----
+ // Function-Based Exception Support -*- C++ -*-
+ 
+ // Copyright (C) 2001 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // As a special exception, you may use this file as part of a free software
+ // library without restriction.  Specifically, if other files instantiate
+ // templates or use macros or inline functions from this file, or you compile
+ // this file and link it with other files to produce an executable, this
+ // file does not by itself cause the resulting executable to be covered by
+ // the GNU General Public License.  This exception does not however
+ // invalidate any other reasons why the executable file might be covered by
+ // the GNU General Public License.
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #ifndef __EXCEPTIONS
+ // Iff -fno-exceptions, transform error handling code to work without it.
+ # define try      if (true)
+ # define catch(X) if (false)
+ # define __throw_exception_again
+ #else
+ // Else proceed normally.
+ # define __throw_exception_again throw
+ #endif
+ 
+ namespace std
+ {
+   // Helper for exception objects in <except> 
+   void
+   __throw_bad_exception(void);
+ 
+   // Helper for exception objects in <new> 
+   void
+   __throw_bad_alloc(void);
+ 
+   // Helper for exception objects in <typeinfo> 
+   void
+   __throw_bad_cast(void);
+ 
+   void
+   __throw_bad_typeid(void);
+ 
+   // Helpers for exception objects in <stdexcept> 
+   void
+   __throw_logic_error(const char* __s);
+ 
+   void
+   __throw_domain_error(const char* __s);
+ 
+   void
+   __throw_invalid_argument(const char* __s);
+ 
+   void
+   __throw_length_error(const char* __s);
+ 
+   void
+   __throw_out_of_range(const char* __s);
+ 
+   void
+   __throw_runtime_error(const char* __s);
+ 
+   void
+   __throw_range_error(const char* __s);
+ 
+   void
+   __throw_overflow_error(const char* __s);
+ 
+   void
+   __throw_underflow_error(const char* __s);
+ 
+   // Helpers for exception objects in basic_ios
+   void
+   __throw_ios_failure(const char* __s);
+ } // namespace std
Index: src/functexcept.cc
===================================================================
RCS file: functexcept.cc
diff -N functexcept.cc
*** /dev/null	Tue May  5 13:32:27 1998
--- functexcept.cc	Wed Feb 14 15:33:14 2001
***************
*** 0 ****
--- 1,152 ----
+ // Copyright (C) 2001 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+ 
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ // GNU General Public License for more details.
+ 
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING.  If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+ 
+ // As a special exception, you may use this file as part of a free software
+ // library without restriction.  Specifically, if other files instantiate
+ // templates or use macros or inline functions from this file, or you compile
+ // this file and link it with other files to produce an executable, this
+ // file does not by itself cause the resulting executable to be covered by
+ // the GNU General Public License.  This exception does not however
+ // invalidate any other reasons why the executable file might be covered by
+ // the GNU General Public License.
+ 
+ #include <bits/functexcept.h>
+ #include <cstdlib>
+ #include <exception>
+ #include <new>
+ #include <typeinfo>
+ #include <stdexcept>
+ #include <ios>
+ #include <string>
+ 
+ namespace std 
+ {
+ #if __EXCEPTIONS
+   void
+   __throw_bad_exception(void)
+   { throw bad_exception(); }
+ 
+   void
+   __throw_bad_alloc(void)
+   { throw bad_alloc(); }
+ 
+   void
+   __throw_bad_cast(void)
+   { throw bad_cast(); }
+ 
+   void
+   __throw_bad_typeid(void)
+   { throw bad_typeid(); }
+ 
+   void
+   __throw_logic_error(const char* __s)
+   { throw logic_error(__s); }
+ 
+   void
+   __throw_domain_error(const char* __s)
+   { throw domain_error(__s); }
+ 
+   void
+   __throw_invalid_argument(const char* __s)
+   { throw invalid_argument(__s); }
+ 
+   void
+   __throw_length_error(const char* __s)
+   { throw length_error(__s); }
+ 
+   void
+   __throw_out_of_range(const char* __s)
+   { throw out_of_range(__s); }
+ 
+   void
+   __throw_runtime_error(const char* __s)
+   { throw runtime_error(__s); }
+ 
+   void
+   __throw_range_error(const char* __s)
+   { throw range_error(__s); }
+ 
+   void
+   __throw_overflow_error(const char* __s)
+   { throw overflow_error(__s); }
+ 
+   void
+   __throw_underflow_error(const char* __s)
+   { throw underflow_error(__s); }
+ 
+   void
+   __throw_ios_failure(const char* __s)
+   { throw ios_base::failure(__s); }
+ #else
+   void
+   __throw_bad_exception(void)
+   { abort(); }
+ 
+   void
+   __throw_bad_alloc(void)
+   { abort(); }
+ 
+   void
+   __throw_bad_cast(void)
+   { abort(); }
+ 
+   void
+   __throw_bad_typeid(void)
+   { abort(); }
+ 
+   void
+   __throw_logic_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_domain_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_invalid_argument(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_length_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_out_of_range(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_runtime_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_range_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_overflow_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_underflow_error(const char* __s)
+   { abort(); }
+ 
+   void
+   __throw_ios_failure(const char* __s)
+   { abort(); }
+ #endif //__EXCEPTIONS
+ }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]