Hi all (and wide-int maintainers in particular),
I tried bootstrapping the wide-int branch on arm-none-linux-gnueabihf and
encountered some syntax errors while building wide-int.h and wide-int.cc in
expressions that tried to cast to HOST_WIDE_INT. This patch fixes those errors.
Also, in c-ada-spec.c I think we intended to use the HOST_WIDE_INT_PRINT format
rather than HOST_LONG_FORMAT, since on arm-linux HOST_WIDE_INT is a 'long long'.
The attached patch allowed the build to proceed for me, but in stage 2 I
encountered an ICE:
$TOP/gcc/dwarf2out.c: In function 'long unsigned int
_ZL11size_of_dieP10die_struct.isra.209(vec<dw_attr_struct, va_gc>**, long
unsigned int)':
$TOP/gcc/dwarf2out.c:7820:1: internal compiler error: in set_value_range, at
tree-vrp.c:452
size_of_die (dw_die_ref die)
^
0xa825c1 set_value_range
$TOP/gcc/tree-vrp.c:452
0xa8a441 extract_range_basic
$TOP/gcc/tree-vrp.c:3679
0xa92c13 vrp_visit_assignment_or_call
$TOP/gcc/tree-vrp.c:6725
0xa947eb vrp_visit_stmt
$TOP/gcc/tree-vrp.c:7538
0x9d4d47 simulate_stmt
$TOP/gcc/tree-ssa-propagate.c:329
0x9d5047 simulate_block
$TOP/gcc/tree-ssa-propagate.c:452
0x9d5e23 ssa_propagate(ssa_prop_result (*)(gimple_statement_base*, edge_def**,
tree_node**), ssa_prop_result (*)(gimple_statement_base*))
$TOP/gcc/tree-ssa-propagate.c:859
0xa9a1e1 execute_vrp
$TOP/gcc/tree-vrp.c:9781
0xa9a4a3 execute
$TOP/gcc/tree-vrp.c:9872
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
Any ideas? The compiler was configured with: --enable-languages=c,c++,fortran
--with-cpu=cortex-a15 --with-float=hard --with-mode=thumb
Thanks,
Kyrill
gcc/
2014-04-15 Kyrylo Tkachov <[email protected]>
* wide-int.h (sign_mask): Fix syntax error.
* wide-int.cc (wi::add_large): Likewise.
(mul_internal): Likewise.
(sub_large): Likewise.
c-family/
2014-04-15 Kyrylo Tkachov <[email protected]>
* c-ada-spec.c (dump_generic_ada_node): Use HOST_WIDE_INT_PRINT
instead of HOST_LONG_FORMAT.
diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c
index 35b036c..0a28840 100644
--- a/gcc/c-family/c-ada-spec.c
+++ b/gcc/c-family/c-ada-spec.c
@@ -2205,7 +2205,7 @@ dump_generic_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
val = -val;
}
sprintf (pp_buffer (buffer)->digit_buffer,
- "16#%" HOST_LONG_FORMAT "x", val.elt (val.get_len () - 1));
+ "16#%" HOST_WIDE_INT_PRINT "x", val.elt (val.get_len () - 1));
for (i = val.get_len () - 2; i <= 0; i--)
sprintf (pp_buffer (buffer)->digit_buffer,
HOST_WIDE_INT_PRINT_PADDED_HEX, val.elt (i));
diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc
index fbef721..a64ed88 100644
--- a/gcc/wide-int.cc
+++ b/gcc/wide-int.cc
@@ -1130,7 +1130,7 @@ wi::add_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
if (sgn == SIGNED)
{
unsigned HOST_WIDE_INT x = (val[len - 1] ^ o0) & (val[len - 1] ^ o1);
- *overflow = HOST_WIDE_INT (x << shift) < 0;
+ *overflow = (HOST_WIDE_INT) (x << shift) < 0;
}
else
{
@@ -1369,7 +1369,7 @@ wi::mul_internal (HOST_WIDE_INT *val, const HOST_WIDE_INT *op1val,
{
if (sgn == SIGNED)
{
- if (HOST_WIDE_INT (r) != sext_hwi (r, prec))
+ if ((HOST_WIDE_INT) (r) != sext_hwi (r, prec))
*overflow = true;
}
else
@@ -1549,7 +1549,7 @@ wi::sub_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
if (sgn == SIGNED)
{
unsigned HOST_WIDE_INT x = (o0 ^ o1) & (val[len - 1] ^ o0);
- *overflow = HOST_WIDE_INT (x << shift) < 0;
+ *overflow = (HOST_WIDE_INT) (x << shift) < 0;
}
else
{
diff --git a/gcc/wide-int.h b/gcc/wide-int.h
index a0241f2..2163f3c 100644
--- a/gcc/wide-int.h
+++ b/gcc/wide-int.h
@@ -801,7 +801,7 @@ generic_wide_int <storage>::sign_mask () const
if (excess > 0)
high <<= excess;
}
- return HOST_WIDE_INT (high) < 0 ? -1 : 0;
+ return (HOST_WIDE_INT) (high) < 0 ? -1 : 0;
}
/* Return the signed value of the least-significant explicitly-encoded