re PR libstdc++/43622 (Incomplete C++ library support for __float128)

2014-04-22  Marc Glisse  <marc.glisse@inria.fr>

	PR libstdc++/43622
gcc/c-family/
	* c-common.c (registered_builtin_types): Make non-static.
	* c-common.h (registered_builtin_types): Declare.
gcc/cp/
	* rtti.c (emit_support_tinfo_1): New function, extracted from
	emit_support_tinfos.
	(emit_support_tinfos): Call it and iterate on registered_builtin_types.
libstdc++-v3/
	* config/abi/pre/gnu.ver (CXXABI_1.3.9): New version, new symbols.
	* config/abi/pre/gnu-versioned-namespace.ver: New symbols.
	* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.

From-SVN: r209652
This commit is contained in:
Marc Glisse 2014-04-22 18:44:46 +02:00 committed by Marc Glisse
parent c6d43074d8
commit 793c625fb8
9 changed files with 97 additions and 41 deletions

View File

@ -1,3 +1,9 @@
2014-04-22 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
* c-common.c (registered_builtin_types): Make non-static.
* c-common.h (registered_builtin_types): Declare.
2014-04-14 Richard Biener <rguenther@suse.de>
Marc Glisse <marc.glisse@inria.fr>

View File

@ -3469,7 +3469,7 @@ c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
/* Used for communication between c_common_type_for_mode and
c_register_builtin_type. */
static GTY(()) tree registered_builtin_types;
tree registered_builtin_types;
/* Return a data type that has machine mode MODE.
If the mode is an integer,

View File

@ -1013,6 +1013,10 @@ extern vec<tree, va_gc> *make_tree_vector_single (tree);
extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
/* Used for communication between c_common_type_for_mode and
c_register_builtin_type. */
extern GTY(()) tree registered_builtin_types;
/* In c-gimplify.c */
extern void c_genericize (tree);
extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);

View File

@ -1,3 +1,10 @@
2014-04-22 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
* rtti.c (emit_support_tinfo_1): New function, extracted from
emit_support_tinfos.
(emit_support_tinfos): Call it and iterate on registered_builtin_types.
2014-04-22 Jakub Jelinek <jakub@redhat.com>
PR c/59073

View File

@ -1465,6 +1465,44 @@ create_tinfo_types (void)
pop_abi_namespace ();
}
/* Helper for emit_support_tinfos. Emits the type_info descriptor of
a single type. */
void
emit_support_tinfo_1 (tree bltn)
{
tree types[3];
if (bltn == NULL_TREE)
return;
types[0] = bltn;
types[1] = build_pointer_type (bltn);
types[2] = build_pointer_type (cp_build_qualified_type (bltn,
TYPE_QUAL_CONST));
for (int i = 0; i < 3; ++i)
{
tree tinfo = get_tinfo_decl (types[i]);
TREE_USED (tinfo) = 1;
mark_needed (tinfo);
/* The C++ ABI requires that these objects be COMDAT. But,
On systems without weak symbols, initialized COMDAT
objects are emitted with internal linkage. (See
comdat_linkage for details.) Since we want these objects
to have external linkage so that copies do not have to be
emitted in code outside the runtime library, we make them
non-COMDAT here.
It might also not be necessary to follow this detail of the
ABI. */
if (!flag_weak || ! targetm.cxx.library_rtti_comdat ())
{
gcc_assert (TREE_PUBLIC (tinfo) && !DECL_COMDAT (tinfo));
DECL_INTERFACE_KNOWN (tinfo) = 1;
}
}
}
/* Emit the type_info descriptors which are guaranteed to be in the runtime
support. Generating them here guarantees consistency with the other
structures. We use the following heuristic to determine when the runtime
@ -1507,42 +1545,9 @@ emit_support_tinfos (void)
return;
doing_runtime = 1;
for (ix = 0; fundamentals[ix]; ix++)
{
tree bltn = *fundamentals[ix];
tree types[3];
int i;
if (bltn == NULL_TREE)
continue;
types[0] = bltn;
types[1] = build_pointer_type (bltn);
types[2] = build_pointer_type (cp_build_qualified_type (bltn,
TYPE_QUAL_CONST));
for (i = 0; i < 3; ++i)
{
tree tinfo;
tinfo = get_tinfo_decl (types[i]);
TREE_USED (tinfo) = 1;
mark_needed (tinfo);
/* The C++ ABI requires that these objects be COMDAT. But,
On systems without weak symbols, initialized COMDAT
objects are emitted with internal linkage. (See
comdat_linkage for details.) Since we want these objects
to have external linkage so that copies do not have to be
emitted in code outside the runtime library, we make them
non-COMDAT here.
It might also not be necessary to follow this detail of the
ABI. */
if (!flag_weak || ! targetm.cxx.library_rtti_comdat ())
{
gcc_assert (TREE_PUBLIC (tinfo) && !DECL_COMDAT (tinfo));
DECL_INTERFACE_KNOWN (tinfo) = 1;
}
}
}
emit_support_tinfo_1 (*fundamentals[ix]);
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

View File

@ -1,3 +1,10 @@
2014-04-22 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
* config/abi/pre/gnu.ver (CXXABI_1.3.9): New version, new symbols.
* config/abi/pre/gnu-versioned-namespace.ver: New symbols.
* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise.
2014-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.host: Remove solaris2.9 handling.

View File

@ -2520,6 +2520,7 @@ OBJECT:0:CXXABI_1.3.5
OBJECT:0:CXXABI_1.3.6
OBJECT:0:CXXABI_1.3.7
OBJECT:0:CXXABI_1.3.8
OBJECT:0:CXXABI_1.3.9
OBJECT:0:CXXABI_TM_1
OBJECT:0:GLIBCXX_3.4
OBJECT:0:GLIBCXX_3.4.1
@ -2624,6 +2625,7 @@ OBJECT:16:_ZTIc@@CXXABI_1.3
OBJECT:16:_ZTId@@CXXABI_1.3
OBJECT:16:_ZTIe@@CXXABI_1.3
OBJECT:16:_ZTIf@@CXXABI_1.3
OBJECT:16:_ZTIg@@CXXABI_1.3.9
OBJECT:16:_ZTIh@@CXXABI_1.3
OBJECT:16:_ZTIi@@CXXABI_1.3
OBJECT:16:_ZTIj@@CXXABI_1.3
@ -3124,11 +3126,14 @@ OBJECT:2:_ZTSc@@CXXABI_1.3
OBJECT:2:_ZTSd@@CXXABI_1.3
OBJECT:2:_ZTSe@@CXXABI_1.3
OBJECT:2:_ZTSf@@CXXABI_1.3
OBJECT:2:_ZTSg@@CXXABI_1.3.9
OBJECT:2:_ZTSh@@CXXABI_1.3
OBJECT:2:_ZTSi@@CXXABI_1.3
OBJECT:2:_ZTSj@@CXXABI_1.3
OBJECT:2:_ZTSl@@CXXABI_1.3
OBJECT:2:_ZTSm@@CXXABI_1.3
OBJECT:2:_ZTSn@@CXXABI_1.3.9
OBJECT:2:_ZTSo@@CXXABI_1.3.9
OBJECT:2:_ZTSs@@CXXABI_1.3
OBJECT:2:_ZTSt@@CXXABI_1.3
OBJECT:2:_ZTSv@@CXXABI_1.3
@ -3155,6 +3160,7 @@ OBJECT:32:_ZTIPKc@@CXXABI_1.3
OBJECT:32:_ZTIPKd@@CXXABI_1.3
OBJECT:32:_ZTIPKe@@CXXABI_1.3
OBJECT:32:_ZTIPKf@@CXXABI_1.3
OBJECT:32:_ZTIPKg@@CXXABI_1.3.9
OBJECT:32:_ZTIPKh@@CXXABI_1.3
OBJECT:32:_ZTIPKi@@CXXABI_1.3
OBJECT:32:_ZTIPKj@@CXXABI_1.3
@ -3174,6 +3180,7 @@ OBJECT:32:_ZTIPc@@CXXABI_1.3
OBJECT:32:_ZTIPd@@CXXABI_1.3
OBJECT:32:_ZTIPe@@CXXABI_1.3
OBJECT:32:_ZTIPf@@CXXABI_1.3
OBJECT:32:_ZTIPg@@CXXABI_1.3.9
OBJECT:32:_ZTIPh@@CXXABI_1.3
OBJECT:32:_ZTIPi@@CXXABI_1.3
OBJECT:32:_ZTIPj@@CXXABI_1.3
@ -3228,11 +3235,14 @@ OBJECT:3:_ZTSPc@@CXXABI_1.3
OBJECT:3:_ZTSPd@@CXXABI_1.3
OBJECT:3:_ZTSPe@@CXXABI_1.3
OBJECT:3:_ZTSPf@@CXXABI_1.3
OBJECT:3:_ZTSPg@@CXXABI_1.3.9
OBJECT:3:_ZTSPh@@CXXABI_1.3
OBJECT:3:_ZTSPi@@CXXABI_1.3
OBJECT:3:_ZTSPj@@CXXABI_1.3
OBJECT:3:_ZTSPl@@CXXABI_1.3
OBJECT:3:_ZTSPm@@CXXABI_1.3
OBJECT:3:_ZTSPn@@CXXABI_1.3.9
OBJECT:3:_ZTSPo@@CXXABI_1.3.9
OBJECT:3:_ZTSPs@@CXXABI_1.3
OBJECT:3:_ZTSPt@@CXXABI_1.3
OBJECT:3:_ZTSPv@@CXXABI_1.3
@ -3555,11 +3565,14 @@ OBJECT:4:_ZTSPKc@@CXXABI_1.3
OBJECT:4:_ZTSPKd@@CXXABI_1.3
OBJECT:4:_ZTSPKe@@CXXABI_1.3
OBJECT:4:_ZTSPKf@@CXXABI_1.3
OBJECT:4:_ZTSPKg@@CXXABI_1.3.9
OBJECT:4:_ZTSPKh@@CXXABI_1.3
OBJECT:4:_ZTSPKi@@CXXABI_1.3
OBJECT:4:_ZTSPKj@@CXXABI_1.3
OBJECT:4:_ZTSPKl@@CXXABI_1.3
OBJECT:4:_ZTSPKm@@CXXABI_1.3
OBJECT:4:_ZTSPKn@@CXXABI_1.3.9
OBJECT:4:_ZTSPKo@@CXXABI_1.3.9
OBJECT:4:_ZTSPKs@@CXXABI_1.3
OBJECT:4:_ZTSPKt@@CXXABI_1.3
OBJECT:4:_ZTSPKv@@CXXABI_1.3

View File

@ -321,10 +321,10 @@ CXXABI_2.0 {
_ZTIPDn;
_ZTIPKDn;
# typeinfo for __int128 and unsigned __int128
_ZTI[no];
_ZTIP[no];
_ZTIPK[no];
# typeinfo for __int128, unsigned __int128 and __float128
_ZTI[gno];
_ZTIP[gno];
_ZTIPK[gno];
# virtual table
_ZTVN10__cxxabiv117__array_type_infoE;

View File

@ -1584,6 +1584,20 @@ CXXABI_1.3.8 {
} CXXABI_1.3.7;
CXXABI_1.3.9 {
# typeinfo name for __int128, unsigned __int128 and __float128
_ZTS[gno];
_ZTSP[gno];
_ZTSPK[gno];
# typeinfo for __float128
_ZTIg;
_ZTIPg;
_ZTIPKg;
} CXXABI_1.3.8;
# Symbols in the support library (libsupc++) supporting transactional memory.
CXXABI_TM_1 {