re PR libstdc++/43622 (Incomplete C++ library support for __float128)
authorMarc Glisse <marc.glisse@inria.fr>
Tue, 18 Nov 2014 20:20:53 +0000 (21:20 +0100)
committerMarc Glisse <glisse@gcc.gnu.org>
Tue, 18 Nov 2014 20:20:53 +0000 (20:20 +0000)
2014-11-18  Marc Glisse  <marc.glisse@inria.fr>

PR libstdc++/43622
gcc/cp/
* rtti.c (emit_support_tinfos): Handle __float128.
libstdc++-v3/
* config/abi/pre/float128.ver: New file.
* configure.ac: Use float128.ver when relevant.
* configure: Regenerate.
* testsuite/util/testsuite_abi.cc (check_version): Accept new
CXXABI_FLOAT128 version.

From-SVN: r217735

gcc/cp/ChangeLog
gcc/cp/rtti.c
libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/float128.ver [new file with mode: 0644]
libstdc++-v3/configure
libstdc++-v3/configure.ac
libstdc++-v3/testsuite/util/testsuite_abi.cc

index 0628b4221d9adb92db468310c9fa2909f8ee521f..2e18932dc491483d4954b88dcdeb5e98bd0c6176 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-18  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR libstdc++/43622
+       * rtti.c (emit_support_tinfos): Handle __float128.
+
 2014-11-18  Jason Merrill  <jason@redhat.com>
 
        PR c++/63925
index 0d6dd960003a2c2f21012bafb4b1ad54df1dc2d2..aef71f27bc5a65bd9f68662fcea80bce4466359e 100644 (file)
@@ -1547,6 +1547,8 @@ emit_support_tinfos (void)
        emit_support_tinfo_1 (int_n_trees[ix].signed_type);
        emit_support_tinfo_1 (int_n_trees[ix].unsigned_type);
       }
+  for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+    emit_support_tinfo_1 (TREE_VALUE (t));
 }
 
 /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
index 857c05e163e0369bc53836d7718e890023c84fc0..c0e173895583ed9b78b125610cf31742994eefec 100644 (file)
@@ -1,3 +1,12 @@
+2014-11-18  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR libstdc++/43622
+       * config/abi/pre/float128.ver: New file.
+       * configure.ac: Use float128.ver when relevant.
+       * configure: Regenerate.
+       * testsuite/util/testsuite_abi.cc (check_version): Accept new
+       CXXABI_FLOAT128 version.
+
 2014-11-17  Jason Merrill  <jason@redhat.com>
 
        * include/backward/binders.h: Suppress -Wdeprecated-declarations.
diff --git a/libstdc++-v3/config/abi/pre/float128.ver b/libstdc++-v3/config/abi/pre/float128.ver
new file mode 100644 (file)
index 0000000..26c62c7
--- /dev/null
@@ -0,0 +1,10 @@
+# Appended to version file.
+
+CXXABI_FLOAT128 {
+
+    # typeinfo and typeinfo name for __float128
+    _ZT[IS]g;
+    _ZT[IS]Pg;
+    _ZT[IS]PKg;
+
+};
index 6a57537b87cfe7bd055621dd12d0d8301ee6e028..5fcb705b36351370d22747245bce74cb7eabad74 100755 (executable)
@@ -15710,6 +15710,9 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+if test "$enable_float128" = yes; then
+  port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
 
 # Checks for compiler support that doesn't require linking.
 
index eb826e4133f0609431a8ff7e45eaf37d72253e6e..135d536e1b206014ba32567069de36dbc17edb68 100644 (file)
@@ -153,6 +153,9 @@ GLIBCXX_ENABLE_THREADS
 GLIBCXX_ENABLE_ATOMIC_BUILTINS
 GLIBCXX_ENABLE_DECIMAL_FLOAT
 GLIBCXX_ENABLE_INT128_FLOAT128
+if test "$enable_float128" = yes; then
+  port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
+fi
 
 # Checks for compiler support that doesn't require linking.
 GLIBCXX_CHECK_COMPILER_FEATURES
index 06991144dc146e7fa69672c5519f0e4603239759..15b05dcb9574baaf6a58ccafc2f7d9fc848775c1 100644 (file)
@@ -213,6 +213,7 @@ check_version(symbol& test, bool added)
       known_versions.push_back("CXXABI_1.3.8");
       known_versions.push_back("CXXABI_1.3.9");
       known_versions.push_back("CXXABI_TM_1");
+      known_versions.push_back("CXXABI_FLOAT128");
     }
   compat_list::iterator begin = known_versions.begin();
   compat_list::iterator end = known_versions.end();
@@ -230,16 +231,18 @@ check_version(symbol& test, bool added)
       // Check that added symbols are added in the latest pre-release version.
       bool latestp = (test.version_name == "GLIBCXX_3.4.21"
                     || test.version_name == "CXXABI_1.3.9"
+                    || test.version_name == "CXXABI_FLOAT128"
                     || test.version_name == "CXXABI_TM_1");
       if (added && !latestp)
        test.version_status = symbol::incompatible;
 
       // Check that long double compatibility symbols demangled as
-      // __float128 are put into some _LDBL_ version name.
+      // __float128 and regular __float128 symbols are put into some _LDBL_
+      // or _FLOAT128 version name.
       if (added && test.demangled_name.find("__float128") != std::string::npos)
        {
-         // Has to be in _LDBL_ version name.
-         if (test.version_name.find("_LDBL_") == std::string::npos)
+         if (test.version_name.find("_LDBL_") == std::string::npos
+             && test.version_name.find("_FLOAT128") == std::string::npos)
            test.version_status = symbol::incompatible;
        }