> 1) cselib_lookup_1: > > $ cat ice.c > a() { b(); } > > $ /dev/shm/objdir/gcc/xgcc -B/dev/shm/objdir/gcc/ ice.c -g -c -fchecking=3 -O > hash table checking failed: equal operator returns true for a pair of values > with a different hash valueduring RTL pass: vartrack > ice.c:1:1: internal compiler error: in find_slot_with_hash, at > hash-table.h:905 > 1 | a() { b(); } > | ^ > 0x9680b5 hash_table<cselib_hasher, > xcallocator>::find_slot_with_hash(cselib_hasher::key* const&, unsigned int, > insert_option) > /home/marxin/Programming/gcc/gcc/hash-table.h:905 > 0x962518 cselib_find_slot > /home/marxin/Programming/gcc/gcc/cselib.c:584 > 0x9625d4 cselib_lookup_1 > /home/marxin/Programming/gcc/gcc/cselib.c:2097 > 0x9625d4 cselib_lookup(rtx_def*, machine_mode, int, machine_mode) > /home/marxin/Programming/gcc/gcc/cselib.c:2141 > 0x965ee7 cselib_record_sets > /home/marxin/Programming/gcc/gcc/cselib.c:2593 > 0x9670a9 cselib_process_insn(rtx_insn*) > /home/marxin/Programming/gcc/gcc/cselib.c:2790 > 0x1036b73 vt_initialize > /home/marxin/Programming/gcc/gcc/var-tracking.c:10231 > 0x103b98a variable_tracking_main_1 > /home/marxin/Programming/gcc/gcc/var-tracking.c:10460 > 0x103b98a variable_tracking_main() > /home/marxin/Programming/gcc/gcc/var-tracking.c:10513 >
I did a small analysis and problematic back-trace is: $ (gdb) bt #0 new_cselib_val (hash=9, mode=E_SImode, x=0x7ffff6ad7be8) at /home/marxin/Programming/gcc/gcc/cselib.c:1323 #1 0x0000000000af86f0 in cselib_lookup_1 (x=0x7ffff6ad7be8, mode=E_SImode, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:2046 #2 0x0000000000af8c5e in cselib_lookup (x=0x7ffff6ad7be8, mode=E_SImode, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:2153 #3 0x0000000000af6119 in cselib_hash_rtx2 (x=0x7ffff6ad7be8, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:1089 #4 0x0000000000af693d in cselib_hash_rtx2 (x=0x7ffff6ad7cc0, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:1254 #5 0x0000000000af6ab4 in cselib_hash_rtx (x=0x7ffff6ad7cc0, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:1309 #6 0x0000000000af8aef in cselib_lookup_1 (x=0x7ffff6ad7cc0, mode=E_CCZmode, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:2104 #7 0x0000000000af8c5e in cselib_lookup (x=0x7ffff6ad7cc0, mode=E_CCZmode, create=1, memmode=E_VOIDmode) at /home/marxin/Programming/gcc/gcc/cselib.c:2153 #8 0x0000000000af9df4 in cselib_record_sets (insn=0x7ffff69a1480) at /home/marxin/Programming/gcc/gcc/cselib.c:2605 #9 0x0000000000afa946 in cselib_process_insn (insn=0x7ffff69a1480) at /home/marxin/Programming/gcc/gcc/cselib.c:2802 as seen hash ==9, which is: >│2046 e = new_cselib_val (next_uid, GET_MODE (x), x); it seems to me that there are combined real hash values (based on cselib_hash_rtx) and next_uid (which is incremented). Anyway, somebody familiar with the code needs to analyze that. Martin