On 28/10/15 13:38, Richard Biener wrote:
Applied as follows.
Bootstrapped / tested on x86_64-unknown-linux-gnu.
Richard.
2015-10-28 Richard Biener <rguent...@suse.de>
* fold-const.c (negate_expr_p): Adjust the division case to
properly avoid introducing undefined overflow.
(fold_negate_expr): Likewise.
Since this we've been seeing an ICE compiling polynom.c from 254.gap in SPEC2000
on aarch64-linux-gnu with -O3 -ffast-math -mcpu=cortex-a53 (or -Ofast
-mcpu=cortex-a53), on both native (bootstrapped and --disable-bootstrap) and
cross-linux builds.
A number of options prevent the ICE, e.g. any of -fno-thread-jumps,
-fno-strict-overflow, -fdump-tree-alias or -fdump-tree-ealias (!). Similarly,
dropping the -mcpu=cortex-a53, or changing to -mcpu=cortex-a57.
(I have a recent build in a chroot for which -fno-strict-overflow does *not* fix
the ICE but haven't yet figured out exactly what the difference in the chroot
environment is.)
Moreover, preprocessing in a separate step (i.e. piping preprocessed output via
a file with -E), also avoids the ICE. (This is hindering my efforts to reduce
the testcase!). So my hypothesis is that this is a front-end/preprocessor bug,
rather than anything directly due to this commit.
The error message in full (line refs from that commit, r229479) is:
=====
../spec2000/benchspec/CINT2000/254.gap/src/polynom.c: In function
‘NormalizeCoeffsListx’:
../spec2000/benchspec/CINT2000/254.gap/src/polynom.c:358:11: error: incompatible
types in PHI argument 0
TypHandle NormalizeCoeffsListx ( hdC )
^
long int
int
../spec2000/benchspec/CINT2000/254.gap/src/polynom.c:358:11: error: location
references block not in block tree
l1_279 = PHI <1(28), l1_299(33)>
../spec2000/benchspec/CINT2000/254.gap/src/polynom.c:358:11: error: invalid PHI
argument
../spec2000/benchspec/CINT2000/254.gap/src/polynom.c:358:11: internal compiler
error: tree check: expected class ‘type’, have ‘declaration’ (namespace_decl) in
useless_type_conversion_p, at gimple-expr.c:84
0xd110ef tree_class_check_failed(tree_node const*, tree_code_class, char const*,
int, char const*)
../../gcc-fsf/gcc/tree.c:9643
0x82561b tree_class_check
../../gcc-fsf/gcc/tree.h:3042
0x82561b useless_type_conversion_p(tree_node*, tree_node*)
../../gcc-fsf/gcc/gimple-expr.c:84
0xaca043 verify_gimple_phi
../../gcc-fsf/gcc/tree-cfg.c:4673
0xaca043 verify_gimple_in_cfg(function*, bool)
../../gcc-fsf/gcc/tree-cfg.c:4967
0x9c2e0b execute_function_todo
../../gcc-fsf/gcc/passes.c:1967
0x9c360b do_per_function
../../gcc-fsf/gcc/passes.c:1659
0x9c3807 execute_todo
../../gcc-fsf/gcc/passes.c:2022
Please submit a full bug report,
with preprocessed source if appropriate.
=====
which looks like an "incompatible types from PHI argument" from a first call to
verify_gimple_phi, then a second call to verify_gimple_phi prints "invalid phi
argument" and ICEs in the test just before possibly printing a second
incompatible_types message.
--Alan