[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.
This commit is contained in:
Alexandre Oliva 2020-06-10 17:56:36 -03:00 committed by Alexandre Oliva
parent a9eec9625e
commit 06ef9c119c

View file

@ -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;
}