From 06ef9c119c56568e5f77a5189aa382cb97c95a9e Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Wed, 10 Jun 2020 17:56:36 -0300 Subject: [PATCH] [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(+) diff --git a/gcc/testsuite/gcc.c-torture/execute/pr51447.c b/gcc/testsuite/gcc.c-torture/execute/pr51447.c index 887ddb7d067..1d00953af3a 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; } -- 2.30.2