https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108695
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|WAITING |RESOLVED --- Comment #10 from Martin Liška <marxin at gcc dot gnu.org> --- > where the XOR16 is implemented as: > > #define XORN(in1,in2,out,len) \ > do { \ > uint _i; \ > for (_i = 0; _i < len/sizeof(ulong); ++_i) \ > *((ulong*)(out)+_i) = *((ulong*)(in1)+_i) ^ > *((ulong*)(in2)+_i); \ > } while(0) I can confirm that changing that to: #define XORN(in1, in2, out, len) \ do \ { \ uint _i; \ for (_i = 0; _i < len; ++_i) \ *(out + _i) = *(in1 + _i) ^ *(in2 + _i); \ } while (0) fixes the problem. It seems very close to what I saw here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83201#c13