public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-7607] PR c++/84964: Middle-end patch to expand_call for ICE after sorry.
@ 2022-03-10 23:50 Roger Sayle
  0 siblings, 0 replies; only message in thread
From: Roger Sayle @ 2022-03-10 23:50 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:a717376e99fb33ba3b06bd8122e884f4b63a60c9

commit r12-7607-ga717376e99fb33ba3b06bd8122e884f4b63a60c9
Author: Roger Sayle <roger@nextmovesoftware.com>
Date:   Thu Mar 10 23:49:15 2022 +0000

    PR c++/84964: Middle-end patch to expand_call for ICE after sorry.
    
    This patch resolves PR c++/84969 which is an ICE in the middle-end after
    emitting a "sorry, unimplemented" message, and is a regression from
    earlier releases of GCC.  This issue is that after encountering a
    function call requiring an unreasonable amount of stack space, the
    code continues and falls foul of an assert checking that stack pointer
    has been correctly updated.  The fix is to (locally) consider aborted
    function calls as "no return", which skips this downstream sanity check.
    
    2022-03-10  Roger Sayle  <roger@nextmovesoftware.com>
    
    gcc/ChangeLog
            PR c++/84964
            * calls.cc (expand_call): Ignore stack adjustments after sorry.
    
    gcc/testsuite/ChangeLog
            PR c++/84964
            * g++.dg/other/pr84964.C: New test case.

Diff:
---
 gcc/calls.cc                         | 2 ++
 gcc/testsuite/g++.dg/other/pr84964.C | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/gcc/calls.cc b/gcc/calls.cc
index 58864d0fdb3..50fa7b8e350 100644
--- a/gcc/calls.cc
+++ b/gcc/calls.cc
@@ -3447,6 +3447,8 @@ expand_call (tree exp, rtx target, int ignore)
 		  >= (1 << (HOST_BITS_PER_INT - 2)))
 	        {
 	          sorry ("passing too large argument on stack");
+		  /* Don't worry about stack clean-up.  */
+		  flags |= ECF_NORETURN;
 		  continue;
 		}
 
diff --git a/gcc/testsuite/g++.dg/other/pr84964.C b/gcc/testsuite/g++.dg/other/pr84964.C
new file mode 100644
index 00000000000..0f2f6f3e629
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/pr84964.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+struct a {
+  short b : -1ULL;  // { dg-warning "exceeds its type" }
+};
+void c(...) { c(a()); }  // { dg-message "sorry, unimplemented" }
+


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-03-10 23:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-10 23:50 [gcc r12-7607] PR c++/84964: Middle-end patch to expand_call for ICE after sorry Roger Sayle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).