https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111787
--- Comment #1 from Jakub Jelinek ---
Does
2023-10-12 Jakub Jelinek
PR bootstrap/111787
* tree.h (wi::int_traits ::needs_write_val_arg): New
static data member.
(int_traits >::needs_write_val_arg): Likewise.
(wi::ints_for): Provide separate partial specializations for
generic_wide_int > and INL_CONST_PRECISION or that
and CONST_PRECISION, rather than using
int_traits >::precision_type as the second template
argument.
* rtl.h (wi::int_traits ::needs_write_val_arg): New
static data member.
* double-int.h (wi::int_traits ::needs_write_val_arg):
Likewise.
--- gcc/tree.h.jj 2023-10-12 16:01:04.0 +0200
+++ gcc/tree.h 2023-10-12 16:52:51.977954615 +0200
@@ -6237,6 +6237,7 @@ namespace wi
static const enum precision_type precision_type = VAR_PRECISION;
static const bool host_dependent_precision = false;
static const bool is_sign_extended = false;
+static const bool needs_write_val_arg = false;
};
template
@@ -6262,6 +6263,7 @@ namespace wi
= N == ADDR_MAX_PRECISION ? INL_CONST_PRECISION : CONST_PRECISION;
static const bool host_dependent_precision = false;
static const bool is_sign_extended = true;
+static const bool needs_write_val_arg = false;
static const unsigned int precision = N;
};
@@ -6293,8 +6295,14 @@ namespace wi
tree_to_poly_wide_ref to_poly_wide (const_tree);
template
- struct ints_for >,
- int_traits >::precision_type>
+ struct ints_for >, INL_CONST_PRECISION>
+ {
+typedef generic_wide_int > extended;
+static extended zero (const extended &);
+ };
+
+ template
+ struct ints_for >, CONST_PRECISION>
{
typedef generic_wide_int > extended;
static extended zero (const extended &);
@@ -6532,8 +6540,15 @@ wi::to_poly_wide (const_tree t)
template
inline generic_wide_int >
wi::ints_for >,
- wi::int_traits >::precision_type
->::zero (const extended )
+ wi::INL_CONST_PRECISION>::zero (const extended )
+{
+ return build_zero_cst (TREE_TYPE (x.get_tree ()));
+}
+
+template
+inline generic_wide_int >
+wi::ints_for >,
+ wi::CONST_PRECISION>::zero (const extended )
{
return build_zero_cst (TREE_TYPE (x.get_tree ()));
}
--- gcc/rtl.h.jj2023-09-29 22:04:44.463012421 +0200
+++ gcc/rtl.h 2023-10-12 16:54:59.915240074 +0200
@@ -2270,6 +2270,7 @@ namespace wi
/* This ought to be true, except for the special case that BImode
is canonicalized to STORE_FLAG_VALUE, which might be 1. */
static const bool is_sign_extended = false;
+static const bool needs_write_val_arg = false;
static unsigned int get_precision (const rtx_mode_t &);
static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
const rtx_mode_t &);
--- gcc/double-int.h.jj 2023-10-12 16:01:04.260164202 +0200
+++ gcc/double-int.h2023-10-12 16:53:41.401292272 +0200
@@ -442,6 +442,7 @@ namespace wi
{
static const enum precision_type precision_type = INL_CONST_PRECISION;
static const bool host_dependent_precision = true;
+static const bool needs_write_val_arg = false;
static const unsigned int precision = HOST_BITS_PER_DOUBLE_INT;
static unsigned int get_precision (const double_int &);
static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
fix this?
It works for me in stage3 gcc subdir, but that worked fine without it too (I've
been using g++ 12 as stage1 compiler).