[Bug c/81544] New: attribute noreturn and warn_unused_result on the same function accepted
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jul 24 22:11:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81544
Bug ID: 81544
Summary: attribute noreturn and warn_unused_result on the same
function accepted
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
GCC silently accepts a function declaration that makes use of both attribute
noreturn and warn_unused_result. The combination is meaningless as is evident
from the warnings issued for calls to such a function: regardless of whether
the function's return value is or isn't used GCC issues a warning.
Rather than accepting such meaningless combinations of attributes GCC should
validate them as they are accumulated from declarations and diagnose the
meaningless or invalid combinations early, before they are used.
$ cat b.c && gcc -O2 -S -Wall -Wextra -Wpedantic b.c
int __attribute__ ((noreturn)) foo (void);
int __attribute__ ((warn_unused_result)) foo (void);
int bar (void)
{
int n = foo ();
return n;
}
void baz (void)
{
foo ();
}
b.c: In function ‘bar’:
b.c:6:7: warning: ignoring return value of ‘foo’, declared with attribute
warn_unused_result [-Wunused-result]
int n = foo ();
^
b.c: In function ‘baz’:
b.c:12:3: warning: ignoring return value of ‘foo’, declared with attribute
warn_unused_result [-Wunused-result]
foo ();
^~~~~~
More information about the Gcc-bugs
mailing list