/* Test for PR 69625; make sure that a leaf vararg function does not overwrite the caller's r6. */ /* { dg-do run } */ /* { dg-options "-O2" } */ extern void abort (void); __attribute__ ((noinline)) int foo (int x, ...) { __builtin_va_list vl; int i; __asm__ __volatile__ ("lhi %%r6,1" : : : "r6"); __builtin_va_start(vl, x); for (i = 2; i <= 6; i++) x += __builtin_va_arg(vl, int); __builtin_va_end (vl); return x; } __attribute__ ((noinline)) void bar (int r2, int r3, int r4, int r5, int r6) { foo (r2, r3, r4, r5, r6); if (r6 != 6) abort (); } int main (void) { bar (2, 3, 4, 5, 6); }