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.

Reply via email to