> > 2) As we query the type_hash while we are rewritting the types, > > we run into instability of the hashtable. This manifests itself > > as an ICE when one adds sanity check that while merging function > > types their arg types are equivalent, too. > > This ICEs compiling i.e. sqlite but I did not really managed to > > reduce this. I tracked it down to the argument type being inserted > > into gimple_type_hash but at the time we query the new argument type, > > the original is no longer found despite their hashes are equivalent. > > The problem is hidden when things fit into the leader cache, > > so one needs rather big testcase. > > Ugh. For reduction you can disable those caches though. The above > means there is a disconnect between hashing and comparing. > Maybe it's something weird with the early out > > if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2)) > goto same_types; > ?
I filled in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54856 sadly the testcase I reduced with yesterday tree do not reproduce on today tree on different machine. Perhaps it is hash table conflict with GGC or something like that. sqlite seems big enough to trigger the bug quite reproducibly. On current mainline I however need to disable leader cache (that was not true on weekend on the other machine ;) Honza