------- Comment #5 from jakub at gcc dot gnu dot org 2010-06-10 10:25 ------- And ensure that it is used exactly once in an inline asm pattern? Even for "g" constraint? That just can't be true. Just look at how many of "m" and "=m" constraints e.g. glibc uses. Only 8 occurrences of %U, but e.g.: ./iconvdata/iso-2022-kr.c: asm ("" : "=m" (buf)); \ ./iconvdata/iso-2022-cn.c: asm ("" : "=m" (buf)); \ ./nscd/nscd_helper.c: asm ("" : "=m" (tvend)); ./nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c: : "=&r" (oldval), "=&r" (tmp), "=m" (*once_control) ./nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c: : "r" (once_control), "r" (newval), "m" (*once_control) ./nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: : "=&r" (__val), "=m" (*futex) \ ./nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: : "r" (futex), "r" (id), "m" (*futex) \ ./string/test-memcmp.c: asm ("" : "=g" (r) : "0" (r)); ./string/test-strncmp.c: asm ("" : "=g" (r) : "0" (r)); ./string/test-strcmp.c: asm ("" : "=g" (r) : "0" (r)); ./debug/tst-longjmp_chk.c: asm volatile ("" : "=m" (buf)); ./math/math_private.h:#define math_force_eval(x) __asm __volatile ("" : : "m" (x)) ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&r" (__val), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&r" (__val), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b" (__val), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b" (__val), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ ./sysdeps/powerpc/powerpc64/bits/atomic.h: : "b" (mem), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&r" (__val), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&r" (__val), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "r" (value), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ ./sysdeps/powerpc/bits/atomic.h: : "b" (mem), "m" (*mem) \
Guess the Linux kernel has many more of these. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44492