[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