diff options
author | Mikael Pettersson <mikpelinux@gmail.com> | 2023-07-13 16:06:39 -0400 |
---|---|---|
committer | Paul Koning <paulkoning@comcast.net> | 2023-07-13 16:09:15 -0400 |
commit | 8f1a26ee259f72e42405b9c5f2b161042ec4014b (patch) | |
tree | 1fdf804d15585513be5fee75205bc6ea3e20daff | |
parent | ae862e0e47cb2d62d7c624ab999a3bd8bd2914ef (diff) | |
download | gcc-8f1a26ee259f72e42405b9c5f2b161042ec4014b.zip gcc-8f1a26ee259f72e42405b9c5f2b161042ec4014b.tar.gz gcc-8f1a26ee259f72e42405b9c5f2b161042ec4014b.tar.bz2 |
pdp11: Fix epilogue generation [PR107841]
gcc/
PR target/107841
* config/pdp11/pdp11.cc (pdp11_expand_epilogue): Also
deallocate alloca-only frame.
gcc/testsuite/
PR target/107841
* gcc.target/pdp11/pr107841.c: New test.
-rw-r--r-- | gcc/config/pdp11/pdp11.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/pdp11/pr107841.c | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/config/pdp11/pdp11.cc b/gcc/config/pdp11/pdp11.cc index f6dd841..311a1d2 100644 --- a/gcc/config/pdp11/pdp11.cc +++ b/gcc/config/pdp11/pdp11.cc @@ -393,7 +393,7 @@ pdp11_expand_epilogue (void) rtx x, reg, via_ac = NULL; /* Deallocate the local variables. */ - if (fsize) + if (fsize || cfun->calls_alloca) { if (frame_pointer_needed) { diff --git a/gcc/testsuite/gcc.target/pdp11/pr107841.c b/gcc/testsuite/gcc.target/pdp11/pr107841.c new file mode 100644 index 0000000..a363c46 --- /dev/null +++ b/gcc/testsuite/gcc.target/pdp11/pr107841.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +/* Verify that the stack frame is deallocated using the frame pointer. */ + +void qq (int a) +{ + char *s = __builtin_alloca (128); + __builtin_sprintf (s, "qq %d", 3); +} + +/* { dg-final { scan-assembler "mov\tr5,sp" } } */ |