Fixtype of declarations [C:6.7] [C:A.2.2].
This is a tagged union type, introduced by fty::deftagsum.
This corresponds to declaration in the grammar in [C]. It is the top-level construct for declarations, and it is outside the mutual recursion exprs/decls.
As a GCC extension, we include an optional assembler name specifier. According to the GCC documentation, this should normally follow a declarator, so our placement here is more liberal. However, our current goal with GCC extensions is just to handle code that includes them, not to provide a comprehensive formalization of GCC extensions. The optional assembler name specifier is always absent if GCC extensions are not supported; it may be present or absent otherwise.
As a GCC extension, we also include a list of zero or more attribute specifiers as part of a declaration, meant to come after all the declarators. This is not fully general, but it covers a set of cases of interest. The list is empty if there are no attribute specifiers, e.g. when sticking to standard C without GCC extensions.
As a GCC extension,
we include the possibility that
the declaration starts with the