public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Carlos O'Donell <carlos@redhat.com>
To: Florian Weimer <fweimer@redhat.com>,
	GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH] Fix -Os related -Werror failures.
Date: Fri, 28 Oct 2016 13:07:00 -0000	[thread overview]
Message-ID: <96d1926b-4b53-1453-88e3-9bf5e050439e@redhat.com> (raw)
In-Reply-To: <f2153190-d62b-e04f-feae-39ed52c93589@redhat.com>

On 10/28/2016 08:08 AM, Carlos O'Donell wrote:
> On 10/28/2016 02:32 AM, Florian Weimer wrote:
>> On 10/28/2016 06:46 AM, Carlos O'Donell wrote:
>>> +/* With GCC 5.3 when compiling with -Os the compiler emits a warning
>>> +   that buf[0] and buf[1] may be used uninitialized.  This can only
>>> +   happen in the case where tmpbuf[3] is used, and in that case the
>>> +   write to the tmpbuf[1] and tmpbuf[2] was assured because
>>> +   ucs4_to_cns11643 would have filled in those entries.  The difficulty
>>> +   is in getting the compiler to see this logic because tmpbuf[0] is
>>> +   involved in determining the code page and is the indicator that
>>> +   tmpbuf[2] is initialized.  */
>>> +DIAG_PUSH_NEEDS_COMMENT;
>>> +DIAG_IGNORE_NEEDS_COMMENT (5.3, "-Wmaybe-uninitialized");
>>
>> This hides the warning for -O2 builds as well, so I don't think this is a good idea.
>>
>> Those who want to build with -Os or other special compiler flags
>> should just configure with --disable-werror. We can't account for
>> every optimization someone might want to disable in their build.
> 
> I agree that we can't account for _all_ optimizations someone might want
> to disable in their build, but I think it is a reasonable goal to target
> a few key _default_ optimization including -O3, -O2, and -Os.
> 
> In the case above we only limit the emitted warnings for the narrow
> code involved in iso-2022-cn-ext conversions. I'd be more worried if it
> required a widely used function with broadly disabled warnings.
> 
> I agree with Arnd that this code is _overly_ complex and could be
> rewritten such that it's a little clearer and makes sense to the compiler
> at -Os.
> 
> Should I try to cleanup the BODY code a bit to remove this particular
> diagnostic disabling?
> 
> I know we've had several real uninitialized variable problems in the
> conversion code recently, so I'm also interested in having the compiler
> help us find more of these problems.

For example, initializing the tmpbuf in this fallback case is enough to
silence the compiler warning:

diff --git a/iconvdata/iso-2022-cn-ext.c b/iconvdata/iso-2022-cn-ext.c
index df5b5df..d0b32df 100644
--- a/iconvdata/iso-2022-cn-ext.c
+++ b/iconvdata/iso-2022-cn-ext.c
@@ -456,7 +456,7 @@ enum
              used = CNS11643_2_set;                                          \
            else                                                              \
              {                                                               \
-               unsigned char tmpbuf[3];                                      \
+               unsigned char tmpbuf[3] = { 0, 0, 0 };                        \
                                                                              \
                switch (0)                                                    \
                  {                                                           \
---

We already initialize buf similarly e.g. 
429         unsigned char buf[2] = { 0, 0 };                                      \

At -Os the compiler is unable to determine if tmpbuf can or can't be used
in one of the failure cases e.g. return __UNKNOWN_10646_CHAR;.

This particular case we are into the 3rd conversion attempt of an unknown
character, so it can't possibly be a performance case to zero tmpbuf and
simplify the analysis for all kinds of static analysis tooling.

Thoughts?

-- 
Cheers,
Carlos.

  parent reply	other threads:[~2016-10-28 13:07 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-28  4:48 Carlos O'Donell
2016-10-28  6:25 ` Andreas Schwab
2016-10-28  6:32 ` Florian Weimer
2016-10-28  6:44   ` Jeff Law
2016-10-28  8:12     ` Arnd Bergmann
2016-10-28  8:17       ` Andrew Pinski
2016-10-28 13:28         ` Jeff Law
2016-10-28 20:10       ` Paul Eggert
2016-10-29  3:03         ` Jeff Law
2016-10-30  4:25           ` Paul Eggert
2016-10-28 12:09   ` Carlos O'Donell
2016-10-28 12:43     ` Florian Weimer
2016-10-28 13:04     ` Joseph Myers
2016-10-28 13:07     ` Carlos O'Donell [this message]
2016-10-28 12:49   ` Joseph Myers
2016-10-28 12:55     ` Florian Weimer
2016-10-28 13:18       ` Carlos O'Donell
2016-10-28 13:58         ` [PATCH v2] Fix -Os related build and test failures Carlos O'Donell
2016-10-28 14:17           ` Joseph Myers
2016-10-29  2:59             ` [PATCH v3] " Carlos O'Donell
2016-10-29  3:26               ` Carlos O'Donell
2016-10-29 17:35               ` Joseph Myers
2016-10-30  3:51                 ` [PATCH v4] " Carlos O'Donell
2016-10-31  8:33                   ` Andreas Schwab
2016-10-31  9:16                     ` Carlos O'Donell
2016-10-31  9:22                       ` Florian Weimer
2016-10-31 12:56                       ` David Miller
2016-10-31 19:56                         ` Carlos O'Donell
2016-11-01 22:59                           ` Joseph Myers
2016-11-02 12:52                             ` Carlos O'Donell
2016-11-01  9:17                   ` Andreas Schwab
2016-11-01 11:13                     ` Joseph Myers
2016-11-01 15:58                       ` Tamar Christina
2016-11-01 16:06                         ` David Miller
2016-11-01 16:15                           ` Tamar Christina
2016-11-02 11:53                           ` Carlos O'Donell
2016-11-02 17:03                             ` Carlos O'Donell
2016-11-02 13:22                       ` Carlos O'Donell
2016-10-31 18:38               ` [PATCH v3] " Steve Ellcey
2016-10-31 19:50                 ` Carlos O'Donell
2016-10-31 19:57                   ` Steve Ellcey
2016-10-31 20:50                     ` Carlos O'Donell
2016-10-31 21:00                       ` Steve Ellcey

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=96d1926b-4b53-1453-88e3-9bf5e050439e@redhat.com \
    --to=carlos@redhat.com \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.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).