https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71147
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot
gnu.org
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
There is code to handle this case in instantiate_class_template_1 but it's not
quite correct. It assumes that the the array element type has been completed
which in this case isn't a safe assumption. Let me fix this.
A slightly simpler test case is below:
$ cat xx.cpp && gcc -S -Wall -Wextra -Wpedantic xx.cpp
template <typename>
struct container
{
struct elem {
unsigned u;
};
struct incomplete {
int x;
elem array[];
};
};
unsigned f (container<void>::incomplete* i)
{
return i->array [0].u;
}
xx.cpp: In instantiation of ‘struct container<void>::incomplete’:
xx.cpp:15:11: required from here
xx.cpp:9:16: error: ‘container< <template-parameter-1-1> >::incomplete::array’
has incomplete type
elem array[];
^
xx.cpp:9:16: error: invalid use of array with unspecified bounds