Re: [PATCH] objects: scope count variable to loop
On Mon, Jul 24, 2017 at 10:12:59AM -0700, Stefan Beller wrote: > > Interestingly I have no problems compiling it here. I wonder if Stefan's > > config.mak is supplying -std=c89 or some other restrictive flag. Or if > > his compiler is a different version (though I tried with gcc-6, gcc-4.9, > > and clang-3.8). > > Before this patch, I only had > CFLAGS += -g -O0 > in config.mak (as I switched working directories recently), I'll throw in > DEVELOPER=1 > > My compiler version is ancient (gcc 4.8.4-2ubuntu1~14.04.3) > apparently (why did I never check in this environment?) Ah, indeed, it's the compiler version. And I actually screwed up my gcc-4.9 test. It complains, too. It looks like the default for gcc bumped from gnu90 to gnu11 in gcc 5. -Peff
Re: [PATCH] objects: scope count variable to loop
On Mon, Jul 24, 2017 at 10:08 AM, Jeff Kingwrote: > On Wed, Jul 19, 2017 at 11:23:42AM -0700, Brandon Williams wrote: > >> > object.c: In function ‘object_array_remove_duplicates’: >> > object.c:404:2: error: ‘for’ loop initial declarations are only allowed in >> > C99 mode >> > for (unsigned src = 0; src < nr; src++) { >> > ^ >> > object.c:404:2: note: use option -std=c99 or -std=gnu99 to compile your >> > code >> > >> > Using -std=c99 works for me. >> >> This would need a change to the makefile then wouldn't it? > > Actually, it complicates things even more, I'd think. We probably can't > just blindly add "-std=c99" to CFLAGS, as not all compilers would > support it (even if they _do_ support this construct). > > Interestingly I have no problems compiling it here. I wonder if Stefan's > config.mak is supplying -std=c89 or some other restrictive flag. Or if > his compiler is a different version (though I tried with gcc-6, gcc-4.9, > and clang-3.8). Before this patch, I only had CFLAGS += -g -O0 in config.mak (as I switched working directories recently), I'll throw in DEVELOPER=1 My compiler version is ancient (gcc 4.8.4-2ubuntu1~14.04.3) apparently (why did I never check in this environment?)
Re: [PATCH] objects: scope count variable to loop
On Wed, Jul 19, 2017 at 11:23:42AM -0700, Brandon Williams wrote: > > object.c: In function ‘object_array_remove_duplicates’: > > object.c:404:2: error: ‘for’ loop initial declarations are only allowed in > > C99 mode > > for (unsigned src = 0; src < nr; src++) { > > ^ > > object.c:404:2: note: use option -std=c99 or -std=gnu99 to compile your code > > > > Using -std=c99 works for me. > > This would need a change to the makefile then wouldn't it? Actually, it complicates things even more, I'd think. We probably can't just blindly add "-std=c99" to CFLAGS, as not all compilers would support it (even if they _do_ support this construct). Interestingly I have no problems compiling it here. I wonder if Stefan's config.mak is supplying -std=c89 or some other restrictive flag. Or if his compiler is a different version (though I tried with gcc-6, gcc-4.9, and clang-3.8). -Peff
Re: [PATCH] objects: scope count variable to loop
On 07/19, Stefan Beller wrote: > This is another test balloon to see if we get complaints from people > whose compilers do not support variables scoped to for loops. > > This part of the code base was chosen as it is very old code that does > not change often, such that a potential revert is easy. > > Signed-off-by: Stefan Beller> --- > > This is a rather aggressive test ballon, my compiler needed some > good arguments to accept the new world order: > > object.c: In function ‘object_array_remove_duplicates’: > object.c:404:2: error: ‘for’ loop initial declarations are only allowed in > C99 mode > for (unsigned src = 0; src < nr; src++) { > ^ > object.c:404:2: note: use option -std=c99 or -std=gnu99 to compile your code > > Using -std=c99 works for me. This would need a change to the makefile then wouldn't it? > > Thanks, > Stefan > > object.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/object.c b/object.c > index f818777412..af26ee2fbc 100644 > --- a/object.c > +++ b/object.c > @@ -397,11 +397,11 @@ static int contains_name(struct object_array *array, > const char *name) > > void object_array_remove_duplicates(struct object_array *array) > { > - unsigned nr = array->nr, src; > + unsigned nr = array->nr; > struct object_array_entry *objects = array->objects; > > array->nr = 0; > - for (src = 0; src < nr; src++) { > + for (unsigned src = 0; src < nr; src++) { > if (!contains_name(array, objects[src].name)) { > if (src != array->nr) > objects[array->nr] = objects[src]; > -- > 2.14.0.rc0.3.g6c2e499285 > -- Brandon Williams