public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: David Malcolm <dmalcolm@redhat.com>
Cc: Andrew Haley <aph@redhat.com>, gcc@gcc.gnu.org
Subject: Re: [RFC] Deprecate "implicit int" for main() in C++
Date: Wed, 25 Apr 2018 17:13:00 -0000	[thread overview]
Message-ID: <20180425164530.GW20930@redhat.com> (raw)
In-Reply-To: <1524673358.2961.4.camel@redhat.com>

On 25/04/18 12:22 -0400, David Malcolm wrote:
>On Wed, 2018-04-25 at 16:54 +0100, Jonathan Wakely wrote:
>> On 25/04/18 16:30 +0100, Andrew Haley wrote:
>> > On 04/25/2018 03:04 PM, Jonathan Wakely wrote:
>> > > On 25/04/18 14:59 +0100, Andrew Haley wrote:
>> > > > On 04/25/2018 02:56 PM, Jason Merrill wrote:
>> > > > > The warning by default seems sufficient to me.
>> > > >
>> > > > Yes.  We've been bitten by this a few times, with mysterious
>> > > > crashes.
>> > > > I'm not sure it even makes sense only to be a warning, but I
>> > > > guess
>> > > > that's up to the C++ TC.
>> > >
>> > > It's not always possible for the compiler to prove that flowing
>> > > off
>> > > the end never happens, even if the program state ensures that it
>> > > can't
>> > > (e.g. by all callers enforcing the function's preconditions
>> > > correctly). So making it ill-formed is deemed too draconian
>> > > whenever
>> > > this gets discussed.
>> >
>> > Sure.  Having said that, the cases that bit me were those where
>> > control
>> > always flowed off the end, i.e. the function contained no return
>> > statement.
>>
>> I forget the "return *this;" in assignment operators embarrassingly
>> often. So often I've even contemplated a proposal to define flowing
>> off the end of an assignment operator equivalent to "return *this;"
>
>Could/should we offer a fix-it hint for such cases?

Yes. For the general "missing return" that -Wreturn-type warns about
we can't know what a sensible return value would be. For assignment
operators 99.999% of them return *this and so a fix-it suggestion to
add exactly that would be good. This works:

@@ -15869,6 +15851,12 @@ finish_function (bool inline_p)
     {
       warning (OPT_Wreturn_type,
               "no return statement in function returning non-void");
+      if (DECL_NAME (fndecl) == assign_op_identifier)
+       {
+         rich_location richloc (line_table, input_location);
+         richloc.add_fixit_insert_before (input_location, "return *this;");
+         inform (&richloc, "Oi, Wakely, you forgot to return something");
+       }
       TREE_NO_WARNING (fndecl) = 1;
     }
 

But it should really check if *this is convertible to the return type,
just in case we have something unusual like:

struct X { int operator=(int) { } };

  reply	other threads:[~2018-04-25 16:45 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-25 13:12 Jonathan Wakely
2018-04-25 13:57 ` Andrew Haley
2018-04-25 13:59   ` Jason Merrill
2018-04-25 14:04     ` Andrew Haley
2018-04-25 14:40       ` Jonathan Wakely
2018-04-25 15:48         ` Andrew Haley
2018-04-25 16:22           ` Jonathan Wakely
2018-04-25 16:45             ` David Malcolm
2018-04-25 17:13               ` Jonathan Wakely [this message]
2018-04-25 17:50                 ` Nathan Sidwell
2018-04-25 21:14                   ` Jonathan Wakely
2018-04-25 15:31   ` Jonathan Wakely
2018-04-25 15:54     ` Jason Merrill
2018-05-08 11:36     ` Florian Weimer
2018-05-08 11:39       ` Jonathan Wakely
2018-05-08 12:02       ` Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180425164530.GW20930@redhat.com \
    --to=jwakely@redhat.com \
    --cc=aph@redhat.com \
    --cc=dmalcolm@redhat.com \
    --cc=gcc@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).