[Bug c/56977] gcc -Og incorrectly warns about 'constant zero length parameter'
harald at gigawatt dot nl
gcc-bugzilla@gcc.gnu.org
Thu Jun 13 19:23:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56977
Harald van Dijk <harald at gigawatt dot nl> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |harald at gigawatt dot nl
--- Comment #1 from Harald van Dijk <harald at gigawatt dot nl> ---
This is a bigger problem with glibc's open() implementation, where correct use
does not just lead to a warning, but to a compile-time error. Self-contained
test:
__attribute__((__error__("error"))) void error ();
void f (int);
extern inline __attribute__((__always_inline__)) void f (int i) {
if (__builtin_constant_p (i)) {
error ();
}
}
void g(int j) {
f (j);
}
Compiling with -Og leads to:
$ gcc -Og -c test.c
In function ‘f’,
inlined from ‘g’ at test.c:12:5:
test.c:7:11: error: call to ‘error’ declared with attribute error: error
error ();
^
$ gcc --version
gcc (GCC) 4.8.1 20130603 (Red Hat 4.8.1-1)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
The if block, including the call to error(), gets removed at all optimization
levels (even -O0) other than -Og.
More information about the Gcc-bugs
mailing list