https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77754
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Though, it seems they can be hiding pretty much everywhere:
int fn3();
void (**fn5) (int[][fn3 ()]);
void fn1 () {
int a[10][fn3 ()];
(**fn5) (a);
}
ICEs with -O2 -flto, so does:
int fn3();
typedef void (*fn6) (int[][fn3 ()]);
fn6 **fn7;
void fn1 () {
int a[10][fn3 ()];
(**fn7) (a);
}
and so does:
int fn3();
typedef void (*fn6) (int[][fn3 ()]);
struct S {
fn6 **fn7;
fn6 *fn8;
fn6 fn9;
} s;
void fn1 () {
int a[10][fn3 ()];
(**s.fn7) (a);
(*s.fn8) (a);
s.fn9 (a);
}
So I'd think trying to fix it up late is just too late, we want to change it
immediately after finishing a declaration that is not a function definition.