https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124891
Bug ID: 124891
Summary: [16 Regression] internal compiler error on trunk with
-O3: tree check: expected ssa_name, have integer_cst
in expand_simple_operations, at
tree-ssa-loop-niter.cc:2885
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: lu.maltsis at postgrad dot manchester.ac.uk
Target Milestone: ---
```bash
$ gcc -O3 -freport-bug bug.c
during GIMPLE pass: lversion
bug.c: In function âfâ:
bug.c:1:6: internal compiler error: tree check: expected ssa_name, have
integer_cst in expand_simple_operations, at tree-ssa-loop-niter.cc:2885
1 | void f(int x, int y, int z, int *buf)
| ^
0x253a17b internal_error(char const*, ...)
/home/user/software/gcc/src/gcc/diagnostic-global-context.cc:787
0x8ce794 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
/home/user/software/gcc/src/gcc/tree.cc:9219
0x89d3fa tree_check(tree_node*, char const*, int, char const*, tree_code)
/home/user/software/gcc/src/gcc/tree.h:3780
0x89d3fa expand_simple_operations
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:2885
0x1334069 expand_simple_operations(tree_node*, tree_node*)
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:2949
0x1338f10 refine_value_range_using_guard
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:196
0x1338f10 determine_value_range
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:466
0x133aaef bound_difference
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:759
0x133aaef number_of_iterations_cond
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:1929
0x133aaef number_of_iterations_exit_assumptions(loop*, edge_def*,
tree_niter_desc*, gcond**, bool, basic_block_def**)
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:3309
0x133c8bc number_of_iterations_exit(loop*, edge_def*, tree_niter_desc*, bool,
bool, basic_block_def**)
/home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:3374
0x1282248 number_of_latch_executions(loop*)
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2908
0x1284de3 compute_overall_effect_of_inner_loop(loop*, tree_node*)
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:462
0x1283294 analyze_scalar_evolution_1
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2031
0x1283c15 analyze_scalar_evolution(loop*, tree_node*)
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2109
0x1283387 interpret_condition_phi
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:1667
0x1283387 analyze_scalar_evolution_1
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2047
0x1283cf2 analyze_scalar_evolution(loop*, tree_node*)
/home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2109
0x158f8f2 get_scev_info
/home/user/software/gcc/src/gcc/vr-values.cc:211
0x158f8f2 range_of_var_in_loop(vrange&, tree_node*, loop*, gimple*,
range_query*)
/home/user/software/gcc/src/gcc/vr-values.cc:304
/home/user/software/gcc/libexec/gcc/x86_64-pc-linux-gnu/16.0.1/cc1 -quiet
-imultiarch x86_64-linux-gnu bug.c -quiet -dumpdir a- -dumpbase bug.c
-dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -freport-bug -o
/tmp/cctLrrRL.s
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Preprocessed source stored into /tmp/ccSRdv2F.out file, please attach this to
your bugreport.
$ cat /tmp/ccSRdv2F.out
// Target: x86_64-pc-linux-gnu
// Configured with: /home/user/software/gcc/src/configure
--prefix=/home/user/software/gcc --enable-languages=c,c++ --disable-bootstrap
--disable-multilib --with-gmp=/usr --with-mpfr=/usr --with-mpc=/usr
// Thread model: posix
// Supported LTO compression algorithms: zlib zstd
// gcc version 16.0.1 20260415 (experimental) (GCC)
//
// during GIMPLE pass: lversion
// bug.c: In function âfâ:
// bug.c:1:6: internal compiler error: tree check: expected ssa_name, have
integer_cst in expand_simple_operations, at tree-ssa-loop-niter.cc:2885
// 1 | void f(int x, int y, int z, int *buf)
// | ^
// 0x253a17b internal_error(char const*, ...)
// /home/user/software/gcc/src/gcc/diagnostic-global-context.cc:787
// 0x8ce794 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
// /home/user/software/gcc/src/gcc/tree.cc:9219
// 0x89d3fa tree_check(tree_node*, char const*, int, char const*, tree_code)
// /home/user/software/gcc/src/gcc/tree.h:3780
// 0x89d3fa expand_simple_operations
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:2885
// 0x1334069 expand_simple_operations(tree_node*, tree_node*)
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:2949
// 0x1338f10 refine_value_range_using_guard
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:196
// 0x1338f10 determine_value_range
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:466
// 0x133aaef bound_difference
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:759
// 0x133aaef number_of_iterations_cond
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:1929
// 0x133aaef number_of_iterations_exit_assumptions(loop*, edge_def*,
tree_niter_desc*, gcond**, bool, basic_block_def**)
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:3309
// 0x133c8bc number_of_iterations_exit(loop*, edge_def*, tree_niter_desc*,
bool, bool, basic_block_def**)
// /home/user/software/gcc/src/gcc/tree-ssa-loop-niter.cc:3374
// 0x1282248 number_of_latch_executions(loop*)
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2908
// 0x1284de3 compute_overall_effect_of_inner_loop(loop*, tree_node*)
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:462
// 0x1283294 analyze_scalar_evolution_1
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2031
// 0x1283c15 analyze_scalar_evolution(loop*, tree_node*)
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2109
// 0x1283387 interpret_condition_phi
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:1667
// 0x1283387 analyze_scalar_evolution_1
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2047
// 0x1283cf2 analyze_scalar_evolution(loop*, tree_node*)
// /home/user/software/gcc/src/gcc/tree-scalar-evolution.cc:2109
// 0x158f8f2 get_scev_info
// /home/user/software/gcc/src/gcc/vr-values.cc:211
// 0x158f8f2 range_of_var_in_loop(vrange&, tree_node*, loop*, gimple*,
range_query*)
// /home/user/software/gcc/src/gcc/vr-values.cc:304
// -quiet -imultiarch x86_64-linux-gnu bug.c -quiet -dumpdir a- -dumpbase bug.c
-dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -freport-bug -o -
-frandom-seed=0 -fdump-noaddr
// Please submit a full bug report, with preprocessed source.
// Please include the complete backtrace with any bug report.
// See <https://gcc.gnu.org/bugs/> for instructions.
// /home/user/software/gcc/libexec/gcc/x86_64-pc-linux-gnu/16.0.1/cc1 -quiet
-imultiarch x86_64-linux-gnu bug.c -quiet -dumpdir a- -dumpbase bug.c
-dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -freport-bug -o -
-frandom-seed=0 -fdump-noaddr
# 0 "bug.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3
# 0 "<command-line>" 2
# 1 "bug.c"
void f(int x, int y, int z, int *buf)
{
for(int i = 0; i < x; ++i)
for(int j = z; j < x-z; ++z)
buf[j+(y-z+i)*x] = buf[x];
}
$ cat /tmp/bug.c
void f(int x, int y, int z, int *buf)
{
for(int i = 0; i < x; ++i)
for(int j = z; j < x-z; ++z)
buf[j+(y-z+i)*x] = buf[x];
}
```
Compiler Explorer Reproducer: https://godbolt.org/z/d4PbrWP3x
Commit:
https://github.com/gcc-mirror/gcc/commit/83f8af8c51892a37a3c5cd749808c60980568278
Compiles without error on stable versions (e.g. 15.2) and with any optimisation
below -O3.
This seems to be very closely related to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124692, although considering that
has been marked as "fixed" and this still surfaces, I think it may be a new way
to trigger a similar bug?