aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Pettersson <mikpelinux@gmail.com>2023-07-13 16:06:39 -0400
committerPaul Koning <paulkoning@comcast.net>2023-07-13 16:09:15 -0400
commit8f1a26ee259f72e42405b9c5f2b161042ec4014b (patch)
tree1fdf804d15585513be5fee75205bc6ea3e20daff
parentae862e0e47cb2d62d7c624ab999a3bd8bd2914ef (diff)
downloadgcc-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.cc2
-rw-r--r--gcc/testsuite/gcc.target/pdp11/pr107841.c12
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" } } */