[Bug c++/104052] Modules ICE on powerpc64le-linux with -mabi=ieeelongdouble
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Jan 16 22:50:22 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104052
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I bet we don't reach this because modules.cc has:
/* Global trees. */
static const std::pair<tree *, unsigned> global_tree_arys[] =
{
std::pair<tree *, unsigned> (sizetype_tab, stk_type_kind_last),
std::pair<tree *, unsigned> (integer_types, itk_none),
std::pair<tree *, unsigned> (global_trees, TI_MODULE_HWM),
std::pair<tree *, unsigned> (c_global_trees, CTI_MODULE_HWM),
std::pair<tree *, unsigned> (cp_global_trees, CPTI_MODULE_HWM),
std::pair<tree *, unsigned> (NULL, 0)
};
and special cases those somehow. So e.g. long_double_type_node and others
#define float_type_node global_trees[TI_FLOAT_TYPE]
#define double_type_node global_trees[TI_DOUBLE_TYPE]
#define long_double_type_node global_trees[TI_LONG_DOUBLE_TYPE]
or
#define float128_type_node global_trees[TI_FLOAT128_TYPE]
all go through that. But modules.cc doesn't know about types the backend
creates
like __ibm128. __int24 etc. is probably ok due to integer_types
containing
itk_intN_0,
itk_unsigned_intN_0,
itk_intN_1,
itk_unsigned_intN_1,
itk_intN_2,
itk_unsigned_intN_2,
itk_intN_3,
itk_unsigned_intN_3,
So, one way through this would be to reserve one or more global_trees for the
extra backend floating point types.
More information about the Gcc-bugs
mailing list