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.