aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2014-11-18 21:20:53 +0100
committerMarc Glisse <glisse@gcc.gnu.org>2014-11-18 20:20:53 +0000
commitbb59f396f8ca74c7d663c197e99d15bbe9f6e5b6 (patch)
tree5b3d99e4e1395d1c33d0403fec1bef77b04a596d
parentac2f8d26b5a601186735d1341eaec7779e9fa7fe (diff)
downloadgcc-bb59f396f8ca74c7d663c197e99d15bbe9f6e5b6.zip
gcc-bb59f396f8ca74c7d663c197e99d15bbe9f6e5b6.tar.gz
gcc-bb59f396f8ca74c7d663c197e99d15bbe9f6e5b6.tar.bz2
re PR libstdc++/43622 (Incomplete C++ library support for __float128)
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
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/rtti.c2
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/config/abi/pre/float128.ver10
-rwxr-xr-xlibstdc++-v3/configure3
-rw-r--r--libstdc++-v3/configure.ac3
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc9
7 files changed, 38 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0628b42..2e18932 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 0d6dd96..aef71f2 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 857c05e..c0e1738 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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
index 0000000..26c62c7
--- /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 6a57537..5fcb705 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 eb826e4..135d536 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 0699114..15b05dc 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;
}