6 ms·
So a stronger type system in the boundary between Go and Linux would have caught this?
by ReactiveJelly 20d ago
So a stronger type system in the boundary between Go and Linux would have caught this?
- fn-mote 20d agoMy reading is that this is entirely Go’s fault. In Go, there was a union of two different types without metadata to distinguish the two. The disambiguation was done by looking to see if the data looked like a certain pointer. I think the reason it is a problem only in 32 bit systems is that the assignment setting the lower half of the data is a 32 bit op, which can overflow the 16 bits used, but won’t affect the other half of a 64 bit value. (Corrections welcome.)
- inigyou 20d agoIt's 64 bits on both but only 32 bits were read on 32-bit systems. Two 64-bit values that were different were considered the same because only 32 bits were checked.