From: Paolo Carlini Date: Sat, 5 Jan 2008 11:04:43 +0000 (+0000) Subject: revert: [multiple changes] X-Git-Tag: prereleases/gcc-4.2.3-rc1~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e66ca872f6fdd7178c7f708b51f1ea53716f698f;p=thirdparty%2Fgcc.git revert: [multiple changes] 2008-01-05 Paolo Carlini PR libstdc++/34680 Revert: 2007-12-17 Jonathan Wakely * include/bits/locale_facets.tcc (has_facet, use_facet): Simplify RTTI checks. 2007-12-14 Benjamin Kosnik PR libstdc++/30127 PR libstdc++/34449 * include/bits/locale_facets.tcc (use_facet): Check facet hierarchy. (has_facet): Same. * testsuite/22_locale/global_templates/user_facet_hierarchies.cc: New. * testsuite/22_locale/global_templates/ standard_facet_hierarchies.cc: New. From-SVN: r131334 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a0924c2009c8..c2a2b4999e4e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2008-01-05 Paolo Carlini + + PR libstdc++/34680 + + Revert: + 2007-12-17 Jonathan Wakely + * include/bits/locale_facets.tcc (has_facet, use_facet): Simplify + RTTI checks. + + 2007-12-14 Benjamin Kosnik + + PR libstdc++/30127 + PR libstdc++/34449 + * include/bits/locale_facets.tcc (use_facet): Check facet hierarchy. + (has_facet): Same. + * testsuite/22_locale/global_templates/user_facet_hierarchies.cc: New. + * testsuite/22_locale/global_templates/ + standard_facet_hierarchies.cc: New. + 2007-12-17 Jonathan Wakely * include/bits/locale_facets.tcc (has_facet, use_facet): Simplify @@ -12,7 +31,7 @@ PR libstdc++/30127 PR libstdc++/34449 - * include/bits/locale_classes.h (use_facet): Check facet hierarchy. + * include/bits/locale_facets.tcc (use_facet): Check facet hierarchy. (has_facet): Same. * testsuite/22_locale/global_templates/user_facet_hierarchies.cc: New. * testsuite/22_locale/global_templates/ diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 870ac3de838c..8f62e1904eaa 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -1,6 +1,7 @@ // Locale support -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +// 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -90,8 +91,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { const size_t __i = _Facet::id._M_id(); const locale::facet** __facets = __loc._M_impl->_M_facets; - return __i < __loc._M_impl->_M_facets_size - && dynamic_cast(__facets[__i]) != NULL; + return (__i < __loc._M_impl->_M_facets_size && __facets[__i]); } /** @@ -113,9 +113,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { const size_t __i = _Facet::id._M_id(); const locale::facet** __facets = __loc._M_impl->_M_facets; - if (__i >= __loc._M_impl->_M_facets_size || __facets[__i] == NULL) + if (!(__i < __loc._M_impl->_M_facets_size && __facets[__i])) __throw_bad_cast(); - return dynamic_cast(*__facets[__i]); + return static_cast(*__facets[__i]); } diff --git a/libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc b/libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc deleted file mode 100644 index bc089ca41e52..000000000000 --- a/libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2007 Free Software Foundation -// -// 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 - -// Based on Langer Kreft "Standard C++ IOStreams and Locales" p 316-318 -// PR libstdc++/30127 -// PR libstdc++/34449 -int main() -{ - bool test __attribute__((unused)) = true; - - using std::locale; - using std::has_facet; - using std::use_facet; - typedef std::ctype base_facet; - typedef std::ctype_byname derived_facet; - - locale loc_c = locale::classic(); - locale loc_base = loc_c; - locale loc_derived(loc_c, new derived_facet("C")); - - bool b; - - // Standard base facet. - VERIFY( has_facet(loc_c) ); - VERIFY( has_facet(loc_base) ); - VERIFY( has_facet(loc_derived) ); - - // Standard derived facet. - VERIFY( !has_facet(loc_c) ); - VERIFY( !has_facet(loc_base) ); - VERIFY( has_facet(loc_derived) ); - - - // 1 - try - { - if (has_facet(loc_base)) - { - use_facet(loc_base).widen('k'); - VERIFY( true ); - } - } - catch (...) - { - // Expect no exception. - VERIFY( true ); - } - - // 2 - try - { - if (has_facet(loc_derived)) - use_facet(loc_derived).widen('k'); - else - VERIFY( true ); - } - catch (...) - { - // Expect no exception. - VERIFY( true ); - } - - return 0; -} diff --git a/libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc b/libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc deleted file mode 100644 index 139223f2aa7a..000000000000 --- a/libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (C) 2007 Free Software Foundation -// -// 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 - -// Based on Langer Kreft "Standard C++ IOStreams and Locales" p 316-318 -struct base_facet: public std::locale::facet -{ - virtual std::string msg() const - { return "base class"; } - - static std::locale::id id; -}; - -std::locale::id base_facet::id; - - -struct derived_facet: public base_facet -{ - virtual std::string msg() const - { return "derived class"; } - - virtual std::string msg_repeater() const - { return "derived class derived class"; } - -}; - -// PR libstdc++/30127 -// PR libstdc++/34449 -int main() -{ - bool test __attribute__((unused)) = true; - - using std::locale; - using std::has_facet; - using std::use_facet; - - locale loc_c = locale::classic(); - locale loc_base(loc_c, new base_facet); - locale loc_derived(loc_c, new derived_facet); - - bool b; - - // Standard facets. - VERIFY( has_facet >(loc_c) ); - VERIFY( has_facet >(loc_base) ); - VERIFY( has_facet >(loc_derived) ); - - // User defined base facet. - VERIFY( !has_facet(loc_c) ); - VERIFY( has_facet(loc_base) ); - VERIFY( has_facet(loc_derived) ); - - // User defined derived facet. - VERIFY( !has_facet(loc_c) ); - VERIFY( !has_facet(loc_base) ); - VERIFY( has_facet(loc_derived) ); - - - // 1 - try - { - if (has_facet(loc_base)) - { - use_facet(loc_base).msg_repeater(); - VERIFY( false ); - } - } - catch (...) - { - // Expect no exception. - VERIFY( true ); - } - - // 2 - try - { - if (has_facet(loc_derived)) - use_facet(loc_derived).msg(); - else - VERIFY( true ); - } - catch (...) - { - // Expect no exception. - VERIFY( true ); - } - - return 0; -}