https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98601
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|rtl-optimization |target --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Note for 'm' constraints (*b) might be preferred over (*(non-void *)b), esp. if used in address context. The generic code rejects it on x86_64 here: #1 0x0000000000a8c37c in build_asm_expr (loc=262658, string=<string_cst 0x7ffff66b00d8>, outputs=<tree_list 0x7ffff669c9d8>, inputs=<tree 0x0>, clobbers=<tree 0x0>, labels=<tree 0x0>, simple=false, is_inline=false) at /home/rguenther/src/gcc3/gcc/c/c-typeck.c:10669 10669 error_at (loc, "invalid use of void expression"); (gdb) l 10664 output = error_mark_node; 10665 if (!(!allows_reg && allows_mem) 10666 && output != error_mark_node 10667 && VOID_TYPE_P (TREE_TYPE (output))) 10668 { 10669 error_at (loc, "invalid use of void expression"); 10670 output = error_mark_node; but it looks like Q is a memory constraint on arm? If so then I don't see why it should be invalid.