https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98601

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |rtl-optimization

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
For some reason we have

(insn 5 9 12 2 (set (mem (reg/v/f:DI 0 x0 [orig:92 b ] [92]) [0 *b_2(D)+0 A8])
        (asm_operands ("") ("=Q") 0 []
             []
             [] t.c:3)) "t.c":3:3 -1
     (expr_list:REG_DEAD (reg/v/f:DI 0 x0 [orig:92 b ] [92])
        (nil)))

on x86_64 we get (with a "=m" constraint):

(insn 6 3 12 2 (parallel [
            (set (mem (reg:DI 5 di [83]) [0 *b_2(D)+0 A8])
                (asm_operands ("") ("=m") 0 []
                     []
                     [] t.c:2))
            (clobber (reg:CC 17 flags))
        ]) "t.c":2:3 -1
     (expr_list:REG_DEAD (reg:DI 5 di [83])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))

I suppose we could special-case the VOIDmode/unknown-size and make it
possibly trapping (conservatively so).  I'm sure rejecting the code
will break existing code.

That said, I can't reproduce on x86_64.  Target independent testcase
(still ICEs on aarch64):

void a(void *b) {
  asm("" : "=m"(*b));
}

Reply via email to