Hi,

Just closing the loop on this...

On 19 Oct 2024, at 11:57, Iain Sandoe wrote:

On 19 Oct 2024, at 10:16, Simon Martin <si...@nasilyan.com> wrote:

On 18 Oct 2024, at 10:55, Sam James wrote:

Simon Martin <si...@nasilyan.com> writes:

Hi Sam,

Hi Simon,

On 16 Oct 2024, at 22:06, Sam James wrote:

Simon Martin <si...@nasilyan.com> writes:

We ICE upon the following invalid code because we end up calling
finalize_nrv_r with a RETURN_EXPR with no operand.

=== cut here ===
struct X {
 ~X();
};
X test(bool b) {
 {
 X x;
 return x;
 }
 if (!(b)) return;
}
=== cut here ===

This patch fixes this by simply returning error_mark_node when
detecting
a void return in a function returning non-void.

Successfully tested on x86_64-pc-linux-gnu.

PR c++/117099

gcc/cp/ChangeLog:

* typeck.cc (check_return_expr): Return error_mark_node upon
void return for function returning non-void.

gcc/testsuite/ChangeLog:

* g++.dg/parse/crash77.C: New test.

---
gcc/cp/typeck.cc | 1 +
gcc/testsuite/g++.dg/parse/crash77.C | 14 ++++++++++++++
2 files changed, 15 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/parse/crash77.C

diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index 71d879abef1..22a6ec9a185 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -11238,6 +11238,7 @@ check_return_expr (tree retval, bool
*no_warning, bool *dangling)
 RETURN_EXPR to avoid control reaches end of non-void function
 warnings in tree-cfg.cc. */
 *no_warning = true;
+ return error_mark_node;
 }
 /* Check for a return statement with a value in a function that
 isn't supposed to return a value. */
diff --git a/gcc/testsuite/g++.dg/parse/crash77.C
b/gcc/testsuite/g++.dg/parse/crash77.C
new file mode 100644
index 00000000000..d3f0ae6a877
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/crash77.C
@@ -0,0 +1,14 @@
+// PR c++/117099
+// { dg-compile }

dg-do compile

Aarg, of course, thanks for spotting this! Fixed in the attached
version.

+
+struct X {
+ ~X();
+};
+
+X test(bool b) {
+ {
+ X x;
+ return x;
+ }
+ if (!(b)) return; // { dg-error "return-statement with no value" }
+}
-- 
2.44.0

BTW, the line-endings on this seem a bit odd. Did you use
git-send-email?

I did use git-send-email indeed. What oddities do you see with line
endings?
cat -A over the patch file looks good.

Weird -- if I open your original email in mu4e, I see a bunch of ^M at
the end of the lines.

Strange. FWIW I’m generating and sending the patches from a MacOS box,
and there might be some weirdness coming from that. I’ll check and try
to fix.

macOS Mail messes up whitespace, for sure (but I’ve not seen it append <CR>).
AFAIK “git send-email” works fine (at least no-one has reported a problem).

maybe the editor in use thinks the target format is Windows and has changed
line endings accordingly?

I investigated further and the issue was actually linked to the AWS
WorkMail SMTP server: when I use the native AWS SES one instead, my test

messages don’t have any =0D=0A anymore.

I’ve permanently updated my configuration to use SES, and all my future
git send-email’s should be good (note that this was purely a SMTP issue,
and the commits that I actually pushed never had any \r).

Thanks, Simon

Reply via email to