[PATCH] PR libstdc++/88681 export missing symbols

Jonathan Wakely jwakely@redhat.com
Thu Jan 3 20:38:00 GMT 2019


These new facet functions were added to GCC 5.1 but the versions for the
old std::string ABI were never exported from the shared library.

	PR libstdc++/88681
	* config/abi/pre/gnu.ver: Add missing exports.
	* testsuite/22_locale/collate_byname/88681.cc: New test.
	* testsuite/22_locale/time_get/get/char/88681.cc: New test.
	* testsuite/22_locale/time_get/get/wchar_t/88681.cc: New test.

Tested x86_64-linux and powerpc64-linux, committed to trunk.

Target maintainers, please don't regenerate your baseline-symbols.txt
files yet as there are more new symbols to be added over the next day
or two.


-------------- next part --------------
commit 493cfc957f344091a28eef80c2c8f851cca26fb5
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Jan 3 19:38:39 2019 +0000

    PR libstdc++/88681 export missing symbols
    
    These new facet functions were added to GCC 5.1 but the versions for the
    old std::string ABI were never exported from the shared library.
    
            PR libstdc++/88681
            * config/abi/pre/gnu.ver: Add missing exports.
            * testsuite/22_locale/collate_byname/88681.cc: New test.
            * testsuite/22_locale/time_get/get/char/88681.cc: New test.
            * testsuite/22_locale/time_get/get/wchar_t/88681.cc: New test.

diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 42697afc30f..de3c87abf15 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -2069,6 +2069,9 @@ GLIBCXX_3.4.26 {
     _ZNSt3pmr28unsynchronized_pool_resource11do_allocateE[jmy][jmy];
     _ZNSt3pmr28unsynchronized_pool_resource13do_deallocateEPv[jmy][jmy];
 
+    _ZNSt14collate_bynameI[cw]EC[12]ERKSs[jmy];
+    _ZNKSt8time_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc;
+
 } GLIBCXX_3.4.25;
 
 # Symbols in the support library (libsupc++) have their own tag.
diff --git a/libstdc++-v3/testsuite/22_locale/collate_byname/88681.cc b/libstdc++-v3/testsuite/22_locale/collate_byname/88681.cc
new file mode 100644
index 00000000000..863319dc82c
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/collate_byname/88681.cc
@@ -0,0 +1,48 @@
+// Copyright (C) 2019 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 3, 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 COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-fno-inline" }
+// { dg-do link { target c++11 } }
+
+#undef _GLIBCXX_USE_CXX11_ABI
+#define _GLIBCXX_USE_CXX11_ABI 0
+#include <locale>
+#include <string>
+
+std::string s = "C";
+
+template<typename C>
+struct facet : std::collate_byname<C>
+{
+  facet() : std::collate_byname<C>(s) { }
+};
+
+void
+test01()
+{
+  facet<char> c;
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+  facet<wchar_t> w;
+#endif
+}
+
+int
+main()
+{
+  test01();
+}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc
new file mode 100644
index 00000000000..5365871409f
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 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 3, 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 COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-fno-inline" }
+// { dg-do link { target c++11 } }
+
+#undef _GLIBCXX_USE_CXX11_ABI
+#define _GLIBCXX_USE_CXX11_ABI 0
+#include <locale>
+#include <sstream>
+
+using C = char;
+
+void
+test01()
+{
+  using namespace std;
+
+  locale loc_c = locale::classic();
+
+  basic_istringstream<C> iss;
+  iss.imbue(loc_c);
+  const time_get<C>& tget = use_facet<time_get<C>>(iss.getloc());
+  typedef istreambuf_iterator<C> iter;
+  const iter end;
+
+  tm time;
+  ios_base::iostate err = ios_base::badbit;
+
+  tget.get(iter(iss), end, iss, err, &time, 'Y');
+}
+
+int
+main()
+{
+  test01();
+}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc
new file mode 100644
index 00000000000..cae6251bad0
--- /dev/null
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 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 3, 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 COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-fno-inline" }
+// { dg-do link { target c++11 } }
+
+#undef _GLIBCXX_USE_CXX11_ABI
+#define _GLIBCXX_USE_CXX11_ABI 0
+#include <locale>
+#include <sstream>
+
+using C = wchar_t;
+
+void
+test01()
+{
+  using namespace std;
+
+  locale loc_c = locale::classic();
+
+  basic_istringstream<C> iss;
+  iss.imbue(loc_c);
+  const time_get<C>& tget = use_facet<time_get<C>>(iss.getloc());
+  typedef istreambuf_iterator<C> iter;
+  const iter end;
+
+  tm time;
+  ios_base::iostate err = ios_base::badbit;
+
+  tget.get(iter(iss), end, iss, err, &time, 'Y');
+}
+
+int
+main()
+{
+  test01();
+}


More information about the Gcc-patches mailing list