From bb59f396f8ca74c7d663c197e99d15bbe9f6e5b6 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Tue, 18 Nov 2014 21:20:53 +0100 Subject: [PATCH] re PR libstdc++/43622 (Incomplete C++ library support for __float128) 2014-11-18 Marc Glisse 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 | 5 +++++ gcc/cp/rtti.c | 2 ++ libstdc++-v3/ChangeLog | 9 +++++++++ libstdc++-v3/config/abi/pre/float128.ver | 10 ++++++++++ libstdc++-v3/configure | 3 +++ libstdc++-v3/configure.ac | 3 +++ libstdc++-v3/testsuite/util/testsuite_abi.cc | 9 ++++++--- 7 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 libstdc++-v3/config/abi/pre/float128.ver diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0628b4221d9..2e18932dc49 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2014-11-18 Marc Glisse + + PR libstdc++/43622 + * rtti.c (emit_support_tinfos): Handle __float128. + 2014-11-18 Jason Merrill PR c++/63925 diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 0d6dd960003..aef71f27bc5 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -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 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 857c05e163e..c0e17389558 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2014-11-18 Marc Glisse + + 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 * 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 index 00000000000..26c62c70be0 --- /dev/null +++ b/libstdc++-v3/config/abi/pre/float128.ver @@ -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; + +}; diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 6a57537b87c..5fcb705b363 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -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. diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index eb826e4133f..135d536e1b2 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -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 diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index 06991144dc1..15b05dcb957 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -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; } -- 2.30.2