|
Boost : |
Subject: Re: [boost] merge to master?
From: John Maddock (jz.maddock_at_[hidden])
Date: 2016-03-05 13:51:09
>> I still see a few issues:
>>
>> * The program iterator_test.cpp aborts when it tries to increment an
>> out-of-range vector iterator with msvc (14 and 12).
>
> I see this on the test matrix, but I haven't been able to reproduce it
> locally.
That's weird, it's easily reproducible for me with VC14 x86 debug mode.
In the test case you have:
std::vector<wchar_t> la2;
{
typedef
boost::archive::iterators::wchar_from_mb<std::vector<char>::const_iterator>
translator;
std::copy(
translator(a.begin()),
translator(a.end()), // bug here
std::back_inserter(la2)
);
The call to translator(a.end()) leads to wchar_from_mb.hpp:137:
typename boost::iterators::iterator_reference<Base>::type c =
*(this->base_reference()++);
Where an attempt is made to dereference and increment the result of the
previous call to end().
>
>> * Running the serialization tests under valgrind on Linux flags up a lot
>> of failures (many of which may all be the same issue) - you can
>> reproduce with
>>
>> bjam toolsetname testing.launcher="valgrind --error-exitcode=1"
>
> Hmmm - there are a number of tests which trap in sanitizers and in
> valgrind. These are artifacts of the tests and not the library. I
> think most of these are dangling pointers which result from not
> deleting dematerialized data structures via pointers. If I had
> nothing else to do, I might go back and fix these tests - but it's a
> lot bigger job than meets the eye and I've got other stuff to do.
>
>>
>> * There's at least one multiprecision test which fails with the new
>> version (test_cpp_int_deserial.cpp) with vc12 and earlier, but not vc14
>> strangely. It dies with an archive exception complaining that the
>> archive is invalid with some VC compiler versions but not others.
>
This last one may actually be either an issue with the iostreams
library, or my code. Either way I've pushed a fix for multiprecision.
The issue was that constructing an input archive from a std::ifstream
dies if there's a peek() on the stream prior to the archive
constructor. I suspect this is due to the calls to imbue() in the
archive constructor invalidating the stream buffer and the fstream then
gets it's internals in a twist.
HTH, John.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk