From 261a4d68c99c1f447223a063962531ec2f496c22 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Wed, 10 Jun 2020 17:56:36 -0300 Subject: [PR51447] restore the global reg var before returning from main A runtime system might legitimately hold in rbx a value expected to be preserved across the call to main, but its use as a global register variable stops main from preserving it. for gcc/testsuite/ChangeLog PR rtl-optimization/51447 * gcc.c-torture/execute/pr51447.c (main): Preserve call-saved register. --- gcc/testsuite/gcc.c-torture/execute/pr51447.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'gcc') diff --git a/gcc/testsuite/gcc.c-torture/execute/pr51447.c b/gcc/testsuite/gcc.c-torture/execute/pr51447.c index 887ddb7..1d00953 100644 --- a/gcc/testsuite/gcc.c-torture/execute/pr51447.c +++ b/gcc/testsuite/gcc.c-torture/execute/pr51447.c @@ -14,6 +14,9 @@ int main (void) { __label__ nonlocal_lab; +#ifdef __x86_64__ + void *save = ptr; +#endif __attribute__((noinline, noclone)) void bar (void *func) { @@ -25,5 +28,8 @@ main (void) nonlocal_lab: if (ptr != &&nonlocal_lab) abort (); +#ifdef __x86_64__ + ptr = save; /* Restore the call-saved register. */ +#endif return 0; } -- cgit v1.1