From: Alexandre Oliva Date: Wed, 10 Jun 2020 20:56:36 +0000 (-0300) Subject: [PR51447] restore the global reg var before returning from main X-Git-Tag: basepoints/gcc-12~7072 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=06ef9c119c56568e5f77a5189aa382cb97c95a9e;hp=a9eec9625ea7165292958be04899b057804192fb;p=gcc.git [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. --- diff --git a/gcc/testsuite/gcc.c-torture/execute/pr51447.c b/gcc/testsuite/gcc.c-torture/execute/pr51447.c index 887ddb7d0677..1d00953af3aa 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; }