https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85810
Bug ID: 85810 Summary: gcc incorrectly handles declarations inside parameter lists of function declarators. Product: gcc Version: 8.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: cookevillain at yahoo dot com Target Milestone: --- Clause 6.2.1(2) of the C11 ISO Standard (draft) defines a function prototype as follows: A function prototype is a declaration of a function that declares the types of its parameters. In the following translation unit int (*func)( struct tag { int mem; } ); struct tag array[42]; the declaration for f is a declaration of a pointer, not a function, hence there is no function prototype involved. Therefore, 'tag' should have file scope and the translation unit should be conforming. Instead gcc diagnoses an `array of incomplete types' error for 'a'. The discussion in https://stackoverflow.com/questions/50371169/do-parameter-declarations-in-function-declarators-have-function-prototype-scope is relevant here, as well.