[gcc(refs/users/aoliva/heads/testbase)] [PR51447] restore the global reg var before returning from main

Alexandre Oliva aoliva@gcc.gnu.org
Wed Jun 10 21:20:20 GMT 2020


https://gcc.gnu.org/g:06ef9c119c56568e5f77a5189aa382cb97c95a9e

commit 06ef9c119c56568e5f77a5189aa382cb97c95a9e
Author: Alexandre Oliva <oliva@adacore.com>
Date:   Wed Jun 10 17:56:36 2020 -0300

    [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:
---
 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;
 }


More information about the Gcc-cvs mailing list