On 07/10/15 21:38 +0200, François Dumont wrote:
HiI completed vector assertion mode. Here is the result of the new test you will find in the attached patch. With debug mode: /home/fdt/dev/gcc/build_git/x86_64-unknown-linux-gnu/libstdc++-v3/include/debug/safe_iterator.h:375: Error: attempt to advance a dereferenceable (start-of-sequence) iterator 2 steps, which falls outside its valid range. Objects involved in the operation: iterator @ 0x0x7fff1c346760 { type = __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<int*, std::__cxx1998::vector<int, std::allocator<int> > >, std::__debug::vector<int, std::allocator<int> > > (mutable iterator); state = dereferenceable (start-of-sequence); references sequence with type 'std::__debug::vector<int, std::allocator<int> >' @ 0x0x7fff1c3469a0 } XFAIL: 23_containers/vector/debug/insert8_neg.cc execution test With assertion mode: /home/fdt/dev/gcc/build_git/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:1124: Error: invalid insert position outside container [begin, end) range. Objects involved in the operation: sequence "this" @ 0x0x7fff60b1f870 { type = std::vector<int, std::allocator<int> >; } iterator "__position" @ 0x0x7fff60b1f860 { type = __gnu_cxx::__normal_iterator<int const*, std::vector<int, std::allocator<int> > >; } XFAIL: 23_containers/vector/debug/insert8_neg.cc execution test
I still don't like the formatted output for the lightweight mode, it adds a dependency on I/O support in libc, which is a problem for embedded systems. The idea was to just add really cheap checks and abort :-( Have you compared codegen with and without assertion mode? How much more code is added to member functions like operator[] that must be inlined for good performance? Is it likely to affect inlining decisions? I suspect it will have a much bigger impact than if we just use __builtin_abort() as I made it do originally. If these checks become more complex then people are not going to enable them by default, and we probably won't want to make them enabled by _FORTIFY_SOURCE.
