[ Resending since this was somehow sent in HMTL mode and was scrubbed ] On 30 Oct 2024, at 17:16, Simon Martin wrote:
> 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