/* PR target/48863. */ /* { dg-do run } */ /* { dg-options "-O2" } */ /* Check that Temporary Expression Replacement does not move a libcall-producing expression across a statement initialising a local register variable. */ static inline int dosvc (int fd, unsigned long high, unsigned low) { register int r0 asm("r0") = fd; register int r2 asm("r2") = high; register int r3 asm("r3") = low; asm volatile("" : "=r"(r0) : "0"(r0), "r"(r2), "r"(r3)); return r0; } struct s { int fd; long long length; } s = { 2, 0 }, *p = &s; int main (void) { unsigned low = p->length & 0xffffffff; unsigned high = p->length / 23; if (dosvc (p->fd, high, low) != 2) __builtin_abort (); return 0; }