Status of GCC 6 on x86_64 (Debian)
David Malcolm
dmalcolm@redhat.com
Tue Jan 26 20:29:00 GMT 2016
On Fri, 2016-01-22 at 08:27 +0100, Matthias Klose wrote:
> On 22.01.2016 06:09, Martin Michlmayr wrote:
> > In terms of build failures, I reported 520 bugs to Debian. Most of them
> > were new GCC errors or warnings (some packages use -Werror and many
> > -Werror=format-security).
> >
> > Here are some of the most frequent errors see:
>
> [...]
> Martin tagged these issues; https://wiki.debian.org/GCC6 has links with these
> bug searches.
Thanks.
The -Wmisleading-indentation ones can be seen at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=gcc-6-misleading-indentation;users=debian-gcc@lists.debian.org
I looked through them all.
I opened PR c/69415 to cover some possible issues with how we deal with
one-liners, which a couple of these relate to; I don't know if we want
to tweak our policy for one-liners.
Other than that, I felt that we're in good shape here: I think the
things we warned about were reasonable to warn about (but I have an
obvious bias here). I'm writing up some notes for the website's
"porting to gcc 6" page based on this.
Detailed notes follow:
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811572
Package: pimd/litite:
Looking at,
https://github.com/troglobit/libite/blob/master/lite.h#L134
the code in question seems to be:
static inline int fisslashdir(char *dir)
{
if (!dir) return 0;
if (strlen (dir) > 0) return dir[strlen (dir) - 1] == '/';
return 0;
}
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811573
Package: rustc
> /<<BUILDDIR>>/rustc-1.5.0+dfsg1/src/rt/miniz.c: In function 'tinfl_decompress':
> /<<BUILDDIR>>/rustc-1.5.0+dfsg1/src/rt/miniz.c:578:47: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8;
> ^~~
Link to upstream rustc code in context:
https://github.com/rust-lang/rust/blob/master/src/rt/miniz.c#L578
https://github.com/rust-lang/rust/blob/master/src/rt/miniz.c#L1396
My opinion: it's fair to issue a warning for this at -Wall
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811575
Package: nss
The code in question seems to be here:
https://hg.mozilla.org/projects/nss/file/tip/lib/dbm/src/h_page.c#l117
and contains mixed spaces and tabs. Detabifying at 8-spaces per tab (though
am not sure if this is what upstream nss use), I get:
if(origin == SEEK_CUR)
{
if(offset < 1)
return(lseek(fd, offset, SEEK_CUR));
cur_pos = lseek(fd, 0, SEEK_CUR);
if(cur_pos < 0)
return(cur_pos);
}
IMHO the indentation here *is* misleading and hence the warning is justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811576
Package: tpm-tools
Code in question seems to be here:
http://sources.debian.net/src/tpm-tools/1.3.8-2/src/tpm_mgmt/tpm_present.c/#L358
at the end of the function:
out:
if (szTpmPasswd && !isWellKnown)
shredPasswd( szTpmPasswd );
return iRc;
IMHO indentation here is somewhat misleading; warning feels justified
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811577
Package: sgt-puzzles
Code in question seems to be here:
https://github.com/radekp/sgt-puzzles/blob/master/towers.c#L391
if (ret)
return ret;
#ifdef STANDALONE_SOLVER
if (solver_show_working)
sprintf(prefix, "%*slower bounds for clue %s %d:\n",
solver_recurse_depth*4, "",
cluepos[c/w], c%w+1);
else
prefix[0] = '\0'; /* placate optimiser */
#endif
Not sure how "misleading" this is, more just poorly indented.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811578
Package: confetti
Looks like it might be generated code
e.g. generated by https://github.com/mailru/confetti/blob/master/c_dump.c
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811579
Package: mosh
> make[5]: Entering directory '/<<PKGBUILDDIR>>/src/protobufs'
...
> userinput.pb.cc: In member function 'virtual bool ClientBuffers::Instruction::IsInitialized() const':
> userinput.pb.cc:375:53: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> if (!_extensions_.IsInitialized()) return false; return true;
> ^~~~~~
>
> userinput.pb.cc:375:3: note: ...this 'if' clause, but it is not
> if (!_extensions_.IsInitialized()) return false; return true;
> ^~
Looks like it was autogenerated from:
https://github.com/mobile-shell/mosh/blob/master/src/protobufs/userinput.proto
presumably using https://github.com/google/protobuf
(added to PR 69415)
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811580
Package: collectd
Fixed upsptream:
https://github.com/collectd/collectd/commit/376667a
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811582
Package: ion
Code in question:
http://sources.debian.net/src/ion/3.2.1%2Bdfsg-1/contrib/dtnperf/dtnperf/src/dtnperf_modes/dtnperf_client.c/#L670
and:
http://sources.debian.net/src/ion/3.2.1%2Bdfsg-1/contrib/dtnperf/dtnperf/src/dtnperf_modes/dtnperf_client.c/#L719
Warnings look reasonable to me.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811583
Package: modemmanager
Code in question:
https://sources.debian.net/src/modemmanager/1.4.12-1/libqcdm/tests/test-qcdm.c/#L46
https://sources.debian.net/src/modemmanager/1.4.12-1/libqcdm/tests/test-qcdm.c/#L52
Note the:
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
at the top.
Are these tabs?
Yes.
(this file is a violation of:
https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en
which says:
"Do not ever change the size of tabs in your editor; leave them as 8 spaces. Changing the size of tabs means that code that you didnât write yourself will be perpetually misaligned."
> gcc -DHAVE_CONFIG_H -I. -I../.. -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I../../libqcdm/src -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Werror -std=gnu89 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wno-unused-parameter -Wno-sign-compare -fno-strict-aliasing -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wformat-security -c -o test_qcdm-test-qcdm.o `test -f 'test-qcdm.c' || echo './'`test-qcdm.c
> test-qcdm.c: In function 'test_data_new':
> test-qcdm.c:46:2: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> return d;
> ^~~~~~
>
> test-qcdm.c:43:5: note: ...this 'if' clause, but it is not
> if (port)
> ^~
>
> test-qcdm.c: In function 'test_data_free':
> test-qcdm.c:55:2: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> g_free (d);
> ^~~~~~
>
> test-qcdm.c:52:5: note: ...this 'if' clause, but it is not
> if (d->com_data)
> ^~
This bug has been fixed upstream in:
http://cgit.freedesktop.org/ModemManager/ModemManager/commit/?id=99ae6777893d0b149cbefac3f290c63c47e29f42
The code in question is here:
https://sources.debian.net/src/modemmanager/1.4.12-1/libqcdm/tests/test-qcdm.c/#L46
https://sources.debian.net/src/modemmanager/1.4.12-1/libqcdm/tests/test-qcdm.c/#L52
Note the:
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
at the top.
When viewed in Emacs, which respects the "tab-width: 4" option, the indentation
does indeed reflect the block structure.
But viewed via HTML in the links above, it looks wrong.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811584
Package: phalanx
Code in question is:
https://sources.debian.net/src/phalanx/22%2Bd051004-13.1/bcreate.c/#L216
while( c!='[' && c!=EOF && Counter < MaxBookPly )
{ while( (c=getchar()) != '.' && c!=EOF )
if(c=='{')
{
int csize=0;
while( (c=getchar())!='}' && c!=EOF && csize<MaxComment )
csize++;
}
while( (c=getchar())==' ' || c=='\n' ) {}
m[0]=c; i=1;
while( (c=getchar())!=' ' && c!='\n' && c!=EOF ) { m[i]=c; i++; }
m[i]='\0';
if( ! addmove(m) ) break;
I think a warning is justified here.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811585
Package: clutter-gesture
https://sources.debian.net/src/clutter-gesture/0.0.2.1-7/clutter-gesture/clutter-gesture.c/#L715
https://sources.debian.net/src/clutter-gesture/0.0.2.1-7/clutter-gesture/clutter-gesture.c/#L743
couple of bad indentation of final "return" in fn. Not sure is misleading.
Trivial to fix.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811586
Package: bomberclone
https://sources.debian.net/src/bomberclone/0.11.9-6/src/packets.c/#L1013
https://sources.debian.net/src/bomberclone/0.11.9-6/src/packets.c/#L1175
Warnings seem reasonable.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811587
Package: libsoldout
https://sources.debian.net/src/libsoldout/1.3-6/markdown.c/#L1284
Warning seems reasonable.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811588
Package: grail
Code in question:
https://sources.debian.net/src/grail/3.1.0-2/tools/grail-test-atomic.c/#L148
quoting it here:
if (status != UFStatusSuccess)
fprintf(stderr, "Error: failed to get device from event\n");
else
subscribe(grail_handle, device, subscribe_window, subscriptions, 2,
2);
subscribe(grail_handle, device, subscribe_window, subscriptions, 3,
1);
subscribe(grail_handle, device, subscribe_window, subscriptions, 4,
1);
IMHO the warning is justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811590
Package: rheolef
Another one-liner:
if (s.nop()) return s; s.os() << x; return s;
What does it look like in context?
e.g. http://www-ljk.imag.fr/membres/Pierre.Saramito/rheolef/source_html/diststream_8h_source.html
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811591
Package: ifhp
Lots of one-liners
e.g.:
http://sources.debian.net/src/ifhp/3.5.20-13/src/ifhp.c/#L1348
(added to PR 69415)
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811592
Package: uwsgi
Seems to be poor indentation:
http://sources.debian.net/src/uwsgi/2.0.11.2-6/plugins/corerouter/cr_map.c/#L156
Warning feels justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811593
Package: libgetopt++
http://sources.debian.net/src/libgetopt%2B%2B/0.0.2-p22-3.1/src/OptionSet.cc/#L126
http://sources.debian.net/src/libgetopt%2B%2B/0.0.2-p22-3.1/src/OptionSet.cc/#L159
Warnings feel justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811594
Package: chordii
http://sources.debian.net/src/chordii/4.3%2Brepack-2/src/a2crd.c/#L326
Strange indentation, throughout the file.
Warning feels justified (at -Wall)
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811595
Package: upx-ucl
> In file included from compress_lzma.cpp:237:0:
> /usr/include/lzma/LzmaEnc.c: In function 'UInt32 GetOptimum(CLzmaEnc*, UInt32, UInt32*)':
> /usr/include/lzma/LzmaEnc.c:1350:9: warning: statement is indented as if it were guarded by... [-Wmisleading-indentation]
> {
> ^
>
> /usr/include/lzma/LzmaEnc.c:1346:7: note: ...this 'if' clause, but it is not
> if (repIndex == 0)
> ^~
Looks like this:
https://github.com/moinakg/pcompress/blob/master/lzma/LzmaEnc.c#L1516
if (repIndex == 0)
startLen = lenTest + 1;
/* if (_maxMode) */
{
UInt32 lenTest2 = lenTest + 1;
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811596
Package: librdkafka
http://sources.debian.net/src/librdkafka/0.8.6-1.1/src/rdkafka.c/#L1144
if (rk->rk_conf.metadata_refresh_sparse)
rd_kafka_broker_metadata_req(rkb, 0 /* known topics */, NULL,
NULL, "sparse periodic refresh");
else
rd_kafka_broker_metadata_req(rkb, 1 /* all topics */, NULL,
NULL, "periodic refresh");
rd_kafka_broker_destroy(rkb);
Warning feels justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811598
Package: binutils-mingw-w64
> libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../../upstream/bfd -I. -I../../../upstream/bfd -I../../../upstream/bfd/../include -DHAVE_i386_pe_vec -DHAVE_i386_pei_vec -DHAVE_i386_elf32_vec -DHAVE_iamcu_elf32_vec -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -DHAVE_plugin_vec -DBINDIR=\"/usr/bin\" -Wdate-time -D_FORTIFY_SOURCE=2 -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -c peigen.c -o peigen.o
> In file included from ../../../upstream/bfd/pe-i386.c:45:0:
> ../../../upstream/bfd/coff-i386.c: In function 'coff_i386_reloc':
> ../../../upstream/bfd/coff-i386.c:142:5: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> if (diff != 0)
> ^~
>
> ../../../upstream/bfd/coff-i386.c:133:3: note: ...this 'if' clause, but it is not
> if (reloc_entry->howto->type == R_IMAGEBASE
> ^~
Fixed upstream:
https://sourceware.org/ml/binutils/2015-12/msg00316.html
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811599
Package: libqmi
Looks like another 4-space tab issue
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811600
Package: systemtap
http://sources.debian.net/src/systemtap/2.9-2/tapsets.cxx/#L5007
Bad indentation of the brace. Easy fix.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811602
Package: sword
http://sources.debian.net/src/sword/1.7.3%2Bdfsg-7/src/keys/treekeyidx.cpp/#L262
Warning feels justified.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811604
Package: crash
Another copy of coff-i386.c
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811605
Package: gxneur
http://sources.debian.net/src/gxneur/0.17.0-1/src/configuration.c/#L104
if(gcValue->type == GCONF_VALUE_STRING)
g_free(*value),
*value = g_strdup(gconf_value_get_string(gcValue));
result = 0;
gconf_value_free(gcValue);
Warning feels justified
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811606
Package: mongodb
> src/mongo/client/dbclientinterface.h: In member function 'virtual void mongo::DBConnector::checkResponse(const char*, int, bool*, std::__cxx11::string*)':
> src/mongo/client/dbclientinterface.h:524:41: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> if( retry ) *retry = false; if( targetHost ) *targetHost = "";
> ^~
Another one-liner.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812137
Package: mailavenger
http://sources.debian.net/src/mailavenger/0.8.4-4/libasync/maketables.c/#L135
Warning seems reasonable
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812166
Package: xen
Seems to be:
http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/arch/x86/cpu/mcheck/non-fatal.c;h=526864ed339d1e2c8bd21d5a65218b64859dde7b;hb=HEAD#l97
and has apparently been fixed.
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811574
Package: glibc
> In file included from ../stdlib/strtoul_l.c:27:0,
> from ../sysdeps/wordsize-64/strtoul_l.c:6:
> ../stdlib/strtol_l.c: In function '____strtoul_l_internal':
> ../stdlib/strtol_l.c:360:9: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
> cnt < thousands_len; })
> ^~~
>
> ../stdlib/strtol_l.c:357:9: note: ...this 'for' clause, but it is not
> && ({ for (cnt = 0; cnt < thousands_len; ++cnt)
> ^~~
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/strtol_l.c;h=f4c17694ab39a2fd404b1d8c73466ac6bb1e4237;hb=HEAD#l353
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811581
Package: putty
(discussion in that bug; acceptance that the warning is reasonable:
"I couldn't really make a clear argument for this case being part of any
well defined space of things for which the warning ought not to trigger")
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811603
Package: cbmc
"Thanks a lot for the heads-up, indenting has been cleaned up in CBMC trunk and
compilation using GCC 6 appears to be fine in trunk. "
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811589
Package: netcfg
http://sources.debian.net/src/netcfg/1.135/wpa.c/#L260
Fixed upstream
######################################################################
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811597
Package: linux-tools
(the perf bug seen earlier)
More information about the Gcc
mailing list