[Bug lto/85047] cdd2a01 (and others) FAIL with -flto
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jun 25 14:01:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85047
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
If there's a way to do
void foo (int n, struct { int x[n]; } *s)
{
s->x[1] = 0;
}
int main(int argc, char **argv)
{
struct S { int x[argc]; } s;
s.x[1] = 1;
foo (argc, &s);
if (s.x[1] != 0)
__builtin_abort ();
return 0;
}
in Ada we'd have a non-nested fn case as well. The C FE currently
rightfully complains:
t.c:1:18: warning: anonymous struct declared inside parameter list will not be
visible outside of this definition or declaration
void foo (int n, struct { int x[n]; } *s)
^~~~~~
t.c: In function ‘main’:
t.c:11:14: warning: passing argument 2 of ‘foo’ from incompatible pointer type
-Wincompatible-pointer-types]
foo (argc, &s);
^~
t.c:1:40: note: expected ‘<Ub390> *’ but argument is of type ‘struct S *’
void foo (int n, struct { int x[n]; } *s)
~~~~~~~~~~~~~~~~~~~~~~^
which means VL types cannot be passed across functions unless nested
(besides VLA types I guess).
More information about the Gcc-bugs
mailing list