https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91542
--- Comment #1 from ldrumm at rtps dot co --- Sorry. I clicked submit too soon. Interestingly if the index operation is a constant (but not a constant expression), the error message is correct ``` struct Node { int n_successors; }; int foo(int n, struct Node *nodes[]) { enum {a}; nodes[a].n_successors; } /home/luke/code/cc/src/gcc-bug.c:8:13: error: ‘*nodes’ is a pointer; did you mean to use ‘->’? 8 | nodes[a].n_successors; | ^ | -> ``` but with a more complex expression (but still an ICE): ``` struct Node { int n_successors; }; int foo(int n, struct Node *nodes[]) { enum {a = 1}; nodes[a << 2].n_successors; } /home/luke/code/cc/src/gcc-bug.c:8:18: error: ‘*(nodes + 32)’ is a pointer; did you mean to use ‘->’? 8 | nodes[a << 2].n_successors; | ^ | -> ``` I see this behaviour on current top of tree built from source (e86f87930567b7e5444260ffc1d46507ebc8f520) as well as the debian-packaged version shipped with my OS ((Debian 9.2.1-4) 9.2.1 20190821) I'm willing to help debug this one, but I'm unfamiliar with the code, so I'd appreciate any guidance