I'm getting a container overflow failure that I think is a false
positive; but I don't understand what's going on, so I'm posting here
instead of filing an issue. Here's the most stripped-down example that I
could come up with:

#include <vector>
#include <boost/range/any_range.hpp>

template <typename T>
using AnyRange =
    boost::any_range<T,
                     boost::random_access_traversal_tag,
                     T,
                     std::ptrdiff_t>;

int main(int argc, const char * argv[])
{
    std::vector<int> v{1, 2, 3};
    v.erase(v.begin() + 1);
    int i = 42;
    AnyRange<int> range{&i, &i + 1};
    v.insert(v.begin() + 1, boost::begin(range), boost::end(range));
    assert(v[0] == 1);
    assert(v[1] == 42);
    assert(v[2] == 3);
    return 0;
}

This triggers the container overflow error inside the insert call, when
it tries to copy-construct the int at v.end(), which is inside the
allocated memory of the vector.

Replacing the insert line with

    v.insert(v.begin() + 1, &i, &i + 1);

makes it work.  Also, changing the Reference argument of the any_range
(third template argument) to "T&" or "const T&" also makes it work. And
of course, running the test without AddressSanitizer succeeds, so it
doesn't look like it's actually overwriting memory.

I tested this with boost 1.55 and 1.56. I'm on Mac OS X 10.10, with
clang++ version "Apple LLVM version 7.0.0 (clang-700.0.53)", x86_64.
AddressSanitizer is the one that comes bundled with the Xcode 7 beta
(not sure how to find out which version or revision that is).

Any idea what's going on?

Thanks, Stefan.

-- 
You received this message because you are subscribed to the Google Groups 
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to