public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/61846] New: gcc assumes errno might be negative and issues unnecessary warning
@ 2014-07-18 20:46 zbyszek at in dot waw.pl
  2014-07-23 12:23 ` [Bug c/61846] " zbyszek at in dot waw.pl
  0 siblings, 1 reply; 2+ messages in thread
From: zbyszek at in dot waw.pl @ 2014-07-18 20:46 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61846

            Bug ID: 61846
           Summary: gcc assumes errno might be negative and issues
                    unnecessary warning
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zbyszek at in dot waw.pl

Created attachment 33148
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33148&action=edit
sample program

I see this a lot in systemd source code, where the convention is to return a
negative integer on error. gcc warns as if errno could also be zero or negative
after a system call, and warns about unitialized variables. Simplified example
attached.

$ gcc -Wall -O3 -std=gnu99 -o readwarn readwarn.c 
readwarn.c: In function ‘main’:
readwarn.c:28:9: warning: ‘ans’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
         printf("ans: %d", ans);
         ^

POSIX states that errno values are positive [1], and read may sets errno, so it
is safe to assume that if read() returned -1, errno must have a positive value.

If I replace 'return -errno' with 'return errno > 0 ? -errno : -EIO', the
warning disappers.

[1]
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html#tag_13_10
>From gcc-bugs-return-456743-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Fri Jul 18 20:49:05 2014
Return-Path: <gcc-bugs-return-456743-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 32291 invoked by alias); 18 Jul 2014 20:49:04 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 31934 invoked by uid 48); 18 Jul 2014 20:48:54 -0000
From: "zbyszek at in dot waw.pl" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/61846] gcc assumes errno might be negative and issues unnecessary warning
Date: Fri, 18 Jul 2014 20:49:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: zbyszek at in dot waw.pl
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: attachments.created
Message-ID: <bug-61846-4-le0ZEa06pI@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-07/txt/msg01334.txt.bz2
Content-length: 257

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61846

--- Comment #1 from Zbigniew Jędrzejewski-Szmek <zbyszek at in dot waw.pl> ---
Created attachment 33150
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33150&action=edit
compilation logs
>From gcc-bugs-return-456744-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Fri Jul 18 20:49:49 2014
Return-Path: <gcc-bugs-return-456744-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 1782 invoked by alias); 18 Jul 2014 20:49:48 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 1211 invoked by uid 48); 18 Jul 2014 20:49:37 -0000
From: "zbyszek at in dot waw.pl" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/61846] gcc assumes errno might be negative and issues unnecessary warning
Date: Fri, 18 Jul 2014 20:49:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: zbyszek at in dot waw.pl
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: attachments.created
Message-ID: <bug-61846-4-StKvlH832q@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-07/txt/msg01335.txt.bz2
Content-length: 257

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61846

--- Comment #2 from Zbigniew Jędrzejewski-Szmek <zbyszek at in dot waw.pl> ---
Created attachment 33151
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33151&action=edit
processed source
>From gcc-bugs-return-456745-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Fri Jul 18 20:51:41 2014
Return-Path: <gcc-bugs-return-456745-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 6196 invoked by alias); 18 Jul 2014 20:51:39 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 5898 invoked by uid 48); 18 Jul 2014 20:51:29 -0000
From: "zbyszek at in dot waw.pl" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/61846] gcc assumes errno might be negative and issues unnecessary warning
Date: Fri, 18 Jul 2014 20:51:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: zbyszek at in dot waw.pl
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: attachments.isobsolete attachments.created
Message-ID: <bug-61846-4-JG9dqli9CP@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-07/txt/msg01336.txt.bz2
Content-length: 559

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61846

Zbigniew Jędrzejewski-Szmek <zbyszek at in dot waw.pl> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #33148|0                           |1
        is obsolete|                            |

--- Comment #3 from Zbigniew Jędrzejewski-Szmek <zbyszek at in dot waw.pl> ---
Created attachment 33152
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33152&action=edit
sample program
>From gcc-bugs-return-456746-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Fri Jul 18 21:33:14 2014
Return-Path: <gcc-bugs-return-456746-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 25031 invoked by alias); 18 Jul 2014 21:33:13 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 24632 invoked by uid 48); 18 Jul 2014 21:33:06 -0000
From: "pinskia at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/61846] gcc assumes errno might be negative and issues unnecessary warning
Date: Fri, 18 Jul 2014 21:33:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: pinskia at gcc dot gnu.org
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields:
Message-ID: <bug-61846-4-Z6RxCPqIb2@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61846-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-07/txt/msg01337.txt.bz2
Content-length: 465

https://gcc.gnu.org/bugzilla/show_bug.cgi?ida846

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
C99 also has this requirement.  But C89 did not.

>Values for errno are now required to be distinct positive values rather than
> non-zero values. This change is for alignment with the ISO/IEC 9899:1999
> standard.

So using -std=gnu99 should allow this to not be unitilaized except GCC has no
way to know you are reading from errno just yet.


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug c/61846] gcc assumes errno might be negative and issues unnecessary warning
  2014-07-18 20:46 [Bug c/61846] New: gcc assumes errno might be negative and issues unnecessary warning zbyszek at in dot waw.pl
@ 2014-07-23 12:23 ` zbyszek at in dot waw.pl
  0 siblings, 0 replies; 2+ messages in thread
From: zbyszek at in dot waw.pl @ 2014-07-23 12:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61846

--- Comment #5 from Zbigniew Jędrzejewski-Szmek <zbyszek at in dot waw.pl> ---
(In reply to Andrew Pinski from comment #4)
> C99 also has this requirement.  But C89 did not.
The warnings are "best effort" anyway. So even if the standards did *not* say
that, gcc could skip the warning since existing systems all work this way
anyway.

I think it could make for a nice optimization, when compiling for C99, but that
is not what I'm asking for atm.

> >Values for errno are now required to be distinct positive values rather than 
> > non-zero values. This change is for alignment with the ISO/IEC 9899:1999 
> > standard.
> 
> So using -std=gnu99 should allow this to not be unitilaized except GCC has
> no way to know you are reading from errno just yet.
Wouldn't it be a matter of annotating read() call with the sideffect of "return
value >= 0 || errno > 0" ?
>From gcc-bugs-return-456969-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Wed Jul 23 12:35:00 2014
Return-Path: <gcc-bugs-return-456969-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 12419 invoked by alias); 23 Jul 2014 12:35:00 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 12379 invoked by uid 48); 23 Jul 2014 12:34:56 -0000
From: "rguenth at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/61872] Assigning to "long double" causes memset to be improperly elided
Date: Wed, 23 Jul 2014 12:35:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: target
X-Bugzilla-Version: 4.8.2
X-Bugzilla-Keywords: wrong-code
X-Bugzilla-Severity: normal
X-Bugzilla-Who: rguenth at gcc dot gnu.org
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cf_gcctarget bug_status cc component assigned_to
Message-ID: <bug-61872-4-YpPp95Ge03@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61872-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61872-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-07/txt/msg01560.txt.bz2
Content-length: 1545

https://gcc.gnu.org/bugzilla/show_bug.cgi?ida872

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |x86_64-*-*, i?86-*-*
             Status|ASSIGNED                    |NEW
                 CC|                            |ebotcazou at gcc dot gnu.org
          Component|c++                         |target
           Assignee|rguenth at gcc dot gnu.org         |unassigned at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Err, not exactly mine but the issue is that we have

(insn 6 5 7 (set (mem/c:DI (reg:DI 85) [0 MEM[(void *)&a]+0 S8 A128])
        (const_int 0 [0])) t.c:5 -1
     (nil))

(insn 7 6 0 (set (mem/c:DI (plus:DI (reg:DI 85)
                (const_int 8 [0x8])) [0 MEM[(void *)&a]+8 S8 A64])
        (const_int 0 [0])) t.c:5 -1
     (nil))
...
(insn 9 8 0 (set (mem/c:XF (plus:DI (reg/f:DI 78 virtual-stack-vars)
                (const_int -16 [0xfffffffffffffff0])) [0 a+0 S16 A128])
        (float_extend:XF (reg:SF 86))) t.c:6 -1
     (nil))

but the actual store via fstpt is _not_ 16 bytes.  Thus the XFmode store
for some reason got a MEM_SIZE of 16.  And RTL DSE only looks at MEM_SIZE.
And even the default mode_mem_attrs[XFmode] have 16 bytes size.  And
mode_size[XFmode] is 16.

But

FRACTIONAL_FLOAT_MODE (XF, 80, 12, ieee_extended_intel_96_format);

?!

Making target dependent for now.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-07-23 12:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-18 20:46 [Bug c/61846] New: gcc assumes errno might be negative and issues unnecessary warning zbyszek at in dot waw.pl
2014-07-23 12:23 ` [Bug c/61846] " zbyszek at in dot waw.pl

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).