> 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

Reply via email to