From d34786e3fe35c316fa46da13d80a30cf3bf25ee5 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Wed, 17 Jan 2001 07:44:57 +0000 Subject: [PATCH] ios_base.h (ios_base::failure): Tighten up throw specs. 2001-01-16 Benjamin Kosnik 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 --- libstdc++-v3/ChangeLog | 15 +++ libstdc++-v3/docs/html/17_intro/C++STYLE | 4 +- libstdc++-v3/include/bits/ios_base.h | 4 +- libstdc++-v3/libsupc++/exception | 44 ++++--- libstdc++-v3/libsupc++/exception_support.cc | 15 ++- libstdc++-v3/libsupc++/typeinfo | 136 ++++++++++---------- libstdc++-v3/src/ios.cc | 4 +- 7 files changed, 124 insertions(+), 98 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4e28ed0ead1..5e31c3374dd 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2001-01-16 Benjamin Kosnik + + 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 * src/gen-num-limits.cc (INSTANTIATIONS): New macro. diff --git a/libstdc++-v3/docs/html/17_intro/C++STYLE b/libstdc++-v3/docs/html/17_intro/C++STYLE index 5c010ed276e..3d4ab171c3e 100644 --- a/libstdc++-v3/docs/html/17_intro/C++STYLE +++ b/libstdc++-v3/docs/html/17_intro/C++STYLE @@ -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); diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h index 6aea0429d7c..2e31863680b 100644 --- a/libstdc++-v3/include/bits/ios_base.h +++ b/libstdc++-v3/include/bits/ios_base.h @@ -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(); diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception index 4d35c56c405..e48d2160a60 100644 --- a/libstdc++-v3/libsupc++/exception +++ b/libstdc++-v3/libsupc++/exception @@ -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++" diff --git a/libstdc++-v3/libsupc++/exception_support.cc b/libstdc++-v3/libsupc++/exception_support.cc index 1356259a509..f6ec5086876 100644 --- a/libstdc++-v3/libsupc++/exception_support.cc +++ b/libstdc++-v3/libsupc++/exception_support.cc @@ -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 (); } diff --git a/libstdc++-v3/libsupc++/typeinfo b/libstdc++-v3/libsupc++/typeinfo index 91f0de2c720..092963c524f 100644 --- a/libstdc++-v3/libsupc++/typeinfo +++ b/libstdc++-v3/libsupc++/typeinfo @@ -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++" diff --git a/libstdc++-v3/src/ios.cc b/libstdc++-v3/src/ios.cc index db694786a3f..d61c2635351 100644 --- a/libstdc++-v3/src/ios.cc +++ b/libstdc++-v3/src/ios.cc @@ -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*