https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84803
Bug ID: 84803
Summary: ice from ifcvt_memrefs_wont_trap with -O3
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: dcb314 at hotmail dot com
Target Milestone: ---
Created attachment 43613
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43613&action=edit
C source code
The attached code, when compiled by recent gcc trunk and
compiler flag -O3, does this:
$ ../results/bin/gcc -c -O3 bug420.c
during GIMPLE pass: ifcvt
n4.c: In function ‘setn1’:
n4.c:185:6: internal compiler error: in operator[], at vec.h:841
0x65f564 vec<data_reference*, va_heap, vl_embed>::operator[](unsigned int)
../../trunk/gcc/vec.h:841
0x65f564 vec<data_reference*, va_heap, vl_ptr>::operator[](unsigned int)
../../trunk/gcc/vec.h:1326
0x65f564 ifcvt_memrefs_wont_trap
../../trunk/gcc/tree-if-conv.c:868
0x65f564 if_convertible_gimple_assign_stmt_p
../../trunk/gcc/tree-if-conv.c:1001
$ ../results/bin/gcc -v
Using built-in specs.
COLLECT_GCC=../results/bin/gcc
COLLECT_LTO_WRAPPER=/home/dcb/gcc/results.258387/libexec/gcc/x86_64-pc-linux-gnu/8.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../trunk/configure --prefix=/home/dcb/gcc/results.258387
--disable-multilib --disable-werror --enable-checking=df,extra,fold,rtl,yes
--enable-languages=c,c++,fortran
Thread model: posix
gcc version 8.0.1 20180309 (experimental) (GCC)
$
Further checking suggests that the bug exists sometime before revision 257000
$ for i in ../results.257*/bin/gcc; do echo $i; $i -c -O3 bug420.c ; done
../results.257009/bin/gcc
==12304== Invalid read of size 8
==12304== at 0xA869AD: ifcvt_memrefs_wont_trap (tree-if-conv.c:853)
==12304== by 0xA869AD: if_convertible_gimple_assign_stmt_p
(tree-if-conv.c:98
6)
==12304== by 0xA869AD: if_convertible_stmt_p (tree-if-conv.c:1026)
==12304== by 0xA869AD: if_convertible_loop_p_1(loop*, vec<data_reference*,
va
_heap, vl_ptr>*) (tree-if-conv.c:1457)
Also, here is a recent valgrind to show more detail:
$ ../results.258387.valgrind/bin/gcc -c -O3 bug420.c 2>&1 | more
==1913== Invalid read of size 8
==1913== at 0xA8ECDC: ifcvt_memrefs_wont_trap (tree-if-conv.c:868)
==1913== by 0xA8ECDC: if_convertible_gimple_assign_stmt_p
(tree-if-conv.c:100
1)
==1913== by 0xA8ECDC: if_convertible_stmt_p (tree-if-conv.c:1041)
==1913== by 0xA8ECDC: if_convertible_loop_p_1(loop*, vec<data_reference*,
va_
heap, vl_ptr>*) (tree-if-conv.c:1472)
I'll have my usual go at reducing the code.