On Wed, Jun 11, 2008 at 04:12:18PM +0200, Volker Reichelt wrote:
> * Scopes in for-loops:
>
> void foo()
> {
> for (int i=0; i<10; ++i) {}
> i = 0;
> }
>
> warn.cc: In function 'void foo()':
> warn.cc:4: warning: name lookup of 'i' changed for new ISO 'for' scoping
> warn.cc:3: warning: using obsolete binding at 'i'
>
> Btw, because the compiler tries to be smart to track new scoping and old
> scoping at once it rejects valid code, accepts invalid code and even
> generates wrong code in some cases (see PR10852).
That was originally there because, around the time the standard was
first adopted, there was a lot of old code that used the original
cfront scoping rule. But people have had a decade now to get their
code right. It might even be better to toss the support for the
alternative parsing entirely, so the compiler just reports the final
use of i as a reference to an undefined symbol.