Resending because the last was HTML'd:
Never use #newFrom: with associations from another dictonary if you reuse the
first after.
The bug is actually deeper than you know:
dic1 := Dictionary newFrom:{'test' -> 4}.
dic2 := IdentityDictionary newFrom: {'test' copy -> 4}.
dic1 = dic2.
dic2 = dic1.
Depending on the order, they are equal or inequal.
The bug is caused by Dictionary>>= using a polymorphic type test #isDictionary.
Squeak is unaffected: its #= uses a hardcoded class == test. The least
disruptive fix I can think of is adding another type test #isIdentityDictionary
in Dictionary that returns false but returns true for every identity dictionary
class (like SmalllIdentityDictionary). Then only compare the associations if
"self isIdentityDictionary = aDictionary isIdentityDictionary".
I will open an issue.