On Wed, Nov 17, 2021 at 11:03:58AM +0000, Phillip Wood wrote: > Hi Junio > > On 15/11/2021 06:27, Junio C Hamano wrote: > > There are certain C99 features that might be nice to use in our code > > base, but we've hesitated to do so in order to avoid breaking > > compatibility with older compilers. But we don't actually know if > > people are even using pre-C99 compilers these days. > > > > One way to figure that out is to introduce a very small use of a > > feature, and see if anybody complains, and we've done so to probe > > the portability for a few features like "trailing comma in enum > > declaration", "designated initializer for struct", and "designated > > initializer for array". A few years ago, we tried to use a handy > > > > for (int i = 0; i < n; i++) > > use(i); > > > > to introduce a new variable valid only in the loop, but found that > > some compilers we cared about didn't like it back then. Two years > > is a long-enough time, so let's try it agin. > > > > If this patch can survive a few releases without complaint, then we > > can feel more confident that variable declaration in for() loop is > > supported by the compilers our user base use. And if we do get > > complaints, then we'll have gained some data and we can easily > > revert this patch. > > I like the idea of using a specific test balloon for the features that we > want to use but wont this one break the build for anyone doing 'make > DEVELOPER=1' because -Wdeclaration-after-statement will error out. I think > we could wrap the loop in gcc's warning pragmas to avoid that. The scope of the loop variable is limited to the loop, so I don't think this is considered as declaration after statement, just like other variable declarations in limited scopes that are abundant in Git's codebase, e.g.: printf("..."); if (var) { int a; ... } FWIW, I've spent some time with Compiler Explorer compiling a for loop initial declaration after a statement with '-std=c99 -Werror -Wdeclaration-after-statement', and none of them complained (though there were some that didn't understand the '-std=c99' or '-Wdecl...' options or couldn't compile it for some other reason).