From d589ebd7824b4505ab75a2404f49a7c200679545 Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Sun, 16 Dec 2018 10:13:18 +0200 Subject: [PATCH] PR target/52813 Turns out there are existing programs that clobber stack pointer. To avoid disruption, switch the newly introduced error to a warning. Tested with: $ make check-gcc-c RUNTESTFLAGS="i386.exp=pr52813.c " gcc/ChangeLog: 2018-12-16 Dimitar Dimitrov * cfgexpand.c (asm_clobber_reg_is_valid): Switch error to warning. Add clarification why there is a warning. gcc/testsuite/ChangeLog: 2018-12-16 Dimitar Dimitrov * gcc.target/i386/pr52813.c (test1): Update warning message. Signed-off-by: Dimitar Dimitrov --- gcc/cfgexpand.c | 7 +++++-- gcc/testsuite/gcc.target/i386/pr52813.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 0d04bbcafce..1e44c9a7ad0 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -2872,10 +2872,13 @@ asm_clobber_reg_is_valid (int regno, int nregs, const char *regname) error ("PIC register clobbered by %qs in %", regname); is_valid = false; } - /* Clobbering the STACK POINTER register is an error. */ + /* Clobbered STACK POINTER register is not saved/restored by GCC, + which is often unexpected by users. See PR52813. */ if (overlaps_hard_reg_set_p (regset, Pmode, STACK_POINTER_REGNUM)) { - error ("Stack Pointer register clobbered by %qs in %", regname); + warning (0, "Stack Pointer register clobbered by %qs in %", + regname); + warning (0, "GCC has always ignored Stack Pointer % clobbers"); is_valid = false; } diff --git a/gcc/testsuite/gcc.target/i386/pr52813.c b/gcc/testsuite/gcc.target/i386/pr52813.c index 154ebbfc423..644fef15fef 100644 --- a/gcc/testsuite/gcc.target/i386/pr52813.c +++ b/gcc/testsuite/gcc.target/i386/pr52813.c @@ -5,5 +5,5 @@ void test1 (void) { - asm volatile ("" : : : "%esp"); /* { dg-error "Stack Pointer register clobbered" } */ + asm volatile ("" : : : "%esp"); /* { dg-warning "Stack Pointer register clobbered.\+GCC has always ignored Stack Pointer 'asm' clobbers" } */ } -- 2.11.0