boostorg/iostreams

gcc-4.8 on xenial test failure

jeking3 opened this issue · 1 comments

This did not happen on gcc 4.8 on trusty.
It is happening on gcc 4.8 that comes with xenial.
It seems similar to boostorg/dynamic_bitset#41
Both issues seem to revolve around basic_ios clear handling.

Here is a job where it fails:

https://travis-ci.org/boostorg/iostreams/jobs/525323038

Here is the output:

gcc.compile.c++ ../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.o
gcc.link ../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test
testing.capture-output ../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.run
====== BEGIN OUTPUT ======
Running 12 test cases...
unknown location(0): fatal error: in "stream state test/wrap_throw_delayed<&test_read>__execute": std::ios_base::failure[abi:cxx11]: basic_ios::clear: iostream error
../../libs/iostreams/test/stream_state_test.cpp(119): last checkpoint
unknown location(0): fatal error: in "stream state test/wrap_throw_delayed<&test_write>__execute": std::ios_base::failure[abi:cxx11]: basic_ios::clear: iostream error
../../libs/iostreams/test/stream_state_test.cpp(119): last checkpoint
unknown location(0): fatal error: in "stream state test/wrap_throw_delayed<&test_seekg>__execute": std::ios_base::failure[abi:cxx11]: basic_ios::clear: iostream error
../../libs/iostreams/test/stream_state_test.cpp(119): last checkpoint
unknown location(0): fatal error: in "stream state test/wrap_throw_delayed<&test_seekp>__execute": std::ios_base::failure[abi:cxx11]: basic_ios::clear: iostream error
../../libs/iostreams/test/stream_state_test.cpp(119): last checkpoint
*** 4 failures are detected in the test module "Master Test Suite"
EXIT STATUS: 201
====== END OUTPUT ======
    LD_LIBRARY_PATH="/usr/bin:/usr/lib:/usr/lib32:/usr/lib64:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
    status=0
    if test $status -ne 0 ; then
        echo Skipping test execution due to testing.execute=off
        exit 0
    fi
     "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test"   > "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.output" 2>&1 < /dev/null
    status=$?
    echo >> "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.output"
    echo EXIT STATUS: $status >> "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.output"
    if test $status -eq 0 ; then
        cp "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.output" "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.run"
    fi
    verbose=0
    if test $status -ne 0 ; then
        verbose=1
    fi
    if test $verbose -eq 1 ; then
        echo ====== BEGIN OUTPUT ======
        cat "../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.output"
        echo ====== END OUTPUT ======
    fi
    exit $status
...failed testing.capture-output ../../bin.v2/libs/iostreams/test/stream_state_test.test/gcc-4.8/release/cxxstd-03-iso/threading-multi/visibility-hidden/stream_state_test.run...

Given this does not happen on gcc 4.8 under travis but does under xenial, and does not happen on any other gcc we test in CI, it looks like an environmental issue or a bug in a specific release of the libstdc++ or compiler there.

The root cause for this is xenial comes with libstdc++5 or later with the new ABI. The fix is to build with gcc 4.8 using the trusty image instead. Once the boost-ci travis.yml is updated here, this issue will be resolved.