A summary of testing with sanitizers

Hello all.
Now that I've finally managed to get the sanitizers all working properly
(correctly linking against the sanitized runtimes) I'd like to present a
summary of its output (which I hope doesn't wrap).
I would like to point out that the sanitizers may not be able to
completely determine whether the code is correct or not, perhaps merely
that they do not understand it (inline asm, etc.), and it also looks
like some of the errors are in libc++, not Boost.
If the code is determined to be correct, I could add entries to the
blacklist to make sure the sanitizers ignore the output, but I would
prefer not to. Perhaps a better approach would be to mark up the code
so that all users of sanitizers benefit, rather than just the test matrix.
Suggestions on how to reduce this output (I hope to publish summaries on
a regular basis) in the best possible way are welcomed.
I've ordered the output by the number of test failures that result from
a particular complaint as determined by the command below:
cat bjam.log | grep SUMMARY | sort | uniq -c | sort -n -r
Count Warning
89 SUMMARY: ThreadSanitizer: data race
/home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/detail/shared_count.hpp:449:49
in boost::detail::shared_count::shared_count(boost::detail::shared_count
const&)
70 SUMMARY: ThreadSanitizer: data race
/home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/shared_ptr.hpp:392:63
in
boost::shared_ptrboost::detail::thread_data_base::shared_ptr(boost::shared_ptrboost::detail::thread_data_base
const&)
69 SUMMARY: ThreadSanitizer: data race
/home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/detail/sp_counted_base_clang.hpp:31:5
in boost::detail::atomic_increment(int _Atomic*)
44 SUMMARY: ThreadSanitizer: data race
/home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/shared_ptr.hpp:392:57
in
boost::shared_ptrboost::detail::thread_data_base::shared_ptr(boost::shared_ptrboost::detail::thread_data_base
const&)
44 SUMMARY: ThreadSanitizer: data race
/home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/detail/shared_count.hpp:449:43
in boost::detail::shared_count::shared_count(boost::detail::shared_count
const&)
33 SUMMARY: ThreadSanitizer: data race on vptr (ctor/dtor vs
virtual call)
/home/ben/development/boost/test/build/boost_root/status/../libs/thread/src/pthread/thread.cpp:168:21
in boost::(anonymous namespace)::thread_proxy(void*)
22 SUMMARY: ThreadSanitizer: data race
(/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x43962)
in std::__1::basic_string
I'm happy to expand on any line that is less than useful. For the sake of sanity, I think I will also add this to the command line -Wno-unused-local-typedef, as the log contains 462603 matches, often times the warnings push more interesting things off beyond the 64Kb limit. Ben

On Tuesday, April 21, 2015 06:42 PM, Ben Pope wrote:
I've just been looking at this one, essentially it seems to boil down to:
#include <atomic>
#include <thread>
#include <cstdint>
typedef _Atomic( std::int_least32_t ) atomic_int_least32_t;
inline void atomic_increment( atomic_int_least32_t * pw )
{
__c11_atomic_fetch_add( pw, 1, __ATOMIC_RELAXED );
}
int main()
{
atomic_int_least32_t use_count_;
std::thread t ([&](){ atomic_increment(&use_count_); });
__c11_atomic_init( &use_count_, 1 );
t.join();
}
clang -fsanitize=thread -std=c++14 -stdlib=libc++ -pthread -lc++
-lc++abi -g sp_counted_base.cpp -O0
./a.out
==================
WARNING: ThreadSanitizer: data race (pid=13176)
Atomic write of size 4 at 0x7ffed833619c by thread T1:
#0 __tsan_atomic32_fetch_add
/home/ben/development/llvm/trunk/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cc:614:3
(a.out+0x000000469c06)
#1 atomic_increment(int _Atomic*)
/home/ben/development/test/sp_counted_base.cpp:9:5 (a.out+0x0000004999c4)
#2 main::$_0::operator()() const
/home/ben/development/test/sp_counted_base.cpp:15:26 (a.out+0x00000049983e)
#3
decltype(std::__1::forwardmain::$_0(fp)(std::__1::forward<>(fp0)))
std::__1::__invokemain::$_0(main::$_0&&)
/home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/__functional_base:415:12
(a.out+0x000000499563)
#4 void
std::__1::__thread_executemain::$_0(std::__1::tuplemain::$_0&,
std::__1::__tuple_indices<>)
/home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/thread:337
(a.out+0x000000499563)
#5 void* std::__1::__thread_proxy
Previous write of size 4 at 0x7ffed833619c by main thread:
#0 main /home/ben/development/test/sp_counted_base.cpp:16:4
(a.out+0x000000498c39)
Location is stack of main thread.
Thread T1 (tid=13178, running) created by main thread at:
#0 pthread_create
/home/ben/development/llvm/trunk/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:951:3
(a.out+0x000000422a21)
#1 std::__1::thread::thread

Ben Pope wrote:
I took a quick look at all the smart_ptr issues, and all of them seem to be in Boost.Thread; essentially ThreadSanitizer claims that Boost.Thread causes a race on a shared_ptr variable (although the actual report varies.)
It's not possible to achieve this by using shared_ptr (without contortions), as the constructor initializes use_count_ to 1 and you can't (ordinarily) make a thread addref a shared_ptr variable that hasn't been constructed yet. A likelier explanation would have been that ThreadSanitizer is in some way confused by the way Boost.Thread creates threads, but in fact, stack traces show pthread_create, so I've no idea.

Le 24/04/15 21:17, Ben Pope a écrit :
The Boost.Thread code is different static void* thread_proxy(void* param) { boost::detail::thread_data_ptr thread_info = static_castboost::detail::thread_data_base*(param)->self; // (2) bool thread::start_thread_noexcept() { thread_info->self=thread_info; // (1) int const res = pthread_create(&thread_info->thread_handle, 0, &thread_proxy, thread_info.get()); if (res != 0) { thread_info->self.reset(); // (3) return false; } The thread context thread_info stores a smart_ptr to itself in member self (1). if the thread creation succeeds, self is used (2) Only if the thread creation fails, the self member is reset (3). I don't see where the data race is. I have changed (2) by boost::detail::thread_data_ptr thread_info = static_castboost::detail::thread_data_base*(param)->shared_from_this(); thread_info->self.reset(); Lets see what ThreadSanitizer reports after this change. https://github.com/boostorg/thread/commit/0218136ed7df26b66ec64cec1f7195b83e... Best, Vicente

The summary now looks like this: 52 SUMMARY: AddressSanitizer: 10040 byte(s) leaked in 65 allocation(s). 36 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x48452) in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long) 26 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/impl/results_collector.ipp:234:49 in boost::unit_test::results_collector_t::assertion_result(boost::unit_test::assertion_result) 22 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x48481) in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long) 22 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/utils/basic_cstring/basic_cstring.hpp:384:13 in boost::unit_test::basic_cstring<char const>::operator=(boost::unit_test::basic_cstring<char const> const&) 22 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/utils/basic_cstring/basic_cstring.hpp:383:13 in boost::unit_test::basic_cstring<char const>::operator=(boost::unit_test::basic_cstring<char const> const&) 22 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/impl/unit_test_log.ipp:118:41 in boost::unit_test::(anonymous namespace)::unit_test_log_impl::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>) 15 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:331:10 in boost::multiprecision::backends::detail::gmp_float_imp<50u>::~gmp_float_imp() 11 SUMMARY: ThreadSanitizer: heap-use-after-free /home/ben/development/boost/test/build/boost_root/status/../boost/chrono/time_point.hpp:196:20 in boost::chrono::time_point<boost::chrono::steady_clock, boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > >::time_since_epoch() const 10 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:499:12 in std::__1::ios_base::width() const 10 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/string:640:63 in std::__1::char_traits<char>::length(char const*) 10 SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s). 8 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:507:14 in std::__1::ios_base::width(long) 8 SUMMARY: AddressSanitizer: 552 byte(s) leaked in 23 allocation(s). 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:742:54 in std::__1::basic_ios<char, std::__1::char_traits<char> >::fill() const 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:489:18 in std::__1::ios_base::precision(long) 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:445:17 in std::__1::ios_base::flags(unsigned int) 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/algorithm:1960:26 in std::__1::__wrap_iter<char*> std::__1::transform<std::__1::__wrap_iter<char*>, std::__1::__wrap_iter<char*>, char (*)(char)>(std::__1::__wrap_iter<char*>, std::__1::__wrap_iter<char*>, std::__1::__wrap_iter<char*>, char (*)(char)) 6 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x4b547) in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::erase(unsigned long, unsigned long) 6 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x4b4b6) in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::erase(unsigned long, unsigned long) 6 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x48448) in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long) 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/./util.inl:106:16 in (anonymous namespace)::execution_monitor::wait() 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/unit_test_log_formatter.hpp:52:21 in boost::unit_test::log_entry_data::clear() 6 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/test/unit_test_log_formatter.hpp:51:25 in boost::unit_test::log_entry_data::clear() 5 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/serialization/test/test_shared_ptr.cpp:123:5 in void save_and_load<boost::shared_ptr<A> >(boost::shared_ptr<A>&) 5 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/serialization/test/test_shared_ptr_132.cpp:117:5 in void save_and_load<boost_132::shared_ptr<A> >(boost_132::shared_ptr<A> const&) 5 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/serialization/src/basic_iarchive.cpp:443:16 in boost::archive::detail::basic_iarchive_impl::load_pointer(boost::archive::detail::basic_iarchive&, void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&)) 5 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/numeric/odeint/stepper/bulirsch_stoer.hpp:202:13 in boost::numeric::odeint::controlled_step_result boost::numeric::odeint::bulirsch_stoer<std::__1::vector<double, std::__1::allocator<double> >, double, std::__1::vector<double, std::__1::allocator<double> >, double, boost::numeric::odeint::range_algebra, boost::numeric::odeint::default_operations, boost::numeric::odeint::initially_resizer>::try_step<void (*)(std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> >&, double), std::__1::vector<double, std::__1::allocator<double> >, std::__1::vector<double, std::__1::allocator<double> >, std::__1::vector<double, std::__1::allocator<double> > >(void (*)(std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> >&, double), std::__1::vector<double, std::__1::allocator<double> > co 5 SUMMARY: AddressSanitizer: heap-use-after-free /home/ben/development/boost/test/build/boost_root/status/../boost/chrono/time_point.hpp:196:20 in boost::chrono::time_point<boost::chrono::steady_clock, boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > >::time_since_epoch() const 5 SUMMARY: AddressSanitizer: 936 byte(s) leaked in 6 allocation(s). 5 SUMMARY: AddressSanitizer: 768 byte(s) leaked in 4 allocation(s). 5 SUMMARY: AddressSanitizer: 64 byte(s) leaked in 2 allocation(s). 5 SUMMARY: AddressSanitizer: 576 byte(s) leaked in 4 allocation(s). 5 SUMMARY: AddressSanitizer: 552 byte(s) leaked in 2 allocation(s). 5 SUMMARY: AddressSanitizer: 480 byte(s) leaked in 8 allocation(s). 5 SUMMARY: AddressSanitizer: 368 byte(s) leaked in 4 allocation(s). 5 SUMMARY: AddressSanitizer: 32 byte(s) leaked in 4 allocation(s). 5 SUMMARY: AddressSanitizer: 240 byte(s) leaked in 4 allocation(s). 5 SUMMARY: AddressSanitizer: 1 byte(s) leaked in 1 allocation(s). 4 SUMMARY: ThreadSanitizer: thread leak /home/ben/development/boost/test/build/boost_root/status/../libs/thread/src/pthread/thread.cpp:253:25 in boost::thread::start_thread_noexcept() 4 SUMMARY: ThreadSanitizer: data race /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/ios:437:12 in std::__1::ios_base::flags() const 4 SUMMARY: ThreadSanitizer: data race (/home/ben/development/llvm/trunk/build/release/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so.1+0x3cd42) in std::__1::__shared_weak_count::__release_shared() 4 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/serialization/test/test_shared_ptr_multi_base.cpp:185:5 in void shared_weak<boost::shared_ptr<Sub>, boost::weak_ptr<Base3> >(boost::shared_ptr<Sub>&, boost::weak_ptr<Base3>&) 4 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/type_index/stl_type_index.hpp:140:40 in boost::typeindex::stl_type_index::pretty_name() const 4 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/spirit/home/qi/numeric/detail/real_impl.hpp:295:22 in bool boost::spirit::qi::detail::real_impl<double, boost::spirit::qi::real_policies<double> >::parse<char const*, double>(char const*&, char const* const&, double&, boost::spirit::qi::real_policies<double> const&) 3 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../boost/log/utility/once_block.hpp:91:24 in boost::log::v2_mt_posix::aux::once_block_sentry::executed() const 3 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/string:3767:13 in bool std::__1::operator==<std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) 2 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/try_join_until_pass.cpp:55:12 in G::operator()() 2 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/try_join_for_pass.cpp:55:12 in G::operator()() 2 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/detach_pass.cpp:70:5 in main 2 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/detach_pass.cpp:69:5 in main 2 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/asio/test/strand.cpp:91:3 in sleep_increment(boost::asio::io_service*, int*) 2 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/local_function/test/return_derivative_seq.cpp:18:35 in derivative(boost::function<int (int)>&, int)::boost_local_function_auxXfunctorX17X::boost_local_function_auxXbodyX(int, boost::function<int (int)>&, int) 2 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:159:10 in boost::multiprecision::backends::detail::gmp_float_imp<50u>::operator=(long) 2 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/geometry/strategies/cartesian/point_in_box.hpp:63:13 in boost::geometry::strategy::within::relate_point_box_loop<boost::geometry::strategy::within::within_range, boost::geometry::model::point<double, 2ul, boost::geometry::cs::cartesian>, boost::geometry::model::box<boost::geometry::model::point<double, 2ul, boost::geometry::cs::cartesian> >, 0ul, 2ul>::apply(boost::geometry::model::point<double, 2ul, boost::geometry::cs::cartesian> const&, boost::geometry::model::box<boost::geometry::model::point<double, 2ul, boost::geometry::cs::cartesian> > const&) 2 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2774:7 in boost::container::container_detail::vec_iterator<boost::container::stable_vector_detail::node_base<void*>**, false> boost::container::vector<boost::container::stable_vector_detail::node_base<void*>*, boost::container::allocator<boost::container::stable_vector_detail::node_base<void*>*, 2u, 0u> >::priv_forward_range_insert<boost::container::container_detail::insert_value_initialized_n_proxy<boost::container::allocator<boost::container::stable_vector_detail::node_base<void*>*, 2u, 0u>, boost::container::stable_vector_detail::node_base<void*>**> >(boost::container::stable_vector_detail::node_base<void*>** const&, unsigned long, boost::container::container_detail::insert_value_initialized_n_proxy<boost::container::allocator<boost::container::stable_vector_detail::node_base<void*>*, 2u, 0u>, boost::container::stable_vector_detail::node_base<void*>**>) 2 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2604:11 in void boost::container::vector<MyInt, boost::container::allocator<MyInt, 2u, 6u> >::priv_push_back<MyInt>(MyInt&&) 2 SUMMARY: AddressSanitizer: SEGV /home/ben/development/boost/test/build/boost_root/status/../boost/system/error_code.hpp:356:15 in boost::system::error_code::clear() 2 SUMMARY: AddressSanitizer: 576 byte(s) leaked in 12 allocation(s). 2 SUMMARY: AddressSanitizer: 288 byte(s) leaked in 6 allocation(s). 2 SUMMARY: AddressSanitizer: 21480 byte(s) leaked in 294 allocation(s). 2 SUMMARY: AddressSanitizer: 144 byte(s) leaked in 6 allocation(s). 2 SUMMARY: AddressSanitizer: 14496 byte(s) leaked in 404 allocation(s). 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/join_pass.cpp:56:12 in G::operator()() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/thread/test/threads/thread/members/join_pass.cpp:39:5 in G::G() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/spirit/classic/test/owi_mt_tests.cpp:95:27 in test_task<boost::spirit::classic::impl::object_with_id<tag1, unsigned long> >::increase_test_size(unsigned long) 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/log/test/run/util_once_block.cpp:64:25 in once_block_flag_thread(boost::barrier&) 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/log/test/run/util_once_block.cpp:112:25 in once_block_thread(boost::barrier&) 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/interprocess/test/condition_test_template.hpp:83:17 in void boost::interprocess::test::condition_test_thread<boost::interprocess::interprocess_condition_any, boost::interprocess::ipcdetail::spin_mutex>(boost::interprocess::test::condition_test_data<boost::interprocess::interprocess_condition_any, boost::interprocess::ipcdetail::spin_mutex>*) 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/interprocess/test/condition_test_template.hpp:321:15 in void boost::interprocess::test::do_test_condition_queue_notify_one<boost::interprocess::interprocess_condition_any, boost::interprocess::ipcdetail::spin_mutex>() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/interprocess/test/condition_test_template.hpp:282:10 in boost::interprocess::test::condition_func<boost::interprocess::interprocess_condition_any, boost::interprocess::ipcdetail::spin_mutex>::operator()() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/interprocess/test/condition_test_template.hpp:277:10 in boost::interprocess::test::condition_func<boost::interprocess::interprocess_condition_any, boost::interprocess::ipcdetail::spin_mutex>::operator()() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/atomic/test/ordering.cpp:158:40 in total_store_order_test<(boost::memory_order)0, (boost::memory_order)0>::thread1fn() 1 SUMMARY: ThreadSanitizer: data race /home/ben/development/boost/test/build/boost_root/status/../libs/atomic/test/atomicity.cpp:131:28 in racy_add(unsigned int volatile&, unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/bitset:757:46 in std::__1::bitset<8ul>::bitset<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::size_type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::size_type, char, char) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/algorithm:1193:13 in bool std::__1::equal<boost::archive::iterators::mb_from_wchar<wchar_t const*>, char const*, std::__1::__equal_to<wchar_t, char> >(boost::archive::iterators::mb_from_wchar<wchar_t const*>, boost::archive::iterators::mb_from_wchar<wchar_t const*>, char const*, std::__1::__equal_to<wchar_t, char>) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_rational_io_mpz.test/clang-linux-3.7~msan~c14_libc++/release/test_rational_io_mpz+0x81d29) in boost::multiprecision::backends::gmp_int::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_miller_rabin.test/clang-linux-3.7~msan~c14_libc++/release/test_miller_rabin+0x98f39) in boost::multiprecision::backends::gmp_int::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_int_io_mpz.test/clang-linux-3.7~msan~c14_libc++/release/test_int_io_mpz+0x87b09) in boost::multiprecision::backends::gmp_int::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_generic_conv.test/clang-linux-3.7~msan~c14_libc++/release/test_generic_conv+0xa1549) in boost::multiprecision::backends::gmp_int::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_float_io_mpf.test/clang-linux-3.7~msan~c14_libc++/release/test_float_io_mpf+0xbedcc) in boost::multiprecision::backends::detail::gmp_float_imp<50u>::operator=(double) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_cpp_int_3.test/clang-linux-3.7~msan~c14_libc++/release/test_cpp_int_3+0x170429) in boost::multiprecision::backends::gmp_int::operator=(long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_cpp_int_2.test/clang-linux-3.7~msan~c14_libc++/release/test_cpp_int_2+0x15ec19) in boost::multiprecision::backends::gmp_int::operator=(long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/ben/development/boost/test/build/results/boost/bin.v2/libs/multiprecision/test/test_cpp_int_1.test/clang-linux-3.7~msan~c14_libc++/release/test_cpp_int_1+0x18def9) in boost::multiprecision::backends::gmp_int::operator=(long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/serialization/src/basic_xml_grammar.ipp:200:5 in boost::archive::basic_xml_grammar<char>::my_parse(std::__1::basic_istream<char, std::__1::char_traits<char> >&, boost::spirit::classic::rule<boost::spirit::classic::scanner<std::__1::__wrap_iter<char*>, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::match_policy, boost::spirit::classic::action_policy> >, boost::spirit::classic::nil_t, boost::spirit::classic::nil_t> const&, char) const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/local_function/test/return_derivative.cpp:23:35 in derivative(boost::function<int (int)>&, int)::boost_local_function_auxXfunctorX22X::boost_local_function_auxXbodyX(int, boost::function<int (int)>&, int) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/lambda/test/result_of_tests.cpp:303:5 in test_main(int, char**) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/graph/test/typestr.hpp:33:29 in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > typestr<boost::undirected_graph<VertexBundle, EdgeBundle, GraphBundle> >() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/fusion/test/functional/invoke.cpp:391:5 in void test_sequence_n<boost::fusion::vector<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >(boost::fusion::vector<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&, mpl_::int_<0>) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/container/test/alloc_full_test.cpp:126:10 in boost::container::test::test_allocation_shrink() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/container/test/alloc_basic_test.cpp:24:7 in basic_test() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/container/bench/bench_alloc.cpp:63:13 in void allocation_timing_test<char_holder<8u> >(unsigned int, unsigned int) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../libs/config/test/limits_test.cpp:97:8 in void print_hex_val<long double>(long double, char const*) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/spirit/home/qi/numeric/detail/real_impl.hpp:295:22 in bool boost::spirit::qi::detail::real_impl<double, boost::spirit::qi::ureal_policies<double> >::parse<char const*, double>(char const*&, char const* const&, double&, boost::spirit::qi::ureal_policies<double> const&) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/spirit/home/qi/numeric/detail/real_impl.hpp:295:22 in bool boost::spirit::qi::detail::real_impl<double, boost::spirit::qi::strict_real_policies<double> >::parse<char const*, double>(char const*&, char const* const&, double&, boost::spirit::qi::strict_real_policies<double> const&) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/spirit/home/qi/numeric/detail/real_impl.hpp:295:22 in bool boost::spirit::qi::detail::real_impl<double, boost::spirit::qi::real_policies<double> >::parse<std::__1::__wrap_iter<char*>, double>(std::__1::__wrap_iter<char*>&, std::__1::__wrap_iter<char*> const&, double&, boost::spirit::qi::real_policies<double> const&) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/smart_ptr/intrusive_ptr.hpp:97:13 in boost::intrusive_ptr<boost::context::execution_context::activation_record>::~intrusive_ptr() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/numeric/odeint/stepper/bulirsch_stoer.hpp:202:13 in boost::numeric::odeint::controlled_step_result boost::numeric::odeint::bulirsch_stoer<boost::array<double, 3ul>, double, boost::array<double, 3ul>, double, boost::numeric::odeint::array_algebra, boost::numeric::odeint::default_operations, boost::numeric::odeint::initially_resizer>::try_step<lorenz, boost::array<double, 3ul>, boost::array<double, 3ul>, boost::array<double, 3ul> >(lorenz, boost::array<double, 3ul> const&, boost::array<double, 3ul> const&, double&, boost::array<double, 3ul>&, double&) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp:105:17 in boost::numeric::odeint::adaptive_iterator_impl<boost::numeric::odeint::adaptive_iterator<boost::numeric::odeint::dummy_controlled_stepper, empty_system, boost::array<double, 1ul>, boost::numeric::odeint::controlled_stepper_tag>, boost::numeric::odeint::dummy_controlled_stepper, empty_system, boost::array<double, 1ul>, boost::numeric::odeint::detail::ode_state_iterator_tag, boost::numeric::odeint::controlled_stepper_tag>::increment() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:368:7 in boost::multiprecision::backends::detail::gmp_float_imp<0u>::data() const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:331:10 in boost::multiprecision::backends::detail::gmp_float_imp<100u>::~gmp_float_imp() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:234:7 in boost::multiprecision::backends::detail::gmp_float_imp<0u>::str(long, unsigned int) const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:1932:7 in boost::multiprecision::backends::gmp_rational::str(long, unsigned int) const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:1827:10 in boost::multiprecision::backends::gmp_rational::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:152:10 in boost::multiprecision::backends::detail::gmp_float_imp<50u>::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:152:10 in boost::multiprecision::backends::detail::gmp_float_imp<2000u>::operator=(unsigned long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:1226:7 in boost::multiprecision::backends::gmp_int::str(long, unsigned int) const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/multiprecision/gmp.hpp:1100:10 in boost::multiprecision::backends::gmp_int::operator=(long) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/heap/binomial_heap.hpp:684:17 in boost::heap::binomial_heap<int, boost::heap::stable<true>, boost::heap::compare<std::__1::less<int> >, boost::heap::allocator<std::__1::allocator<int> >, boost::heap::constant_time_size<true> >::merge_and_clear_nodes(boost::heap::binomial_heap<int, boost::heap::stable<true>, boost::heap::compare<std::__1::less<int> >, boost::heap::allocator<std::__1::allocator<int> >, boost::heap::constant_time_size<true> >&) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/graph/boykov_kolmogorov_max_flow.hpp:471:22 in boost::detail::bk_max_flow<boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, Node<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >, Link<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >, boost::no_property, boost::listS>, boost::adj_list_edge_property_map<boost::directed_tag, long, long&, unsigned long, Link<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >, long Link<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >::*>, boost::adj_list_edge_property_map<boost::directed_tag, long, long&, unsigned long, Link<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >, long Link<boost::detail::edge_desc_impl<boost::directed_tag, unsigned long> >::*>, boost::adj_list_edge_property_map<boost::directed_tag, boost::detail::edge_desc_impl<boost::directed_ 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/gil/color_base_algorithm.hpp:237:60 in bool boost::gil::detail::element_recursion<2>::static_equal<boost::gil::bit_aligned_pixel_reference<unsigned char, boost::mpl::vector3_c<int, 1, 2, 1>, boost::gil::layout<boost::mpl::vector3<boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t>, boost::mpl::vector3_c<int, 2, 1, 0> >, true>, boost::gil::bit_aligned_pixel_reference<unsigned char, boost::mpl::vector3_c<int, 1, 2, 1>, boost::gil::layout<boost::mpl::vector3<boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t>, boost::mpl::range_c<int, 0, 3> >, true> >(boost::gil::bit_aligned_pixel_reference<unsigned char, boost::mpl::vector3_c<int, 1, 2, 1>, boost::gil::layout<boost::mpl::vector3<boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t>, boost::mpl::vector3_c<int, 2, 1, 0> >, true> const&, boost::gil::bit_aligned_pixel_reference<unsigned char, boost::mpl::vector3_c<int, 1, 2, 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/geometry/extensions/gis/projections/proj/bonne.hpp:126:66 in boost::geometry::projections::detail::bonne::base_bonne_spheroid<boost::geometry::model::ll::point<boost::geometry::degree, double, boost::geometry::cs::geographic, 2ul>, boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>, boost::geometry::projections::parameters>::fwd(double&, double&, double&, double&) const 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:457:10 in boost::container::container_detail::vector_alloc_holder<boost::container::allocator<int, 2u, 0u>, boost::move_detail::integral_constant<unsigned int, 2u> >::~vector_alloc_holder() 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2774:7 in boost::container::container_detail::vec_iterator<int*, false> boost::container::vector<int, boost::container::allocator<int, 2u, 0u> >::priv_forward_range_insert<boost::container::container_detail::insert_move_proxy<boost::container::allocator<int, 2u, 0u>, int*> >(int* const&, unsigned long, boost::container::container_detail::insert_move_proxy<boost::container::allocator<int, 2u, 0u>, int*>) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2774:7 in boost::container::container_detail::vec_iterator<boost::container::container_detail::pair<int, int>*, false> boost::container::vector<boost::container::container_detail::pair<int, int>, boost::container::allocator<boost::container::container_detail::pair<int, int>, 2u, 0u> >::priv_forward_range_insert<boost::container::container_detail::insert_move_proxy<boost::container::allocator<boost::container::container_detail::pair<int, int>, 2u, 0u>, boost::container::container_detail::pair<int, int>*> >(boost::container::container_detail::pair<int, int>* const&, unsigned long, boost::container::container_detail::insert_move_proxy<boost::container::allocator<boost::container::container_detail::pair<int, int>, 2u, 0u>, boost::container::container_detail::pair<int, int>*>) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2675:10 in boost::container::vector<MyInt, boost::container::allocator<MyInt, 2u, 0u> >::priv_shrink_to_fit(boost::move_detail::integral_constant<unsigned int, 2u>) 1 SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/ben/development/boost/test/build/boost_root/status/../boost/container/vector.hpp:2604:11 in void boost::container::vector<int, boost::container::allocator<int, 2u, 0u> >::priv_push_back<int>(int&&) 1 SUMMARY: AddressSanitizer: stack-buffer-overflow /home/ben/development/boost/test/build/boost_root/status/../boost/intrusive/detail/size_holder.hpp:35:14 in boost::intrusive::detail::size_holder<true, unsigned long, void>::get_size() const 1 SUMMARY: AddressSanitizer: SEGV (/usr/local/lib/libc++abi.so.1+0x43029) in __dynamic_cast 1 SUMMARY: AddressSanitizer: SEGV /home/ben/development/llvm/trunk/llvm/projects/compiler-rt/lib/asan/asan_allocator.cc:524:5 in Deallocate 1 SUMMARY: AddressSanitizer: global-buffer-overflow /home/ben/development/llvm/trunk/llvm/projects/compiler-rt/lib/asan/asan_interceptors.cc:459:3 in __interceptor_memcpy 1 SUMMARY: AddressSanitizer: global-buffer-overflow /home/ben/development/boost/test/build/boost_root/status/../boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp:86:42 in boost::numeric::odeint::times_iterator_impl<boost::numeric::odeint::times_time_iterator<boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>, double*, boost::numeric::odeint::stepper_tag>, boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>, double*, boost::numeric::odeint::detail::ode_state_time_iterator_tag, boost::numeric::odeint::stepper_tag>::times_iterator_impl(boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>&, double*, double*, double) 1 SUMMARY: AddressSanitizer: global-buffer-overflow /home/ben/development/boost/test/build/boost_root/status/../boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp:86:42 in boost::numeric::odeint::times_iterator_impl<boost::numeric::odeint::times_iterator<boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>, double*, boost::numeric::odeint::stepper_tag>, boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>, double*, boost::numeric::odeint::detail::ode_state_iterator_tag, boost::numeric::odeint::stepper_tag>::times_iterator_impl(boost::numeric::odeint::dummy_stepper, empty_system, boost::array<double, 1ul>&, double*, double*, double) 1 SUMMARY: AddressSanitizer: container-overflow /home/ben/development/llvm/trunk/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:197:3 in __interceptor_strcmp 1 SUMMARY: AddressSanitizer: container-overflow /home/ben/development/llvm/trunk/install/release/bin/../include/c++/v1/string:1664:39 in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__is_long() const 1 SUMMARY: AddressSanitizer: container-overflow /home/ben/development/boost/test/build/boost_root/status/../boost/chrono/time_point.hpp:196:20 in boost::chrono::time_point<boost::chrono::steady_clock, boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > >::time_since_epoch() const 1 SUMMARY: AddressSanitizer: 96 byte(s) leaked in 6 allocation(s). 1 SUMMARY: AddressSanitizer: 8 byte(s) leaked in 1 allocation(s). 1 SUMMARY: AddressSanitizer: 816 byte(s) leaked in 1 allocation(s). 1 SUMMARY: AddressSanitizer: 797943 byte(s) leaked in 357 allocation(s). 1 SUMMARY: AddressSanitizer: 796079 byte(s) leaked in 351 allocation(s). 1 SUMMARY: AddressSanitizer: 72000000 byte(s) leaked in 3000000 allocation(s). 1 SUMMARY: AddressSanitizer: 65536 byte(s) leaked in 1 allocation(s). 1 SUMMARY: AddressSanitizer: 56 byte(s) leaked in 4 allocation(s). 1 SUMMARY: AddressSanitizer: 324 byte(s) leaked in 3 allocation(s). 1 SUMMARY: AddressSanitizer: 24 byte(s) leaked in 2 allocation(s). 1 SUMMARY: AddressSanitizer: 220 byte(s) leaked in 19 allocation(s). 1 SUMMARY: AddressSanitizer: 20 byte(s) leaked in 2 allocation(s). 1 SUMMARY: AddressSanitizer: 1984 byte(s) leaked in 11 allocation(s). 1 SUMMARY: AddressSanitizer: 171 byte(s) leaked in 9 allocation(s). 1 SUMMARY: AddressSanitizer: 14256 byte(s) leaked in 99 allocation(s). 1 SUMMARY: AddressSanitizer: 114688 byte(s) leaked in 7 allocation(s). 1 SUMMARY: AddressSanitizer: 11168 byte(s) leaked in 349 allocation(s). 1 SUMMARY: AddressSanitizer: 104 byte(s) leaked in 2 allocation(s).

On 5 May 2015 at 10:58, Ben Pope wrote:
The summary now looks like this:
I don't know about other people, but I'd prefer these marked against specific libraries so we can more easily see which are at fault. We should be *absolutely* running these as part of the Boost regression matrix. Moreover, ubsan should ALWAYS be turned on by default including on release optimised builds. Individual library maintainers should turn it off if needed, but the default should be always on. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/

On Wednesday, May 06, 2015 08:05 AM, Niall Douglas wrote:
It's a bit tricky to determine the library which is at fault, but I can probably mark them against the library in which the test failed without too much bother. I'll have a look at that later.
We should be *absolutely* running these as part of the Boost regression matrix.
Unfortunately I don't have enough spare capacity to run them every day, so I tend to run them a bit ad-hoc, but the results do appear in the test matrix for develop. Ben

After banging my head against the wall that is memory-sanitizer for a while, I finally figured out that the multiprecision failures are caused by external libraries (gmp, mpfr etc) not being built with sanitizer support. I've changed the configuration tests to trigger memory-sanitizer errors when this is the case, so that these will no longer be built in that case. However, you will need to manually delete the Boost.Build configuration caches (or all of bin.v2) in order for the fix to take effect, as these appear not to be subject to dependency-checking :( John.

On 07/05/2015 16:52, Ben Pope wrote:
The code is such that if the config tests are linked against sanitized libraries they will pass and the tests will be built as normal - which might well be useful actually - though I confess I've found clang's memory sanitizer to be a right pain to use with utterly inscrutable error messages. Just my 2c... though I guess it is marked as "not ready for widespead use". The libraries effected are gmp, mpfr, mpfi and tommath (the latter two are probably not installed by default anyway). BTW there are also a lot of multiprecision tests failing because of the 300 second timeout - seems to be the -fsanitize=memory and -fsanitize=undefined that are causing the issues - do these significantly slow compile times? John.

On Friday, May 08, 2015 12:40 AM, John Maddock wrote:
OK, hopefully I'll get a chance to look at this some time. Looks like msan is segfaulting most of the time anyway, perhaps because I added LLVMs libunwind. On the plus side, looks like ubsan is fixed.
I don't think compilation time is significantly affected, but runtime and memory usage can be, at least for msan. With -j7, I wouldn't be surprised if it blows way past my 16GB RAM and into 32GB land or more. Also, I've forced -O1 for more useful stack traces, so if you depend on aggressive optimisations for performance, that might explain it. I'm running it again with a larger timeout. Scrap that, no I'm not, because I messed it up. Next time I'll run it with a larger timeout. Ben
participants (6)
-
Ben Pope
-
Gevorg Voskanyan
-
John Maddock
-
Niall Douglas
-
Peter Dimov
-
Vicente J. Botet Escriba