+2020-02-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR libstdc++/92906
+ * cp-tree.h (enum cp_tree_index): Add CPTI_FALLBACK_DFLOAT32_TYPE,
+ CPTI_FALLBACK_DFLOAT64_TYPE and CPTI_FALLBACK_DFLOAT128_TYPE.
+ (fallback_dfloat32_type, fallback_dfloat64_type,
+ fallback_dfloat128_type): Define.
+ * mangle.c (write_builtin_type): Handle fallback_dfloat*_type like
+ dfloat*_type_node.
+ * rtti.c (emit_support_tinfos): Emit DFP typeinfos even when dfp
+ is disabled for compatibility.
+
2020-02-13 Jason Merrill <jason@redhat.com>
PR c++/93713
CPTI_SOURCE_LOCATION_IMPL,
+ CPTI_FALLBACK_DFLOAT32_TYPE,
+ CPTI_FALLBACK_DFLOAT64_TYPE,
+ CPTI_FALLBACK_DFLOAT128_TYPE,
+
CPTI_MAX
};
#define access_default_node null_node
+/* Variant of dfloat{32,64,128}_type_node only used for fundamental
+ rtti purposes if DFP is disabled. */
+#define fallback_dfloat32_type cp_global_trees[CPTI_FALLBACK_DFLOAT32_TYPE]
+#define fallback_dfloat64_type cp_global_trees[CPTI_FALLBACK_DFLOAT64_TYPE]
+#define fallback_dfloat128_type cp_global_trees[CPTI_FALLBACK_DFLOAT128_TYPE]
+
\f
#include "name-lookup.h"
write_char ('d');
else if (type == long_double_type_node)
write_char ('e');
- else if (type == dfloat32_type_node)
+ else if (type == dfloat32_type_node || type == fallback_dfloat32_type)
write_string ("Df");
- else if (type == dfloat64_type_node)
+ else if (type == dfloat64_type_node || type == fallback_dfloat64_type)
write_string ("Dd");
- else if (type == dfloat128_type_node)
+ else if (type == dfloat128_type_node || type == fallback_dfloat128_type)
write_string ("De");
else
gcc_unreachable ();
}
for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
emit_support_tinfo_1 (TREE_VALUE (t));
+ /* For compatibility, emit DFP typeinfos even when DFP isn't enabled,
+ because we've emitted that in the past. */
+ if (!targetm.decimal_float_supported_p ())
+ {
+ gcc_assert (dfloat32_type_node == NULL_TREE
+ && dfloat64_type_node == NULL_TREE
+ && dfloat128_type_node == NULL_TREE);
+ fallback_dfloat32_type = make_node (REAL_TYPE);
+ fallback_dfloat64_type = make_node (REAL_TYPE);
+ fallback_dfloat128_type = make_node (REAL_TYPE);
+ emit_support_tinfo_1 (fallback_dfloat32_type);
+ emit_support_tinfo_1 (fallback_dfloat64_type);
+ emit_support_tinfo_1 (fallback_dfloat128_type);
+ }
input_location = saved_loc;
}