public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL
@ 2005-03-04 15:32 jorton at redhat dot com
2005-03-04 15:38 ` [Bug c/20318] " pinskia at gcc dot gnu dot org
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: jorton at redhat dot com @ 2005-03-04 15:32 UTC (permalink / raw)
To: gcc-bugs
It would be useful to have a function attribute which specifies that the
function never returns NULL.
Currently the GCC 4 snapshots with -O2 -Wall generate ~15 spurious warnings in
the Subversion source code which could be eliminated if a couple of functions
could be marked as never returning NULL.
--
Summary: RFE: add attribute to specify that a function never
returns NULL
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P2
Component: c
AssignedTo: dnovillo at gcc dot gnu dot org
ReportedBy: jorton at redhat dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
@ 2005-03-04 15:38 ` pinskia at gcc dot gnu dot org
2005-03-04 17:53 ` giovannibajo at libero dot it
` (3 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-03-04 15:38 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-03-04 15:38 -------
Confirmed, PR 19476 is case which depends on this.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |pinskia at gcc dot gnu dot
| |org
OtherBugsDependingO| |19476
nThis| |
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Keywords| |diagnostic, missed-
| |optimization
Last reconfirmed|0000-00-00 00:00:00 |2005-03-04 15:38:22
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
2005-03-04 15:38 ` [Bug c/20318] " pinskia at gcc dot gnu dot org
@ 2005-03-04 17:53 ` giovannibajo at libero dot it
2005-03-04 17:59 ` dnovillo at redhat dot com
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: giovannibajo at libero dot it @ 2005-03-04 17:53 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From giovannibajo at libero dot it 2005-03-04 17:53 -------
I don't object that this feature is indeed needed, but I would still like to
see a reduced testcase from Subversion which shows a bogus warning that could
be fixed with this attribute.
BTW, Diego, once ASSERT_EXPR becomes a generic node, can't just the C++ FE uses
it to assert that the return value for a CALL_EXPR to an allocation function is
non-zero?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
2005-03-04 15:38 ` [Bug c/20318] " pinskia at gcc dot gnu dot org
2005-03-04 17:53 ` giovannibajo at libero dot it
@ 2005-03-04 17:59 ` dnovillo at redhat dot com
2005-03-04 18:01 ` dnovillo at gcc dot gnu dot org
2005-06-03 14:20 ` pinskia at gcc dot gnu dot org
4 siblings, 0 replies; 11+ messages in thread
From: dnovillo at redhat dot com @ 2005-03-04 17:59 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dnovillo at redhat dot com 2005-03-04 17:59 -------
Subject: Re: RFE: add attribute to specify that a function never
returns NULL
giovannibajo at libero dot it wrote:
> ------- Additional Comments From giovannibajo at libero dot it 2005-03-04 17:53 -------
> I don't object that this feature is indeed needed, but I would still like to
> see a reduced testcase from Subversion which shows a bogus warning that could
> be fixed with this attribute.
>
I have attached the pre-processed test case from Joe.
> BTW, Diego, once ASSERT_EXPR becomes a generic node, can't just the C++ FE uses
> it to assert that the return value for a CALL_EXPR to an allocation function is
> non-zero?
>
The attribute would be enough. The FE need only set an ECF_ flag to the
CALL_EXPR and the optimizers will pick it up from there.
Diego.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
` (2 preceding siblings ...)
2005-03-04 17:59 ` dnovillo at redhat dot com
@ 2005-03-04 18:01 ` dnovillo at gcc dot gnu dot org
2005-06-03 14:20 ` pinskia at gcc dot gnu dot org
4 siblings, 0 replies; 11+ messages in thread
From: dnovillo at gcc dot gnu dot org @ 2005-03-04 18:01 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dnovillo at gcc dot gnu dot org 2005-03-04 18:01 -------
Adding some of the early analysis that went on in private mail.
> So is there an __attribute__ that we can use to mark that function to
> always return non-NULL, so the compiler knows that path is not possible?
>
No. There is __attribute__ ((noreturn)), but the compiler has no way of knowing
that svn_fs_fs__id_parse is guaranteed to return non-NULL.
This is what the compiler sees in the IL:
root_id_41 = svn_fs_fs__id_parse (node_id_str_39, D.10885_40, pool_5);
if (root_id_41 == 0B) goto <L13>; else goto <L17>;
<L13>:;
svn_error__locate (...);
D.10887_45 = dgettext (...);
svn_err__temp_46 = svn_error_create (160004, 0B, D.10887_45);
# root_id_257 = PHI <root_id_28(10), root_id_41(8)>;
<L17>:;
[ ... ]
<L19>:;
*root_id_p_30 = root_id_257;
At L19, it sees two possible values for root_id (root_id_28 and root_id_41).
root_id_28 is the uninitialized value.
We don't have a "can't return NULL" attribute. Though it would be useful. In
this case, you're better off initializing *root_id_p at the start of the function.
Diego.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
` (3 preceding siblings ...)
2005-03-04 18:01 ` dnovillo at gcc dot gnu dot org
@ 2005-06-03 14:20 ` pinskia at gcc dot gnu dot org
4 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-06-03 14:20 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-03 14:20 -------
Here is a reduced testcase for the SVN code:
void *g();
static void *count_and_verify_instructions(int *ninst,const unsigned char *p)
{
if (p == ((void *)0))
return g();
*ninst = 0;
return 0;
}
void f(int);
void *decode_window(const unsigned char *data)
{
int ninst;
void *svn_err__temp = count_and_verify_instructions(&ninst, data);
if (svn_err__temp)
return svn_err__temp;
f (ninst);
return 0;
}
----- cut ---------
g returns only non null values.
This reduced testcase comes from PR 21320 which comes from OLH.
--
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed|2005-03-04 15:38:22 |2005-06-03 14:20:19
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
[not found] <bug-20318-4@http.gcc.gnu.org/bugzilla/>
2013-10-09 13:03 ` glisse at gcc dot gnu.org
@ 2013-10-11 11:48 ` glisse at gcc dot gnu.org
1 sibling, 0 replies; 11+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-10-11 11:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
Marc Glisse <glisse at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |glisse at gcc dot gnu.org
Resolution|--- |FIXED
--- Comment #11 from Marc Glisse <glisse at gcc dot gnu.org> ---
Marking svn_fs_fs__id_parse and svn_error_create with the new
__attribute__((__returns_nonnull__)) makes the warning about root_id disappear
at -O3, so I am going to mark this bug as fixed, please reopen if necessary.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
[not found] <bug-20318-4@http.gcc.gnu.org/bugzilla/>
@ 2013-10-09 13:03 ` glisse at gcc dot gnu.org
2013-10-11 11:48 ` glisse at gcc dot gnu.org
1 sibling, 0 replies; 11+ messages in thread
From: glisse at gcc dot gnu.org @ 2013-10-09 13:03 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
--- Comment #10 from Marc Glisse <glisse at gcc dot gnu.org> ---
Author: glisse
Date: Wed Oct 9 13:03:13 2013
New Revision: 203316
URL: http://gcc.gnu.org/viewcvs?rev=203316&root=gcc&view=rev
Log:
2013-10-09 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/20318
gcc/c-family/
* c-common.c (handle_returns_nonnull_attribute): New function.
(c_common_attribute_table): Add returns_nonnull.
gcc/
* doc/extend.texi (returns_nonnull): New function attribute.
* fold-const.c (tree_expr_nonzero_warnv_p): Look for returns_nonnull
attribute.
* tree-vrp.c (gimple_stmt_nonzero_warnv_p): Likewise.
(stmt_interesting_for_vrp): Accept all GIMPLE_CALL.
gcc/testsuite/
* c-c++-common/pr20318.c: New file.
* gcc.dg/tree-ssa/pr20318.c: New file.
Added:
trunk/gcc/testsuite/c-c++-common/pr20318.c (with props)
trunk/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c (with props)
Modified:
trunk/gcc/ChangeLog
trunk/gcc/c-family/ChangeLog
trunk/gcc/c-family/c-common.c
trunk/gcc/doc/extend.texi
trunk/gcc/fold-const.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/tree-vrp.c
Propchange: trunk/gcc/testsuite/c-c++-common/pr20318.c
('svn:eol-style' added)
Propchange: trunk/gcc/testsuite/c-c++-common/pr20318.c
('svn:keywords' added)
Propchange: trunk/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
('svn:eol-style' added)
Propchange: trunk/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
('svn:keywords' added)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
[not found] <bug-20318-10211@http.gcc.gnu.org/bugzilla/>
2005-11-11 23:29 ` green at redhat dot com
2005-11-12 19:26 ` pinskia at gcc dot gnu dot org
@ 2006-01-09 18:34 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-01-09 18:34 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from pinskia at gcc dot gnu dot org 2006-01-09 18:34 -------
No longer working on this, I am too busy working on the gfortran front-end.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|pinskia at gcc dot gnu dot |unassigned at gcc dot gnu
|org |dot org
Status|ASSIGNED |NEW
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
[not found] <bug-20318-10211@http.gcc.gnu.org/bugzilla/>
2005-11-11 23:29 ` green at redhat dot com
@ 2005-11-12 19:26 ` pinskia at gcc dot gnu dot org
2006-01-09 18:34 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-11-12 19:26 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from pinskia at gcc dot gnu dot org 2005-11-12 19:26 -------
I have a patch already.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|dnovillo at gcc dot gnu dot |pinskia at gcc dot gnu dot
|org |org
Status|NEW |ASSIGNED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug c/20318] RFE: add attribute to specify that a function never returns NULL
[not found] <bug-20318-10211@http.gcc.gnu.org/bugzilla/>
@ 2005-11-11 23:29 ` green at redhat dot com
2005-11-12 19:26 ` pinskia at gcc dot gnu dot org
2006-01-09 18:34 ` pinskia at gcc dot gnu dot org
2 siblings, 0 replies; 11+ messages in thread
From: green at redhat dot com @ 2005-11-11 23:29 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from green at redhat dot com 2005-11-11 23:29 -------
This feature would also be useful for java, as we can eliminate certain inlined
null pointer checks when we know that a method can't return null.
See http://gcc.gnu.org/ml/java/2005-11/msg00124.html
--
green at redhat dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |green at redhat dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-10-11 11:48 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-04 15:32 [Bug c/20318] New: RFE: add attribute to specify that a function never returns NULL jorton at redhat dot com
2005-03-04 15:38 ` [Bug c/20318] " pinskia at gcc dot gnu dot org
2005-03-04 17:53 ` giovannibajo at libero dot it
2005-03-04 17:59 ` dnovillo at redhat dot com
2005-03-04 18:01 ` dnovillo at gcc dot gnu dot org
2005-06-03 14:20 ` pinskia at gcc dot gnu dot org
[not found] <bug-20318-10211@http.gcc.gnu.org/bugzilla/>
2005-11-11 23:29 ` green at redhat dot com
2005-11-12 19:26 ` pinskia at gcc dot gnu dot org
2006-01-09 18:34 ` pinskia at gcc dot gnu dot org
[not found] <bug-20318-4@http.gcc.gnu.org/bugzilla/>
2013-10-09 13:03 ` glisse at gcc dot gnu.org
2013-10-11 11:48 ` glisse at gcc dot gnu.org
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).