On Thu, 21 Jan 2021, Michael Matz wrote:

You can't declare a struct in the declaration part of the for stmt (6.8.5p3), only objects of auto and register class.

Hmmm.  I think the spec is somewhat ambiguous here.
The specific wording is:

The declaration part of a for statement shall only declare identifiers for objects having storage class auto or register

Does that mean that:

1. all objects which have identifiers declared for them must have
   storage class auto or register

2. all identifiers which are declared must be for objects, and those
   objects must have storage class auto or register

FWIW both gcc and clang seem to nominally follow interpretation 2 (they're not consistent about it). But I think there's a case to be made for interpretation 1. In particular, it seems somewhat sensible to disallow something like 'for (extern int x;;)'. But disallowing

for (int x = sizeof(struct foo { int m; });;)

while allowing

int x = sizeof(struct foo { int m; });

seems arbitrary and inconsistent.

(Maybe I'll write a paper for WG14.  Make them disambiguate!)

 -E

_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to