This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/83816] [7 Regression] lto1: internal compiler error: compressed stream: data error
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 17 Jan 2018 14:04:26 +0000
- Subject: [Bug lto/83816] [7 Regression] lto1: internal compiler error: compressed stream: data error
- Auto-submitted: auto-generated
- References: <bug-83816-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83816
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |lto
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-01-17
Ever confirmed|0 |1
--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #12)
> Created attachment 43152 [details]
> preprocessed c++ source
>
> I was able to reduce it somewhat. However, I'd be surprised if it does not
> reproduce the error on some other system. I get the error only with the RX
> cross compiler
>
> rx-elf-gcc -v
> Using built-in specs.
> COLLECT_GCC=rx-elf-gcc
> COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/rx-elf/6.4.1/lto-wrapper
> Target: rx-elf
> Configured with: ../gcc-6-branch-rx/configure --target=rx-elf
> --prefix=/usr/local --enable-languages=c,c++ --disable-nls --disable-werror
> --with-newlib --enable-lto --enable-multilib --with-system-zlib
> --disable-libstdcxx-verbose --disable-symvers
> Thread model: single
> gcc version 6.4.1 20180114 (GCC)
I can reproduce it:
rguenther@murzim:/abuild/rguenther/obj-rx-elf/gcc> ./xg++ -B. t.ii -flto
-nostdlib
/usr/bin/rx-elf-ld: warning: -z relro ignored.
lto1: internal compiler error: compressed stream: data error
0xa5a0ee lto_end_uncompression(lto_compression_stream*)
/space/rguenther/src/svn/gcc-6-branch/gcc/lto-compress.c:293
0xa57af9 lto_get_section_data(lto_file_decl_data*, lto_section_type, char
const*, unsigned long*, bool)
/space/rguenther/src/svn/gcc-6-branch/gcc/lto-section-in.c:164
0x6df605 lto_file_finalize
/space/rguenther/src/svn/gcc-6-branch/gcc/lto/lto.c:2038
0x6df694 lto_create_files_from_ids
/space/rguenther/src/svn/gcc-6-branch/gcc/lto/lto.c:2055
0x6df7bb lto_file_read
/space/rguenther/src/svn/gcc-6-branch/gcc/lto/lto.c:2096
0x6e1490 read_cgraph_and_symbols
/space/rguenther/src/svn/gcc-6-branch/gcc/lto/lto.c:2806
0x6e252f lto_main()
/space/rguenther/src/svn/gcc-6-branch/gcc/lto/lto.c:3310
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
lto-wrapper: fatal error: ./xg++ returned 1 exit status
compilation terminated.
/usr/bin/rx-elf-ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
"Z_DATA_ERROR if the input data was
corrupted (input stream not conforming to the zlib format or incorrect check
value)"
We're reading LTO_section_decls at WPA time.
zlib runs into
for (;;)
switch (state->mode) {
case HEAD:
...
case BAD:
ret = Z_DATA_ERROR;
goto inf_leave;
caused by
case CHECK:
if (state->wrap) {
NEEDBITS(32);
out -= left;
strm->total_out += out;
state->total += out;
if (out)
strm->adler = state->check =
UPDATE(state->check, put - out, out);
out = left;
if ((
#ifdef GUNZIP
state->flags ? hold :
#endif
ZSWAP32(hold)) != state->check) {
strm->msg = (char *)"incorrect data check";
state->mode = BAD;
break;
where the checksums don't match.
I honestly have no idea what goes wrong ... :/
The above is with in-tree zlib and a cross built with -O0 -g so debugging this
is possible. Just deflate/inflate is spread across cc1plus / lto1 invocations.
The compression/data code wasn't changed between GCC 6 and trunk so the issue
is probably present/latent in GCC 7 and GCC 8 as well.