public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* __float128 typeinfo
@ 2014-11-09  0:41 Marc Glisse
  2014-11-10 18:39 ` Jonathan Wakely
  0 siblings, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-11-09  0:41 UTC (permalink / raw)
  To: libstdc++; +Cc: gcc-patches

[-- Attachment #1: Type: TEXT/PLAIN, Size: 846 bytes --]

Hello,

I am digging out https://gcc.gnu.org/ml/gcc-patches/2014-06/msg00637.html

It isn't completely clear if the libstdc++ part was accepted or not. I 
won't commit immediately (waiting on another patch), but I'd like to be 
ready.

The front-end part is included for reference, both versions were approved, 
I'll use the first one if arm vectors are reworked in the same way as 
aarch64 before the end of stage 1, and the other one if for some reason it 
gets delayed.

2014-11-10  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.

-- 
Marc Glisse

[-- Attachment #2: Type: TEXT/PLAIN, Size: 6500 bytes --]

Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c	(revision 217249)
+++ gcc/cp/rtti.c	(working copy)
@@ -1540,20 +1540,35 @@ emit_support_tinfos (void)
     return;
   doing_runtime = 1;
   for (ix = 0; fundamentals[ix]; ix++)
     emit_support_tinfo_1 (*fundamentals[ix]);
   for (ix = 0; ix < NUM_INT_N_ENTS; ix ++)
     if (int_n_enabled_p[ix])
       {
 	emit_support_tinfo_1 (int_n_trees[ix].signed_type);
 	emit_support_tinfo_1 (int_n_trees[ix].unsigned_type);
       }
+#if 1
+  for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+    emit_support_tinfo_1 (TREE_VALUE (t));
+#else
+  /* Search for an extra floating point type like __float128.  */
+  for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+       mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    {
+      tree type = c_common_type_for_mode (mode, false);
+      if (type && type != float_type_node && type != double_type_node
+	  && type != long_double_type_node)
+	emit_support_tinfo_1 (type);
+    }
+#endif
 }
 
 /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
    tinfo decl.  Determine whether it needs emitting, and if so
    generate the initializer.  */
 
 bool
 emit_tinfo_decl (tree decl)
 {
   tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver	(revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver	(working copy)
@@ -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: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure	(revision 217249)
+++ libstdc++-v3/configure	(working copy)
@@ -15703,20 +15703,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
 $as_echo "$enable_float128" >&6; }
     rm -f conftest*
 
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 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.
 
   # All these tests are for C++; save the language and the compiler flags.
   # The CXXFLAGS thing is suspicious, but based on similar bits previously
   # found in GLIBCXX_CONFIGURE.
 
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac	(revision 217249)
+++ libstdc++-v3/configure.ac	(working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
 # Enable descriptive messages to standard output on termination.
 GLIBCXX_ENABLE_VERBOSE
 
 # Enable compiler support that doesn't require linking.
 GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
 GLIBCXX_ENABLE_PCH($is_hosted)
 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
 
 # Enable all the variable C++ runtime options that don't require linking.
 GLIBCXX_ENABLE_CSTDIO
 GLIBCXX_ENABLE_CLOCALE
 GLIBCXX_ENABLE_ALLOCATOR
 GLIBCXX_ENABLE_CHEADERS($c_model)  dnl c_model from configure.host
 GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc	(revision 217249)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc	(working copy)
@@ -206,47 +206,50 @@ check_version(symbol& test, bool added)
       known_versions.push_back("CXXABI_1.3.1");
       known_versions.push_back("CXXABI_1.3.2");
       known_versions.push_back("CXXABI_1.3.3");
       known_versions.push_back("CXXABI_1.3.4");
       known_versions.push_back("CXXABI_1.3.5");
       known_versions.push_back("CXXABI_1.3.6");
       known_versions.push_back("CXXABI_1.3.7");
       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();
 
   // Check for compatible version.
   if (test.version_name.size())
     {
       compat_list::iterator it1 = find(begin, end, test.version_name);
       compat_list::iterator it2 = find(begin, end, test.name);
       if (it1 != end)
 	test.version_status = symbol::compatible;
       else
 	test.version_status = symbol::incompatible;
 
       // 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;
 	}
 
       // Check for weak label.
       if (it1 == end && it2 == end)
 	test.version_status = symbol::incompatible;
 
       // Check that
       // GLIBCXX_3.4
       // GLIBCXX_3.4.5

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-11-09  0:41 __float128 typeinfo Marc Glisse
@ 2014-11-10 18:39 ` Jonathan Wakely
  0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Wakely @ 2014-11-10 18:39 UTC (permalink / raw)
  To: Marc Glisse; +Cc: libstdc++, gcc-patches

On 09/11/14 01:41 +0100, Marc Glisse wrote:
>Hello,
>
>I am digging out https://gcc.gnu.org/ml/gcc-patches/2014-06/msg00637.html
>
>It isn't completely clear if the libstdc++ part was accepted or not. I 
>won't commit immediately (waiting on another patch), but I'd like to 
>be ready.

The libstdc++ part is OK.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-07  9:42   ` Marc Glisse
  2014-06-07  9:49     ` Paolo Carlini
@ 2014-06-08  0:07     ` Paolo Carlini
  1 sibling, 0 replies; 19+ messages in thread
From: Paolo Carlini @ 2014-06-08  0:07 UTC (permalink / raw)
  To: Marc Glisse; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc

[-- Attachment #1: Type: text/plain, Size: 692 bytes --]

Hi again,

On 06/07/2014 11:42 AM, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Paolo Carlini wrote:
>
>> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>>> abi_check is broken before my patch (134 incompatible symbols).
>> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I 
>> would recommend investigating in some detail what's going on at your 
>> end...
>
> Ah, no, abi_check actually passed in the regular bootstrap, it is in 
> the debug builds (-O0) that it fails because more than a hundred 
> non-inlined inline functions find their way into the library. False 
> alarm.
I'm finishing testing the attached... So far, it works fine for me at -O0.

Paolo.

////////////////

[-- Attachment #2: p --]
[-- Type: text/plain, Size: 12864 bytes --]

Index: config/abi/pre/gnu.ver
===================================================================
--- config/abi/pre/gnu.ver	(revision 211346)
+++ config/abi/pre/gnu.ver	(working copy)
@@ -24,11 +24,9 @@
     # Names inside the 'extern' block are demangled names.
     extern "C++"
     {
-      std::[A-Z]*;
-      std::a[a-c]*;
-      std::ad[a-n]*;
-      std::ad[p-z]*;
-      std::a[e-z]*;
+#     std::[A-Z]*;
+#     std::a[e-z]*;
+      std::ad[a-np-z]*;
 #     std::ba[a-r]*;
       std::basic_[a-e]*;
       std::basic_f[a-h]*;
@@ -45,12 +43,10 @@
       std::basic_istr[f-z]*;
       std::basic_i[t-z]*;
       std::basic_[j-n]*;
-      std::basic_o[a-e]*;
 #     std::basic_ofstream;
 #     std::basic_o[g-z]*;
-      std::basic_o[g-r]*;
-      std::basic_ostr[a-d]*;
-      std::basic_ostr[f-z]*;
+      std::basic_o[a-eg-r]*;
+      std::basic_ostr[a-df-z]*;
       std::basic_[p-r]*;
 #     std::basic_streambuf
 #     std::basic_string
@@ -64,20 +60,20 @@
 #     std::c[i-z]*;
       std::c[i-n]*;
 #     std::condition_variable;
-      std::co[^n]*;
-      std::c[p-s]*;
+#     std::co[^n]*;
+      std::cout;
+#     std::codecvt*;
+      std::collate*;
+      std::c[p-sv-z]*;
       std::cu[^r]*;
 #     std::current_exception
-      std::c[v-z]*;
 #     std::[d-g]*;
-      std::d[a-d]*;
-      std::d[f-n]*;
+      std::d[a-df-np-z]*;
       std::domain_error::d*;
 #     std::domain_error::~d*;
-      std::d[p-z]*;
-      std::e[a-q]*;
+      std::e[a-m]*;
       std::error[^_]*;
-      std::e[s-z]*;
+#     std::e[s-z];
       std::gslice*;
       std::h[^a]*;
       std::i[a-m]*;
@@ -84,9 +80,24 @@
       std::invalid_argument::i*;
 #     std::invalid_argument::~i*;
 #     std::ios_base::[A-Ha-z]*;
-      std::ios_base::[A-Ha-f]*;
+      std::ios_base::[A-Ha-e]*;
+      std::ios_base::fixed;
+      std::ios_base::float;
+      std::ios_base::failbit;
+      std::ios_base::failure*;
+      std::ios_base::floatfield;
       std::ios_base::goodbit;
-      std::ios_base::[h-z]*;
+#     std::ios_base::[h-z]*;
+      std::ios_base::[h-otu]*;
+      std::ios_base::right;
+      std::ios_base::showpos;
+      std::ios_base::scientific;
+      std::ios_base::showbase;
+      std::ios_base::showpoint;
+      std::ios_base::skipws;
+      std::ios_base::sync_with_stdio*;
+      std::ios_base::register_callback*;
+      std::ios_base::xalloc*;
       std::ios_base::_M_grow_words*;
       std::ios_base::_M_init*;
       std::ios_base::Init::[A-Za-z]*;
@@ -96,19 +107,19 @@
 #     std::istreambuf_iterator
       std::istringstream*;
       std::istrstream*;
-      std::i[t-z]*;
+#     std::i[t-z]*;
       std::[A-Zj-k]*;
       std::length_error::l*;
 #     std::length_error::~l*;
       std::logic_error*;
       std::locale::[A-Za-e]*;
-      std::locale::facet::[A-Za-z]*;
+      std::locale::facet::[A-Zg-z]*;
       std::locale::facet::_S_get_c_locale*;
       std::locale::facet::_S_clone_c_locale*;
       std::locale::facet::_S_create_c_locale*;
       std::locale::facet::_S_destroy_c_locale*;
       std::locale::[A-Zg-h]*;
-      std::locale::id::[A-Za-z]*;
+#     std::locale::id::[A-Za-z]*;
       std::locale::id::_M_id*;
       std::locale::[A-Zj-z]*;
       std::locale::_[A-Ha-z]*;
@@ -117,15 +128,14 @@
       std::locale::_[J-Ra-z]*;
       std::locale::_S_normalize_category*;
       std::locale::_[T-Za-z]*;
-#     std::[A-Zm-r]*;
-#     std::[A-Zm]*;
-      std::[A-Z]*;
-      std::messages*;
-      std::money*;
+#     std::messages*;
+#     std::money*;
 #     std::n[^u]*;
-      std::n[^aue]*;
-      std::nu[^m]*;
-      std::num[^e]*;
+#     std::n[^aue]*;
+      std::nothrow;
+#     std::nu[^m]*;
+#     std::num[^e]*;
+      std::numpunct*;
       std::ostrstream*;
       std::out_of_range::o*;
 #     std::out_of_range::~o*;
@@ -145,18 +155,16 @@
       std::strstreambuf*;
 #     std::t[a-q]*;
       std::t[a-g]*;
-      std::th[a-h]*;
-      std::th[j-q]*;
-      std::th[s-z]*;
+      std::th[a-hj-qs-z]*;
 #     std::t[i-n]*;
       std::tr1::h[^a]*;
-      std::t[s-z]*;
+#     std::t[s-z]*;
 #     std::[A-Zu-z]*;
       std::underflow_error::u*;
 #     std::underflow_error::~u*;
       std::uncaught_exception*;
       std::unexpected*;
-      std::[A-Zv-z]*;
+      std::[A-Zw-z]*;
       std::_List_node_base::hook*;
       std::_List_node_base::swap*;
       std::_List_node_base::unhook*;
@@ -179,6 +187,11 @@
     # among the standard integer types and sizes on different platforms and
     # under different modes of 64-bit architecture (ILP64, LLP64, etc.)
 
+    # std::allocator
+    _ZNSaI[cw]EC[12]Ev;
+    _ZNSaI[cw]ED*;
+    _ZNSaI[cw]EC[12]ERKS_;
+
     # std::string
     # 'y' here and below represents 'unsigned long long'
     # where it is used for size_type on LLP64 platforms.
@@ -196,7 +209,7 @@
     _ZNSs[67][j-z]*E[PRcjmvy]*;
     _ZNSs7[a-z]*EES2_[NPRjmy]*;
     _ZNSs7[a-z]*EES2_S[12]*;
-    _ZNSs12_Alloc_hiderC*;
+    _ZNSs12_Alloc_hiderC[12]EP*;
     _ZNSs12_M_leak_hardEv;
     _ZNSs12_S_constructE[jmy]cRKSaIcE;
     _ZNSs12_S_empty_repEv;
@@ -236,7 +249,10 @@
     _ZNKSs8_M_check*;
     _ZNKSs8_M_limit*;
     _ZNKSs9_M_ibeginEv;
-    _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_E*;
+#   _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_E*;
+    _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ES*;
+    _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS*;
+    _ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_;
     _ZNKSs7compare*;
     _ZNKSs5c_strEv;
     _ZNKSs8capacityEv;
@@ -257,7 +273,8 @@
     _ZNSbIwSt11char_traitsIwESaIwEE[67][j-z]*E[PRwjmvy]*;
     _ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_[NPRjmy]*;
     _ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_S[56]*;
-    _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC*;
+#   _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC*;
+    _ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC[12]EP*;
     _ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv;
     _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructE[jmy]wRKS1_;
     _ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv;
@@ -452,31 +469,52 @@
     # std::use_facet
     _ZSt9use_facetIS*;
 
+    # std::codecvt
+    _ZNSt14codecvt_byname*;
+    _ZNKSt7codecvtI[cw]c11*;
+    _ZNSt7codecvtI[cw]c11*;
+
+    # std::ctype_base
+    _ZNSt10ctype_base5*;
+    _ZNSt10ctype_base6*;
+
     # std::ctype
-    _ZNKSt5ctypeIcE8*;
+    _ZNKSt5ctypeIcE8do_widen*;
     _ZNKSt5ctypeIcE9*;
     _ZNKSt5ctypeIcE10*;
     _ZNKSt5ctypeIw*;
     _ZNSt5ctypeI[cw]*;
 
-    # std::ctype_base
-    _ZNSt10ctype_base*;
-
     # std::ctype_byname
     _ZNSt12ctype_bynameI[cw]*;
 
     # std::num_get
-    _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+    _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE1[46]*;
+    _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[236CD]*;
+    _ZNSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
     # std::num_put
     _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+    _ZNSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
+    # std::money_base
+    _ZNSt10money_base8*;
+    _ZNSt10money_base18*;
+    _ZNSt10money_base20*;
+
     # std::money_get
+    _ZNSt9money_get*;
     _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
     # std::money_put
+    _ZNSt9money_put*;
     _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
+    # std::moneypunct
+    _ZNKSt10moneypunct*;
+    _ZNSt10moneypunct*;
+    _ZNSt17moneypunct*;
+
     # std::time_get
     _ZNSt8time_get*;
     _ZNKSt8time_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE1*;
@@ -493,6 +531,11 @@
     # std::time_put_byname
     _ZNSt15time_put_byname*;
 
+    # std::messages
+    _ZNKSt8messages*;
+    _ZNSt8messages*;
+    _ZNSt15messages_byname*;
+
     # std::numeric_limits
     _ZNSt21__numeric_limits_base[5-9]*;
     _ZNSt21__numeric_limits_base1[0-7][hirt]*;
@@ -499,7 +542,8 @@
     _ZNSt21__numeric_limits_base1[0-7]mi*;
     _ZNSt21__numeric_limits_base1[0-7]max_e*;
 
-    _ZNSt14numeric_limitsI[a-m]E[5-9]*;
+    _ZNSt14numeric_limitsI[a-m]E[5-9][a-hj-z]*;
+    _ZNSt14numeric_limitsI[a-m]E[5-9]is_*;
     _ZNSt14numeric_limitsI[p-z]E[5-9]*;
     _ZNSt14numeric_limitsI[a-m]E1[0-7][hirt]*;
     _ZNSt14numeric_limitsI[p-z]E1[0-7][hirt]*;
@@ -508,6 +552,12 @@
     _ZNSt14numeric_limitsI[a-m]E1[0-7]max_e*;
     _ZNSt14numeric_limitsI[p-z]E1[0-7]max_e*;
 
+    # std::valarray
+    _ZNSt8valarrayI[jmy]ED*;
+    _ZNSt8valarrayI[jmy]EC*;
+    _ZNSt8valarrayI[jmy]EixE[jmy];
+    _ZNKSt8valarrayI[jmy]E4sizeEv;
+
     # std::_Rb_tree
     _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
     _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base;
@@ -563,7 +613,7 @@
     _ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
 
     # __gnu_debug::_Error_formatter
-    _ZNK11__gnu_debug16_Error_formatter10_M_message*;
+    _ZNK11__gnu_debug16_Error_formatter10_M_messageENS*;
     _ZNK11__gnu_debug16_Error_formatter10_Parameter*;
     _ZNK11__gnu_debug16_Error_formatter13_M_print_word*;
     _ZNK11__gnu_debug16_Error_formatter15_M_print_string*;
@@ -667,9 +717,9 @@
     _ZTISt10__num_base;
     _ZTISt21__ctype_abstract_baseI[cw]E;
     _ZTISt23__codecvt_abstract_baseI[cw]c11__mbstate_tE;
-#    _ZTISt16__numpunct_cacheI[cw]E;
-#    _ZTISt17__timepunct_cacheI[cw]E;
-#    _ZTISt18__moneypunct_cacheI[cw]Lb?EE;
+#   _ZTISt16__numpunct_cacheI[cw]E;
+#   _ZTISt17__timepunct_cacheI[cw]E;
+#   _ZTISt18__moneypunct_cacheI[cw]Lb?EE;
     _ZTINSt8ios_base7failureE;
     _ZTINSt6locale5facetE;
     _ZTIN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
@@ -708,6 +758,14 @@
     _ZTSN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
     _ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE;
 
+    # std::type_info
+    _ZNKSt9type_info1*;
+    _ZNSt9type_infoD*;
+
+    # std::exception
+    _ZNKSt9exception4whatEv;
+    _ZNSt9exceptionD*;
+
     # std::bad_alloc::~bad_alloc, std::bad_cast::~bad_cast,
     # std::bad_typeid::~bad_typeid, std::bad_exception::~bad_exception
     _ZNSt9bad_allocD*;
@@ -989,7 +1047,10 @@
     _ZNSt15basic_streambufI[cw]St11char_traitsI[cw]EE6stosscEv;
 
     _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE4syncEv;
-    _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5-9C]*;
+    _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5679]*;
+    _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE8overflow*;
+    _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEC[12]*;
+    
     _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EED[^2]*;
 
 } GLIBCXX_3.4.9;
@@ -1150,8 +1211,14 @@
     _ZNKSbIwSt11char_traitsIwESaIwEE5crendEv;
 
     # string|wstring ::_S_construct<> and ::_S_construct_aux_2 helpers
-    _ZNSs12_S_constructI*;
-    _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*;
+    # _ZNSs12_S_constructI*;
+    _ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag;
+    _ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag;
+    _ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPcSsEEEES2_T_S4_RKSaIcESt20forward_iterator_tag;
+    # _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*;
+    _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag;
+    _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag;
+    _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIN9__gnu_cxx17__normal_iteratorIPwS2_EEEES6_T_S8_RKS1_St20forward_iterator_tag;
     _ZNSs18_S_construct_aux_2*;
     _ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2*;
 
@@ -1416,7 +1483,7 @@
 
     # *_type_info classes, ctor and dtor
     _ZN10__cxxabiv117__array_type_info*;
-    _ZN10__cxxabiv117__class_type_info*;
+    _ZN10__cxxabiv117__class_type_infoD*;
     _ZN10__cxxabiv116__enum_type_info*;
     _ZN10__cxxabiv120__function_type_info*;
     _ZN10__cxxabiv123__fundamental_type_info*;
@@ -1427,7 +1494,8 @@
     _ZN10__cxxabiv121__vmi_class_type_info*;
 
     # *_type_info classes, member functions
-    _ZNK10__cxxabiv117__class_type_info*;
+    _ZNK10__cxxabiv117__class_type_info1[012]*;
+    _ZNK10__cxxabiv117__class_type_info2*;
     _ZNK10__cxxabiv120__function_type_info*;
     _ZNK10__cxxabiv117__pbase_type_info*;
     _ZNK10__cxxabiv129__pointer_to_member_type_info*;
@@ -1576,10 +1644,14 @@
 
 CXXABI_1.3.8 {
     __cxa_throw_bad_array_new_length;
-    _Z*St20bad_array_new_length*;
+    _ZT[VSI]St20bad_array_new_length;
+    _ZNSt20bad_array_new_lengthD*;
+    _ZNKSt20bad_array_new_length4whatEv;
 
     __cxa_throw_bad_array_length;
-    _Z*St16bad_array_length*;
+    _ZT[VSI]St16bad_array_length;
+    _ZNSt16bad_array_lengthD*;
+    _ZNKSt16bad_array_length4whatEv;
 
     # Virtual table verification stub functions.
     _Z17__VLTRegisterPair*;

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-07  9:42   ` Marc Glisse
@ 2014-06-07  9:49     ` Paolo Carlini
  2014-06-08  0:07     ` Paolo Carlini
  1 sibling, 0 replies; 19+ messages in thread
From: Paolo Carlini @ 2014-06-07  9:49 UTC (permalink / raw)
  To: Marc Glisse; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc



Hi,

On 07 giugno 2014 11:42:23 CEST, Marc Glisse <marc.glisse@inria.fr> wrote:
>On Fri, 6 Jun 2014, Paolo Carlini wrote:
>
>> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>>> abi_check is broken before my patch (134 incompatible symbols).
>> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I
>would 
>> recommend investigating in some detail what's going on at your end...
>
>Ah, no, abi_check actually passed in the regular bootstrap, it is in
>the 
>debug builds (-O0) that it fails because more than a hundred
>non-inlined 
>inline functions find their way into the library. False alarm.

Thanks for checking. That is a known issue: short term the only solution I can see is tightening by hand the patterns in the linker script to avoid exporting all the functions which are not inlined anymore at -O0. If nobody has smarter plans I can come to that boring work.

Paolo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 14:27 ` Paolo Carlini
@ 2014-06-07  9:42   ` Marc Glisse
  2014-06-07  9:49     ` Paolo Carlini
  2014-06-08  0:07     ` Paolo Carlini
  0 siblings, 2 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-07  9:42 UTC (permalink / raw)
  To: Paolo Carlini; +Cc: gcc-patches, jason, libstdc++, meissner, ramana.gcc

On Fri, 6 Jun 2014, Paolo Carlini wrote:

> On 06/06/2014 04:16 PM, Marc Glisse wrote:
>> abi_check is broken before my patch (134 incompatible symbols).
> Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I would 
> recommend investigating in some detail what's going on at your end...

Ah, no, abi_check actually passed in the regular bootstrap, it is in the 
debug builds (-O0) that it fails because more than a hundred non-inlined 
inline functions find their way into the library. False alarm.

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 15:25 ` Ramana Radhakrishnan
  2014-06-06 15:41   ` Marc Glisse
@ 2014-06-07  1:14   ` Richard Earnshaw
  1 sibling, 0 replies; 19+ messages in thread
From: Richard Earnshaw @ 2014-06-07  1:14 UTC (permalink / raw)
  To: Ramana Radhakrishnan, Marc Glisse
  Cc: gcc-patches, Jason Merrill, libstdc++, meissner

On 06/06/14 16:25, Ramana Radhakrishnan wrote:
> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>> Hello,
>>
>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>> copied from:
>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>> (which wasn't reviewed), but I changed the testsuite.
>>
>> Michael will likely need to make some adjustments to his __float128 patch,
>> but I believe it will only be a small configure tweak.
>>
>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>> XFmode defined in arm-modes.def and apparently unused?
> 
> Thanks for this though I know Tejas is actually trying to fix AArch64
> first and then we'll move on to ARM for cleaning up all these types -
> as you realize it's quite a chunky project.
> 
> A patch to remove XFmode is pre-approved. I have no idea why this is
> in here. Archeaology shows this came in
> 
>     git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72440
> 
> and with a FIXME:
> 
> I'll try and have a look at this patch later today or over the weekend
> to see if it doesn't affect ARM / AArch64.
> 


XFmode should have been removed on ARM when the FPA code was expunged.

In fact, it was only briefly used on ARM many, many, years ago when I
tried to use the FPA's extended double-precision format for long double.
 That change was backed out when it turned out that some machines of
that era would hang hard (BRS time) in the RISC iX kernel due to a bug
in the floating-point emulation code for handling denormals.

R.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 17:21       ` Marc Glisse
  2014-06-06 17:45         ` Michael Meissner
@ 2014-06-06 18:09         ` Joseph S. Myers
  1 sibling, 0 replies; 19+ messages in thread
From: Joseph S. Myers @ 2014-06-06 18:09 UTC (permalink / raw)
  To: Marc Glisse; +Cc: Jason Merrill, gcc-patches, libstdc++, meissner, ramana.gcc

On Fri, 6 Jun 2014, Marc Glisse wrote:

> DJ Delorie's work on __intN may be a good direction for __floatN as well, IIUC
> we will have a global list of 4 __intN types, and the target decides the value
> of N for each of them, so we can refer to those type nodes in common code but
> they are still target-specific. Or maybe there isn't enough variety in float
> types to deserve this.

The binary types in TS 18661-3 are:

- _FloatN, where N is 16, 32, 64, or >= 128 and a multiple of 32
- _Float32x
- _Float64x
- _Float128x

(_Float32, _Float64, _Float32x required; the first two same representation 
and alignment as float and double; other types optional.  _Float32x likely 
to be same representation and alignment as double.  _Float64x likely to be 
same representation and alignment as __float80 where that's supported, or 
__float128 where that's supported but __float80 isn't.  All of these types 
have IEEE semantics for their operations, so IBM long double would not be 
used for any of them.  All these types are distinct from each other and 
from float / double / long double.  All these types have corresponding 
_Complex types.  Obviously there are ABI issues with compatibility with 
other implementations when supporting these types, although I doubt there 
will be much difficulty with those in practice.  To support these in C++ 
you'd need mangling defined.)

I don't really expect anything other than _Float16, _Float32, _Float64, 
_Float128, _Float32x (= binary64), _Float64x (= __float80 or binary128) to 
be widely used in the near future, though you might still want generic 
_FloatN support (and would need it to a certain extent, to process 
unsupported types meeting the given pattern as keywords rather than 
identifiers then give an error that the type isn't supported).

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 17:21       ` Marc Glisse
@ 2014-06-06 17:45         ` Michael Meissner
  2014-06-06 18:09         ` Joseph S. Myers
  1 sibling, 0 replies; 19+ messages in thread
From: Michael Meissner @ 2014-06-06 17:45 UTC (permalink / raw)
  To: Marc Glisse; +Cc: Jason Merrill, gcc-patches, libstdc++, meissner, ramana.gcc

On Fri, Jun 06, 2014 at 07:21:03PM +0200, Marc Glisse wrote:
> DJ Delorie's work on __intN may be a good direction for __floatN as
> well, IIUC we will have a global list of 4 __intN types, and the
> target decides the value of N for each of them, so we can refer to
> those type nodes in common code but they are still target-specific.
> Or maybe there isn't enough variety in float types to deserve this.

One of the problems I've been having with IEEE floating point on PowerPC is the
number of bits is not the only measure.  The IBM double-double format that is
currently used for long double is 128 bits as is the IEEE 128-bit floating
point.  So, in theory __float128 could be used for the IBM double-double
format.  There might be other places where an implementation has 2 floating
point formats of the same size.

One of the things I need to do to the basic internals, is provide an option so
that __float128 does not widen to a larger type or have smaller types widen to
it.

Another problem with the current __float128 on x86 is it isn't a base type, so
you have do something like the following:

typedef _Complex float __attribute__((mode(TC))) _Complex128;

It would be nice to have a standard name for IEEE 128-bit floating point,
whether it is a defacto standard like __float128, or something in future
standards like _Float128.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 16:38     ` Jason Merrill
  2014-06-06 16:55       ` Joseph S. Myers
@ 2014-06-06 17:21       ` Marc Glisse
  2014-06-06 17:45         ` Michael Meissner
  2014-06-06 18:09         ` Joseph S. Myers
  1 sibling, 2 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 17:21 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1707 bytes --]

On Fri, 6 Jun 2014, Jason Merrill wrote:

> On 06/06/2014 11:58 AM, Marc Glisse wrote:
>> On Fri, 6 Jun 2014, Jason Merrill wrote:
>> 
>>> What's your rationale for keeping this in a separate version block
>>> rather than in 1.3.9 (like __int128)?
>> 
>> Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
>> isn't __float128 but (de)mangles that way). That doesn't prevent from
>> using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
>> that if you prefer. If a new target implements __float128 in 4.11 or
>> 4.12, they will have to refine the configure test and provide a
>> different .ver file to avoid adding symbols to an old version.
>
> Fair enough.  Let's stick with your approach then, but drop the 1.3.9 from 
> the name.

Ok. To help with the review, I am appending the updated patch (untested). 
(if we add numeric_limits<__float128> later, I think it should go into 
GLIBCXX_FLOAT128_1)

> Why is __float128 handled as a target type, anyway?  I'd think it ought to be 
> a standard type that just isn't supported on all targets, like __int128.

I don't know. Since it is implemented in software on all platforms as far 
as I know, it shouldn't be that specific to a target. But it isn't just 
__float128, on some targets my patch may start generating extra symbols 
for half-floats (ARM) or __float80.

DJ Delorie's work on __intN may be a good direction for __floatN as well, 
IIUC we will have a global list of 4 __intN types, and the target decides 
the value of N for each of them, so we can refer to those type nodes in 
common code but they are still target-specific. Or maybe there isn't 
enough variety in float types to deserve this.

-- 
Marc Glisse

[-- Attachment #2: Type: TEXT/PLAIN, Size: 6360 bytes --]

Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c	(revision 211311)
+++ gcc/cp/rtti.c	(working copy)
@@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
 			/*tag_scope=*/ts_current, false);
   pop_abi_namespace ();
   if (!COMPLETE_TYPE_P (bltn_type))
     return;
   dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
   if (!dtor || DECL_EXTERNAL (dtor))
     return;
   doing_runtime = 1;
   for (ix = 0; fundamentals[ix]; ix++)
     emit_support_tinfo_1 (*fundamentals[ix]);
+
+  /* Search for an extra floating point type like __float128.  */
+  for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+       mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    {
+      tree type = c_common_type_for_mode (mode, false);
+      if (type && type != float_type_node && type != double_type_node
+	  && type != long_double_type_node)
+	emit_support_tinfo_1 (type);
+    }
 }
 
 /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
    tinfo decl.  Determine whether it needs emitting, and if so
    generate the initializer.  */
 
 bool
 emit_tinfo_decl (tree decl)
 {
   tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver	(revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver	(working copy)
@@ -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: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure	(revision 211311)
+++ libstdc++-v3/configure	(working copy)
@@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
 $as_echo "$enable_float128" >&6; }
     rm -f conftest*
 
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 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.
 
   # All these tests are for C++; save the language and the compiler flags.
   # The CXXFLAGS thing is suspicious, but based on similar bits previously
   # found in GLIBCXX_CONFIGURE.
 
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac	(revision 211311)
+++ libstdc++-v3/configure.ac	(working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
 # Enable descriptive messages to standard output on termination.
 GLIBCXX_ENABLE_VERBOSE
 
 # Enable compiler support that doesn't require linking.
 GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
 GLIBCXX_ENABLE_PCH($is_hosted)
 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
 
 # Enable all the variable C++ runtime options that don't require linking.
 GLIBCXX_ENABLE_CSTDIO
 GLIBCXX_ENABLE_CLOCALE
 GLIBCXX_ENABLE_ALLOCATOR
 GLIBCXX_ENABLE_CHEADERS($c_model)  dnl c_model from configure.host
 GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc	(revision 211311)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc	(working copy)
@@ -206,47 +206,50 @@ check_version(symbol& test, bool added)
       known_versions.push_back("CXXABI_1.3.1");
       known_versions.push_back("CXXABI_1.3.2");
       known_versions.push_back("CXXABI_1.3.3");
       known_versions.push_back("CXXABI_1.3.4");
       known_versions.push_back("CXXABI_1.3.5");
       known_versions.push_back("CXXABI_1.3.6");
       known_versions.push_back("CXXABI_1.3.7");
       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();
 
   // Check for compatible version.
   if (test.version_name.size())
     {
       compat_list::iterator it1 = find(begin, end, test.version_name);
       compat_list::iterator it2 = find(begin, end, test.name);
       if (it1 != end)
 	test.version_status = symbol::compatible;
       else
 	test.version_status = symbol::incompatible;
 
       // 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;
 	}
 
       // Check for weak label.
       if (it1 == end && it2 == end)
 	test.version_status = symbol::incompatible;
 
       // Check that
       // GLIBCXX_3.4
       // GLIBCXX_3.4.5

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 16:55       ` Joseph S. Myers
@ 2014-06-06 17:06         ` Jason Merrill
  0 siblings, 0 replies; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 17:06 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: Marc Glisse, gcc-patches, libstdc++, meissner, ramana.gcc

On 06/06/2014 12:54 PM, Joseph S. Myers wrote:
> If we want something like that as a standard type not supported on all
> targets I'd think we should use the DTS 18661-3 naming (_Float128)

Ah, I wasn't aware of that TS, thanks.  I'll check whether it's on the 
C++ committee agenda yet.

Jason

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 16:38     ` Jason Merrill
@ 2014-06-06 16:55       ` Joseph S. Myers
  2014-06-06 17:06         ` Jason Merrill
  2014-06-06 17:21       ` Marc Glisse
  1 sibling, 1 reply; 19+ messages in thread
From: Joseph S. Myers @ 2014-06-06 16:55 UTC (permalink / raw)
  To: Jason Merrill; +Cc: Marc Glisse, gcc-patches, libstdc++, meissner, ramana.gcc

On Fri, 6 Jun 2014, Jason Merrill wrote:

> On 06/06/2014 11:58 AM, Marc Glisse wrote:
> > On Fri, 6 Jun 2014, Jason Merrill wrote:
> > 
> > > What's your rationale for keeping this in a separate version block
> > > rather than in 1.3.9 (like __int128)?
> > 
> > Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
> > isn't __float128 but (de)mangles that way). That doesn't prevent from
> > using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
> > that if you prefer. If a new target implements __float128 in 4.11 or
> > 4.12, they will have to refine the configure test and provide a
> > different .ver file to avoid adding symbols to an old version.
> 
> Fair enough.  Let's stick with your approach then, but drop the 1.3.9 from the
> name.
> 
> Why is __float128 handled as a target type, anyway?  I'd think it ought to be
> a standard type that just isn't supported on all targets, like __int128.

If we want something like that as a standard type not supported on all 
targets I'd think we should use the DTS 18661-3 naming (_Float128) and 
then make __float128 a typedef for that, at least for C.  (I don't know if 
C++ would want peculiarities such as _Float128 being a distinct type from 
long double even if they have the same representation and alignment, so a 
conservative approach would be for _Float128 not to exist for C++ unless 
it's distinct.  There are various other details in which _Float128 differs 
from __float128, e.g. it's a keyword and all _FloatN for N >= 128 and a 
multiple of 32 are keywords whether or not the type is supported.  I 
imagine any C++ bindings would look somewhat different, like the C++ 
bindings to decimal floating point.)

Both __float128 and __int128 names came from the x86_64 ABI.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 15:58   ` Marc Glisse
@ 2014-06-06 16:38     ` Jason Merrill
  2014-06-06 16:55       ` Joseph S. Myers
  2014-06-06 17:21       ` Marc Glisse
  0 siblings, 2 replies; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 16:38 UTC (permalink / raw)
  To: Marc Glisse; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc

On 06/06/2014 11:58 AM, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Jason Merrill wrote:
>
>> What's your rationale for keeping this in a separate version block
>> rather than in 1.3.9 (like __int128)?
>
> Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that
> isn't __float128 but (de)mangles that way). That doesn't prevent from
> using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do
> that if you prefer. If a new target implements __float128 in 4.11 or
> 4.12, they will have to refine the configure test and provide a
> different .ver file to avoid adding symbols to an old version.

Fair enough.  Let's stick with your approach then, but drop the 1.3.9 
from the name.

Why is __float128 handled as a target type, anyway?  I'd think it ought 
to be a standard type that just isn't supported on all targets, like 
__int128.

Jason

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 15:39 ` Jason Merrill
@ 2014-06-06 15:58   ` Marc Glisse
  2014-06-06 16:38     ` Jason Merrill
  0 siblings, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 15:58 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, libstdc++, meissner, ramana.gcc

On Fri, 6 Jun 2014, Jason Merrill wrote:

> On 06/06/2014 10:16 AM, Marc Glisse wrote:
>>      * config/abi/pre/float128.ver: New file.
>> +CXXABI_FLOAT128_1.3.9 {
>
> What's your rationale for keeping this in a separate version block rather 
> than in 1.3.9 (like __int128)?

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43622#c6

Powerpc already has those symbols in CXXABI_LDBL_1.3 (for a type that 
isn't __float128 but (de)mangles that way). That doesn't prevent from 
using CXXABI_1.3.9 in the x86/ia64-specific file though, so I can do that 
if you prefer. If a new target implements __float128 in 4.11 or 4.12, they 
will have to refine the configure test and provide a different .ver file 
to avoid adding symbols to an old version. Or I could try to share the 
CXXABI_LDBL_1.3 name although it doesn't correspond to long double in this 
case.

I have no preference, I'll go with whatever people like.

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 15:41   ` Marc Glisse
@ 2014-06-06 15:47     ` Ramana Radhakrishnan
  0 siblings, 0 replies; 19+ messages in thread
From: Ramana Radhakrishnan @ 2014-06-06 15:47 UTC (permalink / raw)
  To: Marc Glisse; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner

On 06/06/14 16:40, Marc Glisse wrote:
> On Fri, 6 Jun 2014, Ramana Radhakrishnan wrote:
>
>> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>>> Hello,
>>>
>>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>>> copied from:
>>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>>> (which wasn't reviewed), but I changed the testsuite.
>>>
>>> Michael will likely need to make some adjustments to his __float128 patch,
>>> but I believe it will only be a small configure tweak.
>>>
>>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>>> XFmode defined in arm-modes.def and apparently unused?
>>
>> Thanks for this though I know Tejas is actually trying to fix AArch64
>> first and then we'll move on to ARM for cleaning up all these types -
>> as you realize it's quite a chunky project.
>
> Nice to know. I am a bit afraid it might be hard without breaking ABI
> compatibility at least a little. Good luck anyway.

We did talk about that - but our expectation was that these scalar types 
are actually not exposed on any interface and are purely for internal 
representations.

User land should only be using the vector types from arm_neon.h - in any 
case if such types were used in intrinsics land, user-code will not be 
portable across compilers anyway.

>
>> A patch to remove XFmode is pre-approved.
>
> Even for such a trivial patch, it would be good to do at least a build to
> check nothing breaks, but I don't have an easy way to do that (debian
> multiarch cross-builds don't work out of the box), it would be better if
> one of the people working on ARM could handle it.

Sure, one of us will handle that. Thanks for pointing it out.

Ramana

>
>> I'll try and have a look at this patch later today or over the weekend
>> to see if it doesn't affect ARM / AArch64.
>
> Thanks!
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 15:25 ` Ramana Radhakrishnan
@ 2014-06-06 15:41   ` Marc Glisse
  2014-06-06 15:47     ` Ramana Radhakrishnan
  2014-06-07  1:14   ` Richard Earnshaw
  1 sibling, 1 reply; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 15:41 UTC (permalink / raw)
  To: ramrad01; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner

On Fri, 6 Jun 2014, Ramana Radhakrishnan wrote:

> On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>> Hello,
>>
>> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
>> part is based on the discussion with Jason yesterday. The libstdc++ part is
>> copied from:
>> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
>> (which wasn't reviewed), but I changed the testsuite.
>>
>> Michael will likely need to make some adjustments to his __float128 patch,
>> but I believe it will only be a small configure tweak.
>>
>> Ramana, does it look safe for ARM? By the way, do you want to remove the
>> XFmode defined in arm-modes.def and apparently unused?
>
> Thanks for this though I know Tejas is actually trying to fix AArch64
> first and then we'll move on to ARM for cleaning up all these types -
> as you realize it's quite a chunky project.

Nice to know. I am a bit afraid it might be hard without breaking ABI 
compatibility at least a little. Good luck anyway.

> A patch to remove XFmode is pre-approved.

Even for such a trivial patch, it would be good to do at least a build to 
check nothing breaks, but I don't have an easy way to do that (debian 
multiarch cross-builds don't work out of the box), it would be better if 
one of the people working on ARM could handle it.

> I'll try and have a look at this patch later today or over the weekend
> to see if it doesn't affect ARM / AArch64.

Thanks!

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 14:16 Marc Glisse
  2014-06-06 14:27 ` Paolo Carlini
  2014-06-06 15:25 ` Ramana Radhakrishnan
@ 2014-06-06 15:39 ` Jason Merrill
  2014-06-06 15:58   ` Marc Glisse
  2 siblings, 1 reply; 19+ messages in thread
From: Jason Merrill @ 2014-06-06 15:39 UTC (permalink / raw)
  To: Marc Glisse, gcc-patches; +Cc: libstdc++, meissner, ramana.gcc

On 06/06/2014 10:16 AM, Marc Glisse wrote:
>      * config/abi/pre/float128.ver: New file.
> +CXXABI_FLOAT128_1.3.9 {

What's your rationale for keeping this in a separate version block 
rather than in 1.3.9 (like __int128)?

Jason

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 14:16 Marc Glisse
  2014-06-06 14:27 ` Paolo Carlini
@ 2014-06-06 15:25 ` Ramana Radhakrishnan
  2014-06-06 15:41   ` Marc Glisse
  2014-06-07  1:14   ` Richard Earnshaw
  2014-06-06 15:39 ` Jason Merrill
  2 siblings, 2 replies; 19+ messages in thread
From: Ramana Radhakrishnan @ 2014-06-06 15:25 UTC (permalink / raw)
  To: Marc Glisse; +Cc: gcc-patches, Jason Merrill, libstdc++, meissner

On Fri, Jun 6, 2014 at 3:16 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
> Hello,
>
> here is a new try on adding __float128 typeinfo to libsupc++. The front-end
> part is based on the discussion with Jason yesterday. The libstdc++ part is
> copied from:
> https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
> (which wasn't reviewed), but I changed the testsuite.
>
> Michael will likely need to make some adjustments to his __float128 patch,
> but I believe it will only be a small configure tweak.
>
> Ramana, does it look safe for ARM? By the way, do you want to remove the
> XFmode defined in arm-modes.def and apparently unused?

Thanks for this though I know Tejas is actually trying to fix AArch64
first and then we'll move on to ARM for cleaning up all these types -
as you realize it's quite a chunky project.

A patch to remove XFmode is pre-approved. I have no idea why this is
in here. Archeaology shows this came in

    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72440

and with a FIXME:

I'll try and have a look at this patch later today or over the weekend
to see if it doesn't affect ARM / AArch64.

regards
Ramana

>
> Bootstrap+testsuite on x86_64-linux-gnu. I manually checked that
> libstdc++.{a,so} gained exactly the symbols related to typeinfo for
> __float128.
>
> abi_check is broken before my patch (134 incompatible symbols). After it,
> the number of added symbols increases by 7, but the number of incompatible
> symbols remains the same, so I take it as a pass.
>
> 2014-06-06  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_1.3.9 version.
>
> --
> Marc Glisse
> Index: gcc/cp/rtti.c
> ===================================================================
> --- gcc/cp/rtti.c       (revision 211311)
> +++ gcc/cp/rtti.c       (working copy)
> @@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
>                         /*tag_scope=*/ts_current, false);
>    pop_abi_namespace ();
>    if (!COMPLETE_TYPE_P (bltn_type))
>      return;
>    dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
>    if (!dtor || DECL_EXTERNAL (dtor))
>      return;
>    doing_runtime = 1;
>    for (ix = 0; fundamentals[ix]; ix++)
>      emit_support_tinfo_1 (*fundamentals[ix]);
> +
> +  /* Search for an extra floating point type like __float128.  */
> +  for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
> +       mode != VOIDmode;
> +       mode = GET_MODE_WIDER_MODE (mode))
> +    {
> +      tree type = c_common_type_for_mode (mode, false);
> +      if (type && type != float_type_node && type != double_type_node
> +         && type != long_double_type_node)
> +       emit_support_tinfo_1 (type);
> +    }
>  }
>
>  /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
>     tinfo decl.  Determine whether it needs emitting, and if so
>     generate the initializer.  */
>
>  bool
>  emit_tinfo_decl (tree decl)
>  {
>    tree type = TREE_TYPE (DECL_NAME (decl));
> Index: libstdc++-v3/config/abi/pre/float128.ver
> ===================================================================
> --- libstdc++-v3/config/abi/pre/float128.ver    (revision 0)
> +++ libstdc++-v3/config/abi/pre/float128.ver    (working copy)
> @@ -0,0 +1,10 @@
> +# Appended to version file.
> +
> +CXXABI_FLOAT128_1.3.9 {
> +
> +    # typeinfo and typeinfo name for __float128
> +    _ZT[IS]g;
> +    _ZT[IS]Pg;
> +    _ZT[IS]PKg;
> +
> +};
> Index: libstdc++-v3/configure
> ===================================================================
> --- libstdc++-v3/configure      (revision 211311)
> +++ libstdc++-v3/configure      (working copy)
> @@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
>  $as_echo "$enable_float128" >&6; }
>      rm -f conftest*
>
>    ac_ext=c
>  ac_cpp='$CPP $CPPFLAGS'
>  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
>  ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS
> conftest.$ac_ext $LIBS >&5'
>  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.
>
>    # All these tests are for C++; save the language and the compiler flags.
>    # The CXXFLAGS thing is suspicious, but based on similar bits previously
>    # found in GLIBCXX_CONFIGURE.
>
>    ac_ext=cpp
>  ac_cpp='$CXXCPP $CPPFLAGS'
>  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
> Index: libstdc++-v3/configure.ac
> ===================================================================
> --- libstdc++-v3/configure.ac   (revision 211311)
> +++ libstdc++-v3/configure.ac   (working copy)
> @@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
>  # Enable descriptive messages to standard output on termination.
>  GLIBCXX_ENABLE_VERBOSE
>
>  # Enable compiler support that doesn't require linking.
>  GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
>  GLIBCXX_ENABLE_PCH($is_hosted)
>  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
>
>  # Enable all the variable C++ runtime options that don't require linking.
>  GLIBCXX_ENABLE_CSTDIO
>  GLIBCXX_ENABLE_CLOCALE
>  GLIBCXX_ENABLE_ALLOCATOR
>  GLIBCXX_ENABLE_CHEADERS($c_model)  dnl c_model from configure.host
>  GLIBCXX_ENABLE_LONG_LONG([yes])
> Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
> ===================================================================
> --- libstdc++-v3/testsuite/util/testsuite_abi.cc        (revision 211311)
> +++ libstdc++-v3/testsuite/util/testsuite_abi.cc        (working copy)
> @@ -205,48 +205,51 @@ check_version(symbol& test, bool added)
>        known_versions.push_back("CXXABI_LDBL_1.3");
>        known_versions.push_back("CXXABI_1.3.1");
>        known_versions.push_back("CXXABI_1.3.2");
>        known_versions.push_back("CXXABI_1.3.3");
>        known_versions.push_back("CXXABI_1.3.4");
>        known_versions.push_back("CXXABI_1.3.5");
>        known_versions.push_back("CXXABI_1.3.6");
>        known_versions.push_back("CXXABI_1.3.7");
>        known_versions.push_back("CXXABI_1.3.8");
>        known_versions.push_back("CXXABI_1.3.9");
> +      known_versions.push_back("CXXABI_FLOAT128_1.3.9");
>        known_versions.push_back("CXXABI_TM_1");
>      }
>    compat_list::iterator begin = known_versions.begin();
>    compat_list::iterator end = known_versions.end();
>
>    // Check for compatible version.
>    if (test.version_name.size())
>      {
>        compat_list::iterator it1 = find(begin, end, test.version_name);
>        compat_list::iterator it2 = find(begin, end, test.name);
>        if (it1 != end)
>         test.version_status = symbol::compatible;
>        else
>         test.version_status = symbol::incompatible;
>
>        // 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_1.3.9"
>                      || 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;
>         }
>
>        // Check for weak label.
>        if (it1 == end && it2 == end)
>         test.version_status = symbol::incompatible;
>
>        // Check that
>        // GLIBCXX_3.4
>        // GLIBCXX_3.4.5
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: __float128 typeinfo
  2014-06-06 14:16 Marc Glisse
@ 2014-06-06 14:27 ` Paolo Carlini
  2014-06-07  9:42   ` Marc Glisse
  2014-06-06 15:25 ` Ramana Radhakrishnan
  2014-06-06 15:39 ` Jason Merrill
  2 siblings, 1 reply; 19+ messages in thread
From: Paolo Carlini @ 2014-06-06 14:27 UTC (permalink / raw)
  To: Marc Glisse, gcc-patches; +Cc: jason, libstdc++, meissner, ramana.gcc

Hi,

On 06/06/2014 04:16 PM, Marc Glisse wrote:
> abi_check is broken before my patch (134 incompatible symbols).
Isn't broken for me, though. Likewise, AFAICS, on gcc-testresults. I 
would recommend investigating in some detail what's going on at your end...

Paolo.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* __float128 typeinfo
@ 2014-06-06 14:16 Marc Glisse
  2014-06-06 14:27 ` Paolo Carlini
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Marc Glisse @ 2014-06-06 14:16 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, libstdc++, meissner, ramana.gcc

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1275 bytes --]

Hello,

here is a new try on adding __float128 typeinfo to libsupc++. The 
front-end part is based on the discussion with Jason yesterday. The 
libstdc++ part is copied from:
https://gcc.gnu.org/ml/libstdc++/2014-04/msg00077.html
(which wasn't reviewed), but I changed the testsuite.

Michael will likely need to make some adjustments to his __float128 patch, 
but I believe it will only be a small configure tweak.

Ramana, does it look safe for ARM? By the way, do you want to remove the 
XFmode defined in arm-modes.def and apparently unused?

Bootstrap+testsuite on x86_64-linux-gnu. I manually checked that 
libstdc++.{a,so} gained exactly the symbols related to typeinfo for 
__float128.

abi_check is broken before my patch (134 incompatible symbols). After it, 
the number of added symbols increases by 7, but the number of incompatible 
symbols remains the same, so I take it as a pass.

2014-06-06  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_1.3.9 version.

-- 
Marc Glisse

[-- Attachment #2: Type: TEXT/PLAIN, Size: 6433 bytes --]

Index: gcc/cp/rtti.c
===================================================================
--- gcc/cp/rtti.c	(revision 211311)
+++ gcc/cp/rtti.c	(working copy)
@@ -1540,20 +1540,31 @@ emit_support_tinfos (void)
 			/*tag_scope=*/ts_current, false);
   pop_abi_namespace ();
   if (!COMPLETE_TYPE_P (bltn_type))
     return;
   dtor = CLASSTYPE_DESTRUCTORS (bltn_type);
   if (!dtor || DECL_EXTERNAL (dtor))
     return;
   doing_runtime = 1;
   for (ix = 0; fundamentals[ix]; ix++)
     emit_support_tinfo_1 (*fundamentals[ix]);
+
+  /* Search for an extra floating point type like __float128.  */
+  for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+       mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    {
+      tree type = c_common_type_for_mode (mode, false);
+      if (type && type != float_type_node && type != double_type_node
+	  && type != long_double_type_node)
+	emit_support_tinfo_1 (type);
+    }
 }
 
 /* Finish a type info decl. DECL_PTR is a pointer to an unemitted
    tinfo decl.  Determine whether it needs emitting, and if so
    generate the initializer.  */
 
 bool
 emit_tinfo_decl (tree decl)
 {
   tree type = TREE_TYPE (DECL_NAME (decl));
Index: libstdc++-v3/config/abi/pre/float128.ver
===================================================================
--- libstdc++-v3/config/abi/pre/float128.ver	(revision 0)
+++ libstdc++-v3/config/abi/pre/float128.ver	(working copy)
@@ -0,0 +1,10 @@
+# Appended to version file.
+
+CXXABI_FLOAT128_1.3.9 {
+
+    # typeinfo and typeinfo name for __float128
+    _ZT[IS]g;
+    _ZT[IS]Pg;
+    _ZT[IS]PKg;
+
+};
Index: libstdc++-v3/configure
===================================================================
--- libstdc++-v3/configure	(revision 211311)
+++ libstdc++-v3/configure	(working copy)
@@ -15698,20 +15698,23 @@ $as_echo "#define _GLIBCXX_USE_FLOAT128
 $as_echo "$enable_float128" >&6; }
     rm -f conftest*
 
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 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.
 
   # All these tests are for C++; save the language and the compiler flags.
   # The CXXFLAGS thing is suspicious, but based on similar bits previously
   # found in GLIBCXX_CONFIGURE.
 
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Index: libstdc++-v3/configure.ac
===================================================================
--- libstdc++-v3/configure.ac	(revision 211311)
+++ libstdc++-v3/configure.ac	(working copy)
@@ -146,20 +146,23 @@ GLIBCXX_ENABLE_HOSTED
 # Enable descriptive messages to standard output on termination.
 GLIBCXX_ENABLE_VERBOSE
 
 # Enable compiler support that doesn't require linking.
 GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
 GLIBCXX_ENABLE_PCH($is_hosted)
 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
 
 # Enable all the variable C++ runtime options that don't require linking.
 GLIBCXX_ENABLE_CSTDIO
 GLIBCXX_ENABLE_CLOCALE
 GLIBCXX_ENABLE_ALLOCATOR
 GLIBCXX_ENABLE_CHEADERS($c_model)  dnl c_model from configure.host
 GLIBCXX_ENABLE_LONG_LONG([yes])
Index: libstdc++-v3/testsuite/util/testsuite_abi.cc
===================================================================
--- libstdc++-v3/testsuite/util/testsuite_abi.cc	(revision 211311)
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc	(working copy)
@@ -205,48 +205,51 @@ check_version(symbol& test, bool added)
       known_versions.push_back("CXXABI_LDBL_1.3");
       known_versions.push_back("CXXABI_1.3.1");
       known_versions.push_back("CXXABI_1.3.2");
       known_versions.push_back("CXXABI_1.3.3");
       known_versions.push_back("CXXABI_1.3.4");
       known_versions.push_back("CXXABI_1.3.5");
       known_versions.push_back("CXXABI_1.3.6");
       known_versions.push_back("CXXABI_1.3.7");
       known_versions.push_back("CXXABI_1.3.8");
       known_versions.push_back("CXXABI_1.3.9");
+      known_versions.push_back("CXXABI_FLOAT128_1.3.9");
       known_versions.push_back("CXXABI_TM_1");
     }
   compat_list::iterator begin = known_versions.begin();
   compat_list::iterator end = known_versions.end();
 
   // Check for compatible version.
   if (test.version_name.size())
     {
       compat_list::iterator it1 = find(begin, end, test.version_name);
       compat_list::iterator it2 = find(begin, end, test.name);
       if (it1 != end)
 	test.version_status = symbol::compatible;
       else
 	test.version_status = symbol::incompatible;
 
       // 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_1.3.9"
 		     || 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;
 	}
 
       // Check for weak label.
       if (it1 == end && it2 == end)
 	test.version_status = symbol::incompatible;
 
       // Check that
       // GLIBCXX_3.4
       // GLIBCXX_3.4.5

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-11-10 18:37 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-09  0:41 __float128 typeinfo Marc Glisse
2014-11-10 18:39 ` Jonathan Wakely
  -- strict thread matches above, loose matches on Subject: below --
2014-06-06 14:16 Marc Glisse
2014-06-06 14:27 ` Paolo Carlini
2014-06-07  9:42   ` Marc Glisse
2014-06-07  9:49     ` Paolo Carlini
2014-06-08  0:07     ` Paolo Carlini
2014-06-06 15:25 ` Ramana Radhakrishnan
2014-06-06 15:41   ` Marc Glisse
2014-06-06 15:47     ` Ramana Radhakrishnan
2014-06-07  1:14   ` Richard Earnshaw
2014-06-06 15:39 ` Jason Merrill
2014-06-06 15:58   ` Marc Glisse
2014-06-06 16:38     ` Jason Merrill
2014-06-06 16:55       ` Joseph S. Myers
2014-06-06 17:06         ` Jason Merrill
2014-06-06 17:21       ` Marc Glisse
2014-06-06 17:45         ` Michael Meissner
2014-06-06 18:09         ` Joseph S. Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).