https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84811
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW --- Comment #21 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, ok, so the difference is in your case for some reason I don't understand you get: ;; b[2180000000000000000][8] = 1; (insn 28 27 29 (set (reg/f:DI 104) (symbol_ref:DI ("b") [flags 0x2] <var_decl 0x7f98b10d7ea0 b>)) "small.c":9 -1 (nil)) (insn 29 28 30 (set (reg:DI 105) (const_int 162675373468811328 [0x241f063e9500040])) "small.c":9 -1 (nil)) (insn 30 29 31 (parallel [ (set (reg/f:DI 106) (plus:DI (reg/f:DI 104) (reg:DI 105))) (clobber (reg:CC 17 flags)) ]) "small.c":9 -1 (nil)) (insn 31 30 0 (set (mem:DI (reg/f:DI 106) [2 b S8 A128]) (const_int 1 [0x1])) "small.c":9 -1 (nil)) while I get: ;; b[2180000000000000000][8] = 1; (insn 28 27 29 (set (reg/f:DI 104) (symbol_ref:DI ("b") [flags 0x2] <var_decl 0x7f9eb9c05ea0 b>)) "small.c":9 -1 (nil)) (insn 29 28 30 (set (reg:DI 105) (const_int -9060696663385964480 [0x8241f063e9500040])) "small.c":9 -1 (nil)) (insn 30 29 31 (parallel [ (set (reg/f:DI 106) (plus:DI (reg/f:DI 104) (reg:DI 105))) (clobber (reg:CC 17 flags)) ]) "small.c":9 -1 (nil)) (insn 31 30 0 (set (mem:DI (reg/f:DI 106) [2 b S8 A128]) (const_int 1 [0x1])) "small.c":9 -1 (nil)) Note that the topmost bit is lost. Anyway, if I write what I see in your dump: int a; long b[1][9]; typedef long V __attribute__((vector_size (16), may_alias)); void foo () { V *c = (V *) ((char *) b + -9060696663385964544); *c = (V) { 1, 1 }; c++; *c = (V) { 1, 1 }; c++; *c = (V) { 1, 1 }; c++; *c = (V) { 1, 1 }; long __attribute__((may_alias)) *d = (long *) ((char *) b + 162675373468811328); *d = 1; } then I get the ICE you are getting, so I'll have a look at that.