ios_base.h (ios_base::failure): Tighten up throw specs.

2001-01-16  Benjamin Kosnik  <bkoz@redhat.com>

	libstdc++/1605
	* include/bits/ios_base.h (ios_base::failure): Tighten up throw specs.
	* src/ios.cc (ios_base::failure): Make definitions match.
        * libsupc++/typeinfo (class bad_typeid): Add throw specs.
        (class bad_cast): Same.
        * libsupc++/exception (class exception): Add throw specs.
        * libsupc++/exception_support.cc (set_terminate): Add throw specs.
        (set_unexpected): Same.
        (uncaught_exception): Same.
        (what): Same.

	* docs/html/17_intro/C++STYLE (classname): Fix.

From-SVN: r39087
This commit is contained in:
Benjamin Kosnik 2001-01-17 07:44:57 +00:00 committed by Benjamin Kosnik
parent 5fdfba85be
commit d34786e3fe
7 changed files with 124 additions and 98 deletions

View File

@ -1,3 +1,18 @@
2001-01-16 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/1605
* include/bits/ios_base.h (ios_base::failure): Tighten up throw specs.
* src/ios.cc (ios_base::failure): Make definitions match.
* libsupc++/typeinfo (class bad_typeid): Add throw specs.
(class bad_cast): Same.
* libsupc++/exception (class exception): Add throw specs.
* libsupc++/exception_support.cc (set_terminate): Add throw specs.
(set_unexpected): Same.
(uncaught_exception): Same.
(what): Same.
* docs/html/17_intro/C++STYLE (classname): Fix.
2001-01-16 Mark Mitchell <mark@codesourcery.com>
* src/gen-num-limits.cc (INSTANTIATIONS): New macro.

View File

@ -99,8 +99,8 @@ Notable areas of divergence from what may be previous local practice
07. Member initialization lists
All one line, separate from class name.
gribble::gribble() :
_M_private_data(0), _M_more_stuff(0), _M_helper(0);
gribble::gribble()
: _M_private_data(0), _M_more_stuff(0), _M_helper(0);
{ }
-NOT-
gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0);

View File

@ -146,10 +146,10 @@ namespace std {
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
// Can't do exception(_msg) as defined in 27.4.2.1.1
explicit
failure(const string& __str);
failure(const string& __str) throw();
virtual
~failure();
~failure() throw();
virtual const char*
what() const throw();

View File

@ -1,5 +1,6 @@
// Exception Handling support header for -*- C++ -*-
// Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation
// Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation
// This file is part of GNU CC.
//
@ -34,30 +35,33 @@
extern "C++" {
namespace std {
namespace std
{
class exception
{
public:
exception() throw() { }
virtual ~exception() throw() { }
virtual const char* what() const throw();
};
class exception {
public:
exception () { }
virtual ~exception () { }
virtual const char* what () const;
};
class bad_exception : public exception
{
public:
bad_exception() throw() { }
virtual ~bad_exception() throw() { }
};
class bad_exception : public exception {
public:
bad_exception () { }
virtual ~bad_exception () { }
};
typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();
typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();
terminate_handler set_terminate(terminate_handler) throw();
void terminate() __attribute__ ((__noreturn__));
terminate_handler set_terminate (terminate_handler);
void terminate () __attribute__ ((__noreturn__));
unexpected_handler set_unexpected (unexpected_handler);
void unexpected () __attribute__ ((__noreturn__));
bool uncaught_exception ();
unexpected_handler set_unexpected(unexpected_handler) throw();
void unexpected() __attribute__ ((__noreturn__));
bool uncaught_exception() throw();
} // namespace std
} // extern "C++"

View File

@ -1,5 +1,7 @@
// Functions for Exception Support for -*- C++ -*-
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000,
// 2001 Free Software Foundation
// This file is part of GNU CC.
@ -56,7 +58,7 @@ static std::unexpected_handler __unexpected_func __attribute__((__noreturn__))
= __default_unexpected;
std::terminate_handler
std::set_terminate (std::terminate_handler func)
std::set_terminate (std::terminate_handler func) throw()
{
std::terminate_handler old = __terminate_func;
@ -65,7 +67,7 @@ std::set_terminate (std::terminate_handler func)
}
std::unexpected_handler
std::set_unexpected (std::unexpected_handler func)
std::set_unexpected (std::unexpected_handler func) throw()
{
std::unexpected_handler old = __unexpected_func;
@ -374,14 +376,15 @@ THROW_BAD_TYPEID ()
/* Has the current exception been caught? */
bool
std::uncaught_exception ()
std::uncaught_exception () throw()
{
cp_eh_info *p = CP_EH_INFO;
return p && ! p->caught;
}
const char * std::exception::
what () const
const char *
std::exception::
what () const throw()
{
return typeid (*this).name ();
}

View File

@ -48,86 +48,90 @@ namespace __cxxabiv1
} // namespace __cxxabiv1
#endif
namespace std {
namespace std
{
class type_info
{
public:
// Destructor. Being the first non-inline virtual function, this
// controls in which translation unit the vtable is emitted. The
// compiler makes use of that information to know where to emit
// the runtime-mandated type_info structures in the new-abi.
virtual ~type_info();
class type_info {
public:
// Destructor. Being the first non-inline virtual function, this controls in
// which translation unit the vtable is emitted. The compiler makes use of
// that information to know where to emit the runtime-mandated type_info
// structures in the new-abi.
virtual ~type_info ();
private:
// Assigning type_info is not supported. made private.
type_info& operator= (const type_info&);
type_info (const type_info&);
protected:
const char *__name;
protected:
explicit type_info (const char *__n): __name (__n) { }
public:
// the public interface
private:
// Assigning type_info is not supported. made private.
type_info& operator=(const type_info&);
type_info(const type_info&);
protected:
const char *__name;
protected:
explicit type_info(const char *__n): __name(__n) { }
public:
// the public interface
#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100
// In old abi, there can be multiple instances of a type_info object for one
// type. Uniqueness must use the _name value, not object address.
bool before (const type_info& arg) const;
const char* name () const
// In old abi, there can be multiple instances of a type_info
// object for one type. Uniqueness must use the _name value, not
// object address.
bool before(const type_info& arg) const;
const char* name() const
{ return __name; }
bool operator== (const type_info& __arg) const;
bool operator!= (const type_info& __arg) const
{ return !operator== (__arg); }
bool operator==(const type_info& __arg) const;
bool operator!=(const type_info& __arg) const
{ return !operator==(__arg); }
#else
// In new abi we can rely on type_info's NTBS being unique,
// and therefore address comparisons are sufficient.
bool before (const type_info& __arg) const
// In new abi we can rely on type_info's NTBS being unique,
// and therefore address comparisons are sufficient.
bool before(const type_info& __arg) const
{ return __name < __arg.__name; }
const char* name () const
const char* name() const
{ return __name; }
bool operator== (const type_info& __arg) const
bool operator==(const type_info& __arg) const
{ return __name == __arg.__name; }
bool operator!= (const type_info& __arg) const
{ return !operator== (__arg); }
bool operator!=(const type_info& __arg) const
{ return !operator==(__arg); }
#endif
// the internal interface
// the internal interface
#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
public:
// return true if this is a pointer type of some kind
virtual bool __is_pointer_p () const;
// return true if this is a function type
virtual bool __is_function_p () const;
public:
// return true if this is a pointer type of some kind
virtual bool __is_pointer_p() const;
// return true if this is a function type
virtual bool __is_function_p() const;
// Try and catch a thrown type. Store an adjusted pointer to the caught type
// in THR_OBJ. If THR_TYPE is not a pointer type, then THR_OBJ points to the
// thrown object. If THR_TYPE is a pointer type, then THR_OBJ is the pointer
// itself. OUTER indicates the number of outer pointers, and whether they
// were const qualified.
virtual bool __do_catch (const type_info *__thr_type, void **__thr_obj,
unsigned __outer) const;
// Try and catch a thrown type. Store an adjusted pointer to the
// caught type in THR_OBJ. If THR_TYPE is not a pointer type, then
// THR_OBJ points to the thrown object. If THR_TYPE is a pointer
// type, then THR_OBJ is the pointer itself. OUTER indicates the
// number of outer pointers, and whether they were const
// qualified.
virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
unsigned __outer) const;
// internally used during catch matching
virtual bool __do_upcast (const __cxxabiv1::__class_type_info *__target,
void **__obj_ptr) const;
// internally used during catch matching
virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
void **__obj_ptr) const;
#endif
};
class bad_cast : public exception {
public:
bad_cast() { }
virtual ~bad_cast() { }
};
class bad_typeid : public exception {
public:
bad_typeid () { }
virtual ~bad_typeid () { }
};
};
class bad_cast : public exception
{
public:
bad_cast() throw() { }
virtual ~bad_cast() throw() { }
};
class bad_typeid : public exception
{
public:
bad_typeid () throw() { }
virtual ~bad_typeid () throw() { }
};
} // namespace std
} // extern "C++"

View File

@ -120,13 +120,13 @@ namespace std
wostream wclog(NULL);
#endif
ios_base::failure::failure(const string& __str)
ios_base::failure::failure(const string& __str) throw()
{
strncpy(_M_name, __str.c_str(), _M_bufsize);
_M_name[_M_bufsize - 1] = '\0';
}
ios_base::failure::~failure()
ios_base::failure::~failure() throw()
{ }
const char*