[Bug c/19449] __builtin_constant_p cannot resolve to const when optimizing
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 28 08:54:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19449
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-03-28 08:53:54 UTC ---
Created attachment 29742
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29742
gcc49-pr19449.patch
Untested patch. There is another case where we'd better fold
__builtin_constant_p right away, for static/extern function-local array
dimensions:
int y;
static char a[__builtin_constant_p (y) ? -1 : 1];
extern char b[__builtin_constant_p (y) ? -1 : 1];
char d[__builtin_constant_p (y) ? -1 : 1];
void
foo (int x)
{
static char e[__builtin_constant_p (x) ? -1 : 1];
extern char f[__builtin_constant_p (x) ? -1 : 1];
auto char g[__builtin_constant_p (x) ? -1 : 1];
char h[__builtin_constant_p (x) ? -1 : 1];
}
Right now this compiles fine for -O0, but for -O1 and above it errors on e and
f (twice on the latter actually). When cfun == NULL, we always fold
__builtin_constant_p right away, but when cfun is NULL, we don't consider
static/extern. Not sure how to fix this issue though, because I think the
declspecs aren't passed down to declarator parsing.
More information about the Gcc-bugs
mailing list