]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
revert: [multiple changes]
authorPaolo Carlini <paolo@gcc.gnu.org>
Sat, 5 Jan 2008 11:04:43 +0000 (11:04 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 5 Jan 2008 11:04:43 +0000 (11:04 +0000)
2008-01-05  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/34680

Revert:
2007-12-17  Jonathan Wakely  <jwakely.gcc@gmail.com>
* include/bits/locale_facets.tcc (has_facet, use_facet): Simplify
RTTI checks.

2007-12-14  Benjamin Kosnik  <bkoz@redhat.com>

        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

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/locale_facets.tcc
libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc [deleted file]
libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc [deleted file]

index a0924c2009c8189d1c20989070ad9249810911a1..c2a2b4999e4e1aa3ad01e8e965c1efef13396a6d 100644 (file)
@@ -1,3 +1,22 @@
+2008-01-05  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/34680
+
+       Revert:
+       2007-12-17  Jonathan Wakely  <jwakely.gcc@gmail.com>
+       * include/bits/locale_facets.tcc (has_facet, use_facet): Simplify
+       RTTI checks.
+
+       2007-12-14  Benjamin Kosnik  <bkoz@redhat.com>
+
+        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  <jwakely.gcc@gmail.com>
 
        * 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/
index 870ac3de838ce1b7091d2b7bf299c9f6d8f6696c..8f62e1904eaac63eca7080b220c010995f2cd23b 100644 (file)
@@ -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<const _Facet*>(__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<const _Facet&>(*__facets[__i]);
+      return static_cast<const _Facet&>(*__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 (file)
index bc089ca..0000000
+++ /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 <string>
-#include <locale>
-#include <cassert>
-#include <testsuite_hooks.h>
-
-// 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<char> base_facet;
-  typedef std::ctype_byname<char> 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<base_facet>(loc_c) );
-  VERIFY( has_facet<base_facet>(loc_base) );
-  VERIFY( has_facet<base_facet>(loc_derived) );
-
-  // Standard derived facet.
-  VERIFY( !has_facet<derived_facet>(loc_c) );
-  VERIFY( !has_facet<derived_facet>(loc_base) );
-  VERIFY( has_facet<derived_facet>(loc_derived) );
-
-
-  // 1
-  try
-    {
-      if (has_facet<derived_facet>(loc_base))
-       {
-         use_facet<derived_facet>(loc_base).widen('k');
-         VERIFY( true );
-       }
-    }
-  catch (...)
-    { 
-      // Expect no exception.
-      VERIFY( true );
-    }
-
-  // 2
-  try
-    {
-      if (has_facet<base_facet>(loc_derived))
-       use_facet<base_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 (file)
index 139223f..0000000
+++ /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 <string>
-#include <locale>
-#include <cassert>
-#include <testsuite_hooks.h>
-
-// 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<std::ctype<char> >(loc_c) );
-  VERIFY( has_facet<std::ctype<char> >(loc_base) );
-  VERIFY( has_facet<std::ctype<char> >(loc_derived) );
-
-  // User defined base facet.
-  VERIFY( !has_facet<base_facet>(loc_c) );
-  VERIFY( has_facet<base_facet>(loc_base) );
-  VERIFY( has_facet<base_facet>(loc_derived) );
-
-  // User defined derived facet.
-  VERIFY( !has_facet<derived_facet>(loc_c) );
-  VERIFY( !has_facet<derived_facet>(loc_base) );
-  VERIFY( has_facet<derived_facet>(loc_derived) );
-
-
-  // 1
-  try
-    {
-      if (has_facet<derived_facet>(loc_base))
-       {
-         use_facet<derived_facet>(loc_base).msg_repeater();
-         VERIFY( false );
-       }
-    }
-  catch (...)
-    { 
-      // Expect no exception.
-      VERIFY( true );
-    }
-
-  // 2
-  try
-    {
-      if (has_facet<base_facet>(loc_derived))
-       use_facet<base_facet>(loc_derived).msg();
-      else
-       VERIFY( true );
-    }
-  catch (...)
-    { 
-      // Expect no exception.
-      VERIFY( true );
-    }
-
-  return 0;
-}