From: paolo Date: Thu, 1 Feb 2007 13:36:51 +0000 (+0000) Subject: 2007-02-01 Paolo Carlini X-Git-Tag: upstream/4.9.2~50677 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c228f8a68d43a472a0779e9e4f839465cd877cd8;p=platform%2Fupstream%2Flinaro-gcc.git 2007-02-01 Paolo Carlini PR libstdc++/14493 * libsupc++/typeinfo (bad_cast::what, bad_typeid::what): Declare. * libsupc++/tinfo.cc: Define. * libsupc++/exception (bad_exception::what): Declare. * libsupc++/eh_exception.cc: Define. (exception::what): Adjust, don't use typeid. * libsupc++/new (bad_alloc::what): Declare. * libsupc++/new_handler.cc: Define. * config/abi/pre/gnu.ver: Export the new methods @3.4.9; adjust existing 3.4.10 exports to 3.4.9. * configure.ac: Adjust to 6.0.9. * configure: Regenerate. * testsuite/util/testsuite_abi.cc: Update. * testsuite/18_support/14493.cc: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121461 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1718e5d..bf45d8e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,20 @@ +2007-02-01 Paolo Carlini + + PR libstdc++/14493 + * libsupc++/typeinfo (bad_cast::what, bad_typeid::what): Declare. + * libsupc++/tinfo.cc: Define. + * libsupc++/exception (bad_exception::what): Declare. + * libsupc++/eh_exception.cc: Define. + (exception::what): Adjust, don't use typeid. + * libsupc++/new (bad_alloc::what): Declare. + * libsupc++/new_handler.cc: Define. + * config/abi/pre/gnu.ver: Export the new methods @3.4.9; adjust + existing 3.4.10 exports to 3.4.9. + * configure.ac: Adjust to 6.0.9. + * configure: Regenerate. + * testsuite/util/testsuite_abi.cc: Update. + * testsuite/18_support/14493.cc: New. + 2007-02-01 Ben Elliston * libsupc++/eh_alloc.cc (__cxa_free_exception): Don't refer to the diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 043a49e..a48cfb4 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1,6 +1,7 @@ ## Linker script for GNU versioning (GNU ld 2.13.91+ only.) ## -## Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 +## 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 @@ -26,7 +27,7 @@ GLIBCXX_3.4 { extern "C++" { std::[A-Za]*; - std::ba[a-r]*; +# std::ba[a-r]*; std::basic_[a-e]*; std::basic_f[a-r]*; # std::basic_fstream; @@ -475,6 +476,13 @@ GLIBCXX_3.4 { _ZTSN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE; _ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE; + # std::bad_alloc::~bad_alloc, std::bad_cast::~bad_cast, + # std::bad_typeid::~bad_typeid, std::bad_exception::~bad_exception + _ZNSt9bad_allocD*; + _ZNSt8bad_castD*; + _ZNSt10bad_typeidD*; + _ZNSt13bad_exceptionD*; + # function-scope static objects requires a guard variable. _ZGVNSt[^1]*; _ZGVNSt1[^7]*; @@ -689,16 +697,17 @@ GLIBCXX_3.4.9 { _ZNSo9_M_insertEPKc[il]; _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertEPKw[il]; -} GLIBCXX_3.4.8; - -GLIBCXX_3.4.10 { - _ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv; _ZN11__gnu_debug19_Safe_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb; _ZN11__gnu_debug19_Safe_iterator_base16_M_detach_singleEv; _ZN11__gnu_debug19_Safe_iterator_base12_M_get_mutexEv; -} GLIBCXX_3.4.9; + _ZNKSt9bad_alloc4whatEv; + _ZNKSt8bad_cast4whatEv; + _ZNKSt10bad_typeid4whatEv; + _ZNKSt13bad_exception4whatEv; + +} GLIBCXX_3.4.8; # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.3 { diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 551bff5..6fbe55f 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -1381,7 +1381,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:10:0 +libtool_VERSION=6:9:0 # Find the rest of the source tree framework. diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 82e8b85..a1e4a37 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -12,7 +12,7 @@ AC_CONFIG_HEADER(config.h) ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:10:0 +libtool_VERSION=6:9:0 AC_SUBST(libtool_VERSION) # Find the rest of the source tree framework. diff --git a/libstdc++-v3/libsupc++/eh_exception.cc b/libstdc++-v3/libsupc++/eh_exception.cc index 81d7e70..40bb839 100644 --- a/libstdc++-v3/libsupc++/eh_exception.cc +++ b/libstdc++-v3/libsupc++/eh_exception.cc @@ -1,5 +1,6 @@ // -*- C++ -*- std::exception implementation. -// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +// 2003, 2004, 2005, 2006, 2007 // Free Software Foundation // // This file is part of GCC. @@ -39,5 +40,14 @@ std::bad_exception::~bad_exception() throw() { } const char* std::exception::what() const throw() { - return typeid (*this).name (); + // NB: Another elegant option would be returning typeid(*this).name() + // and not overriding what() in bad_exception, bad_alloc, etc. In + // that case, however, mangled names would be returned, PR 14493. + return "std::exception"; +} + +const char* +std::bad_exception::what() const throw() +{ + return "std::bad_exception"; } diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception index cad6323e..2046300 100644 --- a/libstdc++-v3/libsupc++/exception +++ b/libstdc++-v3/libsupc++/exception @@ -1,6 +1,7 @@ // Exception Handling support header for -*- C++ -*- -// Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2005 +// Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +// 2004, 2005, 2006, 2007 // Free Software Foundation // // This file is part of GCC. @@ -71,6 +72,8 @@ namespace std // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_exception() throw(); + // See comment in eh_exception.cc. + virtual const char* what() const throw(); }; /// If you write a replacement %terminate handler, it must be of this type. diff --git a/libstdc++-v3/libsupc++/new b/libstdc++-v3/libsupc++/new index eeed753..26898bf 100644 --- a/libstdc++-v3/libsupc++/new +++ b/libstdc++-v3/libsupc++/new @@ -1,6 +1,7 @@ // The -*- C++ -*- dynamic memory management header. -// Copyright (C) 1994, 1996, 1997, 1998, 2000, 2001, 2002 +// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +// 2003, 2004, 2005, 2006, 2007 // Free Software Foundation // This file is part of GCC. @@ -61,6 +62,8 @@ namespace std // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_alloc() throw(); + // See comment in eh_exception.cc. + virtual const char* what() const throw(); }; struct nothrow_t { }; diff --git a/libstdc++-v3/libsupc++/new_handler.cc b/libstdc++-v3/libsupc++/new_handler.cc index 6ea9767..3580acb 100644 --- a/libstdc++-v3/libsupc++/new_handler.cc +++ b/libstdc++-v3/libsupc++/new_handler.cc @@ -1,6 +1,7 @@ // Implementation file for the -*- C++ -*- dynamic memory management header. -// Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002 +// Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +// 2005, 2006, 2007 // Free Software Foundation // // This file is part of GCC. @@ -45,3 +46,9 @@ std::set_new_handler (new_handler handler) throw() } std::bad_alloc::~bad_alloc() throw() { } + +const char* +std::bad_alloc::what() const throw() +{ + return "std::bad_alloc"; +} diff --git a/libstdc++-v3/libsupc++/tinfo.cc b/libstdc++-v3/libsupc++/tinfo.cc index 89d9e16..8f99de2 100644 --- a/libstdc++-v3/libsupc++/tinfo.cc +++ b/libstdc++-v3/libsupc++/tinfo.cc @@ -1,5 +1,6 @@ // Methods for type_info for -*- C++ -*- Run Time Type Identification. -// Copyright (C) 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +// 2003, 2004, 2005, 2006, 2007 // Free Software Foundation // // This file is part of GCC. @@ -44,6 +45,18 @@ std::type_info:: std::bad_cast::~bad_cast() throw() { } std::bad_typeid::~bad_typeid() throw() { } +const char* +std::bad_cast::what() const throw() +{ + return "std::bad_cast"; +} + +const char* +std::bad_typeid::what() const throw() +{ + return "std::bad_typeid"; +} + #if !__GXX_TYPEINFO_EQUALITY_INLINE // We can't rely on common symbols being shared between shared objects. diff --git a/libstdc++-v3/libsupc++/typeinfo b/libstdc++-v3/libsupc++/typeinfo index d6adf8b..3abf0df 100644 --- a/libstdc++-v3/libsupc++/typeinfo +++ b/libstdc++-v3/libsupc++/typeinfo @@ -1,5 +1,6 @@ // RTTI support for -*- C++ -*- -// Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002 +// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +// 2003, 2004, 2005, 2006, 2007 // Free Software Foundation // // This file is part of GCC. @@ -171,6 +172,8 @@ namespace std // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_cast() throw(); + // See comment in eh_exception.cc. + virtual const char* what() const throw(); }; /** If you use a NULL pointer in a @c typeid expression, this is thrown. */ @@ -181,6 +184,8 @@ namespace std // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_typeid() throw(); + // See comment in eh_exception.cc. + virtual const char* what() const throw(); }; } // namespace std diff --git a/libstdc++-v3/testsuite/18_support/14493.cc b/libstdc++-v3/testsuite/18_support/14493.cc new file mode 100644 index 0000000..188bad7 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/14493.cc @@ -0,0 +1,53 @@ +// 2007-01-30 Paolo Carlini + +// Copyright (C) 2007 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +#include +#include +#include +#include +#include + +// libstdc++/14493 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + bad_alloc ba; + VERIFY( !strcmp(ba.what(), "std::bad_alloc") ); + + bad_cast bc; + VERIFY( !strcmp(bc.what(), "std::bad_cast") ); + + bad_typeid bt; + VERIFY( !strcmp(bt.what(), "std::bad_typeid") ); + + exception e; + VERIFY( !strcmp(e.what(), "std::exception") ); + + bad_exception be; + VERIFY( !strcmp(be.what(), "std::bad_exception") ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index e26f009..0949e30 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -188,7 +188,6 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.7"); known_versions.push_back("GLIBCXX_3.4.8"); known_versions.push_back("GLIBCXX_3.4.9"); - known_versions.push_back("GLIBCXX_3.4.10"); known_versions.push_back("GLIBCXX_LDBL_3.4"); known_versions.push_back("GLIBCXX_LDBL_3.4.7"); known_versions.push_back("CXXABI_1.3");