public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: Martin Sebor <msebor@gmail.com>
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] Improve -Wmaybe-uninitialized documentation
Date: Thu, 16 Nov 2017 10:57:00 -0000	[thread overview]
Message-ID: <20171116104903.GI31922@redhat.com> (raw)
In-Reply-To: <89b7f6cb-4fba-d43a-6542-74c418e40e6b@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1791 bytes --]

On 15/11/17 20:28 -0700, Martin Sebor wrote:
>On 11/15/2017 07:31 AM, Jonathan Wakely wrote:
>>The docs for -Wmaybe-uninitialized have some issues:
>>
>>- That first sentence is looooooong.
>>- Apparently some C++ programmers think "automatic variable" means one
>> declared with C++11 `auto`, rather than simply a local variable.
>>- The sentence about only warning when optimizing is stuck in between
>> two chunks talking about longjmp, which could be inferred to mean
>> only the setjmp/longjmp part of the warning depends on optimization.
>>
>>This attempts to make it easier to parse and understand.
>
>I've always found the description remarkably precise.  Particularly
>the bit where it talks about the two paths, one initialized and the
>other not.  Your rewording loses that distinction so I don't think
>it's as accurate, or even correct.
>
>To use an example, this would satisfy the new description:
>
>  int f (void)
>  {
>    int i;
>    return i;
>  }
>
>but it doesn't match GCC behavior (it triggers -Wuninitialized,
>not -Wmaybe-uninitialized).  Unless the distinction is more
>subtle than I ascribe to it I think it needs to be preserved
>in the rewording.

Ah, I tested a similar case and missed that the warning I got was from
-Wuninitialized not -Wmaybe-uninitialized, which made me think that
"a use of the variable that is initialized" was wrong.

OK, so then here's an alternative patch which doesn't touch that first
sentence except to add "(i.e. local)". That makes the first sentence
even longer, but if it's accurate maybe that's OK. This still adds
"These warnings are only possible in optimizing compilation, because
otherwise GCC does not keep track of the state of variables." And
removes the similar text from the middle of the setjmp/longjmp
discussion.



[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 1915 bytes --]

commit 3ebe2a74817bbbbb63e27f961e91e6c044d00245
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Nov 16 10:43:51 2017 +0000

    Improve -Wmaybe-uninitialized documentation
    
            * doc/invoke.texi (-Wmaybe-uninitialized): Rephrase for clarity.

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 85c980bdfc9..bb68c308166 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -4970,11 +4970,16 @@ void store (int *i)
 @item -Wmaybe-uninitialized
 @opindex Wmaybe-uninitialized
 @opindex Wno-maybe-uninitialized
-For an automatic variable, if there exists a path from the function
-entry to a use of the variable that is initialized, but there exist
+For an automatic (i.e.@ local) variable, if there exists a path from the
+function entry to a use of the variable that is initialized, but there exist
 some other paths for which the variable is not initialized, the compiler
 emits a warning if it cannot prove the uninitialized paths are not
-executed at run time. These warnings are made optional because GCC is
+executed at run time.
+
+These warnings are only possible in optimizing compilation, because otherwise
+GCC does not keep track of the state of variables.
+
+These warnings are made optional because GCC is
 not smart enough to see all the reasons why the code might be correct
 in spite of appearing to have an error.  Here is one example of how
 this can happen:
@@ -5004,9 +5009,7 @@ similar code.
 
 @cindex @code{longjmp} warnings
 This option also warns when a non-volatile automatic variable might be
-changed by a call to @code{longjmp}.  These warnings as well are possible
-only in optimizing compilation.
-
+changed by a call to @code{longjmp}.
 The compiler sees only the calls to @code{setjmp}.  It cannot know
 where @code{longjmp} will be called; in fact, a signal handler could
 call it at any point in the code.  As a result, you may get a warning

  reply	other threads:[~2017-11-16 10:49 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-15 15:00 Jonathan Wakely
2017-11-16  5:32 ` Martin Sebor
2017-11-16 10:57   ` Jonathan Wakely [this message]
2017-11-16 16:22     ` Martin Sebor
2017-11-17 12:56       ` Jonathan Wakely
2017-11-17 17:30         ` Jeff Law
2017-11-16 18:12     ` Jeff Law
2017-11-17 12:44       ` Jonathan Wakely

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=20171116104903.GI31922@redhat.com \
    --to=jwakely@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=msebor@gmail.com \
    /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).