Author: ericwf Date: Wed Dec 28 00:06:09 2016 New Revision: 290657 URL: http://llvm.org/viewvc/llvm-project?rev=290657&view=rev Log: Fix debug mode for vector/list and cleanup tests
Added: libcxx/trunk/test/libcxx/debug/containers/db_associative_container_tests.pass.cpp libcxx/trunk/test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_back.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_cback.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_cfront.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_front.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_8.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp Modified: libcxx/trunk/include/list libcxx/trunk/include/vector libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/emplace.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_iter_iter.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_rvalue.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_value.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/pop_back.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp Modified: libcxx/trunk/include/list URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/list?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/include/list (original) +++ libcxx/trunk/include/list Wed Dec 28 00:06:09 2016 @@ -626,9 +626,9 @@ protected: void swap(__list_imp& __c) #if _LIBCPP_STD_VER >= 14 - _NOEXCEPT; + _NOEXCEPT_DEBUG; #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value); #endif @@ -669,6 +669,13 @@ private: void __move_assign_alloc(__list_imp&, false_type) _NOEXCEPT {} + + _LIBCPP_INLINE_VISIBILITY + void __invalidate_all_iterators() { +#if _LIBCPP_DEBUG_LEVEL >= 2 + __get_db()->__invalidate_all(this); +#endif + } }; // Unlink nodes [__f, __l] @@ -724,21 +731,7 @@ __list_imp<_Tp, _Alloc>::clear() _NOEXCE __node_alloc_traits::destroy(__na, _VSTD::addressof(__np->__value_)); __node_alloc_traits::deallocate(__na, __np, 1); } -#if _LIBCPP_DEBUG_LEVEL >= 2 - __c_node* __c = __get_db()->__find_c_and_lock(this); - for (__i_node** __p = __c->end_; __p != __c->beg_; ) - { - --__p; - const_iterator* __i = static_cast<const_iterator*>((*__p)->__i_); - if (__i->__ptr_ != __l) - { - (*__p)->__c_ = nullptr; - if (--__c->end_ != __p) - memmove(__p, __p+1, (__c->end_ - __p)*sizeof(__i_node*)); - } - } - __get_db()->unlock(); -#endif + __invalidate_all_iterators(); } } @@ -746,9 +739,9 @@ template <class _Tp, class _Alloc> void __list_imp<_Tp, _Alloc>::swap(__list_imp& __c) #if _LIBCPP_STD_VER >= 14 - _NOEXCEPT + _NOEXCEPT_DEBUG #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value) #endif { @@ -1002,9 +995,9 @@ public: _LIBCPP_INLINE_VISIBILITY void swap(list& __c) #if _LIBCPP_STD_VER >= 14 - _NOEXCEPT + _NOEXCEPT_DEBUG #else - _NOEXCEPT_(!__node_alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_DEBUG_(!__node_alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<__node_allocator>::value) #endif {base::swap(__c);} @@ -1361,6 +1354,9 @@ list<_Tp, _Alloc>::assign(_InpIter __f, insert(__e, __f, __l); else erase(__i, __e); +#if _LIBCPP_DEBUG_LEVEL >= 2 + __get_db()->__invalidate_all(this); +#endif } template <class _Tp, class _Alloc> @@ -1375,6 +1371,9 @@ list<_Tp, _Alloc>::assign(size_type __n, insert(__e, __n, __x); else erase(__i, __e); +#if _LIBCPP_DEBUG_LEVEL >= 2 + __get_db()->__invalidate_all(this); +#endif } template <class _Tp, class _Alloc> @@ -1790,6 +1789,9 @@ list<_Tp, _Alloc>::erase(const_iterator _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__f) == this, "list::erase(iterator, iterator) called with an iterator not" " referring to this list"); + _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__l) == this, + "list::erase(iterator, iterator) called with an iterator not" + " referring to this list"); #endif if (__f != __l) { Modified: libcxx/trunk/include/vector URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/vector?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/include/vector (original) +++ libcxx/trunk/include/vector Wed Dec 28 00:06:09 2016 @@ -738,9 +738,9 @@ public: void swap(vector&) #if _LIBCPP_STD_VER >= 14 - _NOEXCEPT; + _NOEXCEPT_DEBUG; #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value); #endif @@ -757,6 +757,7 @@ public: private: _LIBCPP_INLINE_VISIBILITY void __invalidate_all_iterators(); + _LIBCPP_INLINE_VISIBILITY void __invalidate_iterators_past(pointer __new_last); void allocate(size_type __n); void deallocate() _NOEXCEPT; _LIBCPP_INLINE_VISIBILITY size_type __recommend(size_type __new_size) const; @@ -786,21 +787,7 @@ private: _LIBCPP_INLINE_VISIBILITY void __destruct_at_end(pointer __new_last) _NOEXCEPT { -#if _LIBCPP_DEBUG_LEVEL >= 2 - __c_node* __c = __get_db()->__find_c_and_lock(this); - for (__i_node** __p = __c->end_; __p != __c->beg_; ) - { - --__p; - const_iterator* __i = static_cast<const_iterator*>((*__p)->__i_); - if (__i->base() > __new_last) - { - (*__p)->__c_ = nullptr; - if (--__c->end_ != __p) - memmove(__p, __p+1, (__c->end_ - __p)*sizeof(__i_node*)); - } - } - __get_db()->unlock(); -#endif + __invalidate_iterators_past(__new_last); size_type __old_size = size(); __base::__destruct_at_end(__new_last); __annotate_shrink(__old_size); @@ -1415,6 +1402,7 @@ vector<_Tp, _Allocator>::assign(_Forward allocate(__recommend(__new_size)); __construct_at_end(__first, __last, __new_size); } + __invalidate_all_iterators(); } template <class _Tp, class _Allocator> @@ -1436,6 +1424,7 @@ vector<_Tp, _Allocator>::assign(size_typ allocate(__recommend(static_cast<size_type>(__n))); __construct_at_end(__n, __u); } + __invalidate_all_iterators(); } template <class _Tp, class _Allocator> @@ -1679,8 +1668,9 @@ vector<_Tp, _Allocator>::erase(const_ite "vector::erase(iterator) called with a non-dereferenceable iterator"); difference_type __ps = __position - cbegin(); pointer __p = this->__begin_ + __ps; - iterator __r = __make_iter(__p); this->__destruct_at_end(_VSTD::move(__p + 1, this->__end_, __p)); + this->__invalidate_iterators_past(__p-1); + iterator __r = __make_iter(__p); return __r; } @@ -1692,12 +1682,17 @@ vector<_Tp, _Allocator>::erase(const_ite _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__first) == this, "vector::erase(iterator, iterator) called with an iterator not" " referring to this vector"); + _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__last) == this, + "vector::erase(iterator, iterator) called with an iterator not" + " referring to this vector"); #endif _LIBCPP_ASSERT(__first <= __last, "vector::erase(first, last) called with invalid range"); pointer __p = this->__begin_ + (__first - begin()); - iterator __r = __make_iter(__p); - if (__first != __last) + if (__first != __last) { this->__destruct_at_end(_VSTD::move(__p + (__last - __first), this->__end_, __p)); + this->__invalidate_iterators_past(__p - 1); + } + iterator __r = __make_iter(__p); return __r; } @@ -2018,9 +2013,9 @@ template <class _Tp, class _Allocator> void vector<_Tp, _Allocator>::swap(vector& __x) #if _LIBCPP_STD_VER >= 14 - _NOEXCEPT + _NOEXCEPT_DEBUG #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_DEBUG_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value) #endif { @@ -2103,6 +2098,28 @@ vector<_Tp, _Allocator>::__invalidate_al #endif // _LIBCPP_DEBUG_LEVEL >= 2 } + +template <class _Tp, class _Allocator> +inline _LIBCPP_INLINE_VISIBILITY +void +vector<_Tp, _Allocator>::__invalidate_iterators_past(pointer __new_last) { +#if _LIBCPP_DEBUG_LEVEL >= 2 + __c_node* __c = __get_db()->__find_c_and_lock(this); + for (__i_node** __p = __c->end_; __p != __c->beg_; ) { + --__p; + const_iterator* __i = static_cast<const_iterator*>((*__p)->__i_); + if (__i->base() > __new_last) { + (*__p)->__c_ = nullptr; + if (--__c->end_ != __p) + memmove(__p, __p+1, (__c->end_ - __p)*sizeof(__i_node*)); + } + } + __get_db()->unlock(); +#else + ((void)__new_last); +#endif +} + // vector<bool> template <class _Allocator> class vector<bool, _Allocator>; @@ -2367,7 +2384,7 @@ public: #if _LIBCPP_STD_VER >= 14 _NOEXCEPT; #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value); #endif static void swap(reference __x, reference __y) _NOEXCEPT { _VSTD::swap(__x, __y); } @@ -2898,6 +2915,7 @@ vector<bool, _Allocator>::assign(size_ty } _VSTD::fill_n(begin(), __n, __x); } + __invalidate_all_iterators(); } template <class _Allocator> @@ -3159,7 +3177,7 @@ vector<bool, _Allocator>::swap(vector& _ #if _LIBCPP_STD_VER >= 14 _NOEXCEPT #else - _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || + _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value) #endif { Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_back.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_back.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_back.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_back.pass.cpp (removed) @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Call back() on empty container. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - C c(1); - assert(c.back() == 0); - c.clear(); - assert(c.back() == 0); - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_cback.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_cback.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_cback.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_cback.pass.cpp (removed) @@ -1,30 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Call back() on empty const container. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - const C c; - assert(c.back() == 0); - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_cfront.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_cfront.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_cfront.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_cfront.pass.cpp (removed) @@ -1,30 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Call front() on empty const container. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - const C c; - assert(c.front() == 0); - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_front.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_front.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_front.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_front.pass.cpp (removed) @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Call front() on empty container. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - C c(1); - assert(c.front() == 0); - c.clear(); - assert(c.front() == 0); - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_6.pass.cpp (removed) @@ -1,33 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Decrement iterator prior to begin. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - C c(1); - C::iterator i = c.end(); - --i; - assert(i == c.begin()); - --i; - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_7.pass.cpp (removed) @@ -1,33 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Increment iterator past end. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - C c(1); - C::iterator i = c.begin(); - ++i; - assert(i == c.end()); - ++i; - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_8.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_8.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_8.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_8.pass.cpp (removed) @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// Dereference non-dereferenceable iterator. - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -int main() -{ - typedef int T; - typedef std::list<T> C; - C c(1); - C::iterator i = c.end(); - T j = *i; - assert(false); - ((void)j); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/db_iterators_9.pass.cpp (removed) @@ -1,59 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++98, c++03 -// UNSUPPORTED: libcpp-no-exceptions - -// <list> - -// Operations on "NULL" iterators - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) do { if (!x) throw 1; } while(0) - -#include <list> -#include <cassert> -#include <iterator> -#include <exception> -#include <cstdlib> - -struct S { int val; }; - -int main() -{ - { - unsigned lib_asserts; - - typedef S T; - typedef std::list<T> C; - C::iterator i{}; - C::const_iterator ci{}; - - lib_asserts = 0; - try { ++i; } catch (int) { ++lib_asserts; } - try { i++; } catch (int) { ++lib_asserts; } - try { ++ci; } catch (int) { ++lib_asserts; } - try { ci++; } catch (int) { ++lib_asserts; } - assert(lib_asserts == 4); - - lib_asserts = 0; - try { --i; } catch (int) { ++lib_asserts; } - try { i--; } catch (int) { ++lib_asserts; } - try { --ci; } catch (int) { ++lib_asserts; } - try { ci--; } catch (int) { ++lib_asserts; } - assert(lib_asserts == 4); - - lib_asserts = 0; - try { *i; } catch (int) { ++lib_asserts; } - try { *ci; } catch (int) { ++lib_asserts; } - try { (void) i->val; } catch (int) { ++lib_asserts; } - try { (void) ci->val; } catch (int) { ++lib_asserts; } - assert(lib_asserts == 4); - } -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_1.pass.cpp (removed) @@ -1,36 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// template <class T, class Alloc> -// void swap(list<T,Alloc>& x, list<T,Alloc>& y); - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cstdlib> -#include <cassert> - -int main() -{ - int a1[] = {1, 3, 7, 9, 10}; - int a2[] = {0, 2, 4, 5, 6, 8, 11}; - std::list<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0])); - std::list<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0])); - std::list<int>::iterator i1 = c1.begin(); - std::list<int>::iterator i2 = c2.begin(); - swap(c1, c2); - c1.erase(i2); - c2.erase(i1); - std::list<int>::iterator j = i1; - c1.erase(i1); // called with iterator not refering to list. - assert(false); -} Removed: libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp (original) +++ libcxx/trunk/test/libcxx/containers/sequences/list/list.special/db_swap_2.pass.cpp (removed) @@ -1,36 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <list> - -// template <class T, class Alloc> -// void swap(list<T,Alloc>& x, list<T,Alloc>& y); - - -#define _LIBCPP_DEBUG 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <list> -#include <cassert> -#include "test_allocator.h" -#include "min_allocator.h" - -int main() -{ - // allocators do not compare equal - { - int a1[] = {1, 3, 7, 9, 10}; - int a2[] = {0, 2, 4, 5, 6, 8, 11}; - typedef test_allocator<int> A; - std::list<int, A> c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); - std::list<int, A> c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); - swap(c1, c2); - assert(false); - } -} Added: libcxx/trunk/test/libcxx/debug/containers/db_associative_container_tests.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/debug/containers/db_associative_container_tests.pass.cpp?rev=290657&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/debug/containers/db_associative_container_tests.pass.cpp (added) +++ libcxx/trunk/test/libcxx/debug/containers/db_associative_container_tests.pass.cpp Wed Dec 28 00:06:09 2016 @@ -0,0 +1,64 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-exceptions, libcpp-no-if-constexpr + +// test container debugging + +#define _LIBCPP_DEBUG 1 +#define _LIBCPP_DEBUG_USE_EXCEPTIONS +#include <map> +#include <set> +#include <utility> +#include <cassert> +#include "debug_mode_helper.h" + +using namespace IteratorDebugChecks; + +template <class Container, ContainerType CT> +struct AssociativeContainerChecks : BasicContainerChecks<Container, CT> { + using Base = BasicContainerChecks<Container, CT>; + using value_type = typename Container::value_type; + using iterator = typename Container::iterator; + using const_iterator = typename Container::const_iterator; + using traits = std::iterator_traits<iterator>; + using category = typename traits::iterator_category; + + using Base::makeContainer; +public: + static void run() { + Base::run(); + try { + // FIXME Add tests + } catch (...) { + assert(false && "uncaught debug exception"); + } + } + +private: + // FIXME Add tests here +}; + +int main() +{ + using SetAlloc = test_allocator<int>; + using MapAlloc = test_allocator<std::pair<const int, int>>; + // FIXME: Add debug mode to these containers + if ((false)) { + AssociativeContainerChecks< + std::set<int, std::less<int>, SetAlloc>, CT_Set>::run(); + AssociativeContainerChecks< + std::multiset<int, std::less<int>, SetAlloc>, CT_MultiSet>::run(); + AssociativeContainerChecks< + std::map<int, int, std::less<int>, MapAlloc>, CT_Map>::run(); + AssociativeContainerChecks< + std::multimap<int, int, std::less<int>, MapAlloc>, CT_MultiMap>::run(); + } +} Added: libcxx/trunk/test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp?rev=290657&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp (added) +++ libcxx/trunk/test/libcxx/debug/containers/db_sequence_container_iterators.pass.cpp Wed Dec 28 00:06:09 2016 @@ -0,0 +1,265 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-exceptions, libcpp-no-if-constexpr + +// test container debugging + +#define _LIBCPP_DEBUG 1 +#define _LIBCPP_DEBUG_USE_EXCEPTIONS +#include <forward_list> +#include <list> +#include <vector> +#include <deque> +#include "debug_mode_helper.h" + +using namespace IteratorDebugChecks; + +template <class Container, ContainerType CT> +struct SequenceContainerChecks : BasicContainerChecks<Container, CT> { + using Base = BasicContainerChecks<Container, CT>; + using value_type = typename Container::value_type; + using allocator_type = typename Container::allocator_type; + using iterator = typename Container::iterator; + using const_iterator = typename Container::const_iterator; + + using Base::makeContainer; + using Base::makeValueType; +public: + static void run() { + Base::run(); + try { + FrontOnEmptyContainer(); + if constexpr (CT != CT_ForwardList) { + AssignInvalidates(); + BackOnEmptyContainer(); + InsertIterValue(); + InsertIterSizeValue(); + InsertIterIterIter(); + EmplaceIterValue(); + EraseIterIter(); + } + if constexpr (CT == CT_Vector || CT == CT_Deque || CT == CT_List) { + PopBack(); + } + if constexpr (CT == CT_List || CT == CT_Deque) { + PopFront(); // FIXME: Run with forward list as well + } + } catch (...) { + assert(false && "uncaught debug exception"); + } + } + +private: + static void AssignInvalidates() { + CHECKPOINT("assign(Size, Value)"); + Container C(allocator_type{}); + iterator it1, it2, it3; + auto reset = [&]() { + C = makeContainer(3); + it1 = C.begin(); + it2 = ++C.begin(); + it3 = C.end(); + }; + auto check = [&]() { + CHECK_DEBUG_THROWS( C.erase(it1) ); + CHECK_DEBUG_THROWS( C.erase(it2) ); + CHECK_DEBUG_THROWS( C.erase(it3, C.end()) ); + }; + reset(); + C.assign(2, makeValueType(4)); + check(); + reset(); + CHECKPOINT("assign(Iter, Iter)"); + std::vector<value_type> V = { + makeValueType(1), + makeValueType(2), + makeValueType(3) + }; + C.assign(V.begin(), V.end()); + check(); + reset(); + CHECKPOINT("assign(initializer_list)"); + C.assign({makeValueType(1), makeValueType(2), makeValueType(3)}); + check(); + } + + static void BackOnEmptyContainer() { + CHECKPOINT("testing back on empty"); + Container C = makeContainer(1); + Container const& CC = C; + (void)C.back(); + (void)CC.back(); + C.clear(); + CHECK_DEBUG_THROWS( C.back() ); + CHECK_DEBUG_THROWS( CC.back() ); + } + + static void FrontOnEmptyContainer() { + CHECKPOINT("testing front on empty"); + Container C = makeContainer(1); + Container const& CC = C; + (void)C.front(); + (void)CC.front(); + C.clear(); + CHECK_DEBUG_THROWS( C.front() ); + CHECK_DEBUG_THROWS( CC.front() ); + } + + static void EraseIterIter() { + CHECKPOINT("testing erase iter iter invalidation"); + Container C1 = makeContainer(3); + iterator it1 = C1.begin(); + iterator it1_next = ++C1.begin(); + iterator it1_after_next = ++C1.begin(); + ++it1_after_next; + iterator it1_back = --C1.end(); + assert(it1_next != it1_back); + if (CT == CT_Vector) { + CHECK_DEBUG_THROWS( C1.erase(it1_next, it1) ); // bad range + } + C1.erase(it1, it1_after_next); + CHECK_DEBUG_THROWS( C1.erase(it1) ); + CHECK_DEBUG_THROWS( C1.erase(it1_next) ); + if (CT == CT_List) { + C1.erase(it1_back); + } else { + CHECK_DEBUG_THROWS( C1.erase(it1_back) ); + } + } + + static void PopBack() { + CHECKPOINT("testing pop_back() invalidation"); + Container C1 = makeContainer(2); + iterator it1 = C1.end(); + --it1; + C1.pop_back(); + CHECK_DEBUG_THROWS( C1.erase(it1) ); + C1.erase(C1.begin()); + assert(C1.size() == 0); + CHECK_DEBUG_THROWS( C1.pop_back() ); + } + + static void PopFront() { + CHECKPOINT("testing pop_front() invalidation"); + Container C1 = makeContainer(2); + iterator it1 = C1.begin(); + C1.pop_front(); + CHECK_DEBUG_THROWS( C1.erase(it1) ); + C1.erase(C1.begin()); + assert(C1.size() == 0); + CHECK_DEBUG_THROWS( C1.pop_front() ); + } + + static void InsertIterValue() { + CHECKPOINT("testing insert(iter, value)"); + Container C1 = makeContainer(2); + iterator it1 = C1.begin(); + iterator it1_next = it1; + ++it1_next; + Container C2 = C1; + const value_type value = makeValueType(3); + value_type rvalue = makeValueType(3); + CHECK_DEBUG_THROWS( C2.insert(it1, value) ); // wrong container + CHECK_DEBUG_THROWS( C2.insert(it1, std::move(rvalue)) ); // wrong container + C1.insert(it1_next, value); + if (CT == CT_List) { + C1.insert(it1_next, value); + C1.insert(it1, value); + C1.insert(it1_next, std::move(rvalue)); + C1.insert(it1, std::move(rvalue)); + } else { + CHECK_DEBUG_THROWS( C1.insert(it1_next, value) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.insert(it1, value) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.insert(it1_next, std::move(rvalue)) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.insert(it1, std::move(rvalue)) ); // invalidated iterator + } + } + + static void EmplaceIterValue() { + CHECKPOINT("testing emplace(iter, value)"); + Container C1 = makeContainer(2); + iterator it1 = C1.begin(); + iterator it1_next = it1; + ++it1_next; + Container C2 = C1; + const value_type value = makeValueType(3); + CHECK_DEBUG_THROWS( C2.emplace(it1, value) ); // wrong container + CHECK_DEBUG_THROWS( C2.emplace(it1, makeValueType(4)) ); // wrong container + C1.emplace(it1_next, value); + if (CT == CT_List) { + C1.emplace(it1_next, value); + C1.emplace(it1, value); + } else { + CHECK_DEBUG_THROWS( C1.emplace(it1_next, value) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.emplace(it1, value) ); // invalidated iterator + } + } + + static void InsertIterSizeValue() { + CHECKPOINT("testing insert(iter, size, value)"); + Container C1 = makeContainer(2); + iterator it1 = C1.begin(); + iterator it1_next = it1; + ++it1_next; + Container C2 = C1; + const value_type value = makeValueType(3); + CHECK_DEBUG_THROWS( C2.insert(it1, 1, value) ); // wrong container + C1.insert(it1_next, 2, value); + if (CT == CT_List) { + C1.insert(it1_next, 3, value); + C1.insert(it1, 1, value); + } else { + CHECK_DEBUG_THROWS( C1.insert(it1_next, 1, value) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.insert(it1, 1, value) ); // invalidated iterator + } + } + + static void InsertIterIterIter() { + CHECKPOINT("testing insert(iter, iter, iter)"); + Container C1 = makeContainer(2); + iterator it1 = C1.begin(); + iterator it1_next = it1; + ++it1_next; + Container C2 = C1; + std::vector<value_type> V = { + makeValueType(1), + makeValueType(2), + makeValueType(3) + }; + CHECK_DEBUG_THROWS( C2.insert(it1, V.begin(), V.end()) ); // wrong container + C1.insert(it1_next, V.begin(), V.end()); + if (CT == CT_List) { + C1.insert(it1_next, V.begin(), V.end()); + C1.insert(it1, V.begin(), V.end()); + } else { + CHECK_DEBUG_THROWS( C1.insert(it1_next, V.begin(), V.end()) ); // invalidated iterator + CHECK_DEBUG_THROWS( C1.insert(it1, V.begin(), V.end()) ); // invalidated iterator + } + } +}; + +int main() +{ + using Alloc = test_allocator<int>; + { + SequenceContainerChecks<std::list<int, Alloc>, CT_List>::run(); + SequenceContainerChecks<std::vector<int, Alloc>, CT_Vector>::run(); + } + // FIXME these containers don't support iterator debugging + if ((false)) { + SequenceContainerChecks< + std::vector<bool, test_allocator<bool>>, CT_VectorBool>::run(); + SequenceContainerChecks< + std::forward_list<int, Alloc>, CT_ForwardList>::run(); + SequenceContainerChecks< + std::deque<int, Alloc>, CT_Deque>::run(); + } +} Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/emplace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/emplace.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/emplace.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/emplace.pass.cpp Wed Dec 28 00:06:09 2016 @@ -7,22 +7,20 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <vector> // template <class... Args> iterator emplace(const_iterator pos, Args&&... args); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> + +#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" #include "asan_testing.h" -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES - class A { int i_; @@ -55,11 +53,8 @@ public: double getd() const {return d_;} }; -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES - int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::vector<A> c; std::vector<A>::iterator i = c.emplace(c.cbegin(), 2, 3.5); @@ -114,15 +109,6 @@ int main() assert(c.back().getd() == 4.5); assert(is_contiguous_container_asan_correct(c)); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<A> c1; - std::vector<A> c2; - std::vector<A>::iterator i = c1.emplace(c2.cbegin(), 2, 3.5); - assert(false); - } -#endif -#if TEST_STD_VER >= 11 { std::vector<A, min_allocator<A>> c; std::vector<A, min_allocator<A>>::iterator i = c.emplace(c.cbegin(), 2, 3.5); @@ -147,14 +133,4 @@ int main() assert(c.back().geti() == 3); assert(c.back().getd() == 4.5); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<A, min_allocator<A>> c1; - std::vector<A, min_allocator<A>> c2; - std::vector<A, min_allocator<A>>::iterator i = c1.emplace(c2.cbegin(), 2, 3.5); - assert(false); - } -#endif -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db1.pass.cpp (removed) @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator position) with end() - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <cstdlib> -#include <exception> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int>::const_iterator i = l1.end(); - l1.erase(i); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>>::const_iterator i = l1.end(); - l1.erase(i); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_db2.pass.cpp (removed) @@ -1,53 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator position) with iterator from another container - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <cstdlib> -#include <exception> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int> l2(a1, a1+3); - std::vector<int>::const_iterator i = l2.begin(); - l1.erase(i); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>> l2(a1, a1+3); - std::vector<int, min_allocator<int>>::const_iterator i = l2.begin(); - l1.erase(i); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db1.pass.cpp (removed) @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator first, const_iterator last); with first iterator from another container - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <exception> -#include <cstdlib> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int> l2(a1, a1+3); - std::vector<int>::iterator i = l1.erase(l2.cbegin(), l1.cbegin()+1); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>> l2(a1, a1+3); - std::vector<int, min_allocator<int>>::iterator i = l1.erase(l2.cbegin(), l1.cbegin()+1); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db2.pass.cpp (removed) @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator first, const_iterator last); with second iterator from another container - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <exception> -#include <cstdlib> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int> l2(a1, a1+3); - std::vector<int>::iterator i = l1.erase(l1.cbegin(), l2.cbegin()+1); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>> l2(a1, a1+3); - std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), l2.cbegin()+1); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db3.pass.cpp (removed) @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator first, const_iterator last); with both iterators from another container - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <exception> -#include <cstdlib> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int> l2(a1, a1+3); - std::vector<int>::iterator i = l1.erase(l2.cbegin(), l2.cbegin()+1); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>> l2(a1, a1+3); - std::vector<int, min_allocator<int>>::iterator i = l1.erase(l2.cbegin(), l2.cbegin()+1); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/erase_iter_iter_db4.pass.cpp (removed) @@ -1,49 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// Call erase(const_iterator first, const_iterator last); with a bad range - -#if _LIBCPP_DEBUG >= 1 - -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) - -#include <vector> -#include <cassert> -#include <exception> -#include <cstdlib> - -#include "min_allocator.h" - -int main() -{ - { - int a1[] = {1, 2, 3}; - std::vector<int> l1(a1, a1+3); - std::vector<int>::iterator i = l1.erase(l1.cbegin()+1, l1.cbegin()); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 2, 3}; - std::vector<int, min_allocator<int>> l1(a1, a1+3); - std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin()+1, l1.cbegin()); - assert(false); - } -#endif -} - -#else - -int main() -{ -} - -#endif Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_iter_iter.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_iter_iter.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_iter_iter.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_iter_iter.pass.cpp Wed Dec 28 00:06:09 2016 @@ -12,13 +12,10 @@ // template <class Iter> // iterator insert(const_iterator position, Iter first, Iter last); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> #include <cstddef> + #include "test_macros.h" #include "test_allocator.h" #include "test_iterators.h" @@ -131,17 +128,6 @@ int main() for (; j < 105; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int> v(100); - std::vector<int> v2(100); - int a[] = {1, 2, 3, 4, 5}; - const int N = sizeof(a)/sizeof(a[0]); - std::vector<int>::iterator i = v.insert(v2.cbegin() + 10, input_iterator<const int*>(a), - input_iterator<const int*>(a+N)); - assert(false); - } -#endif #if TEST_STD_VER >= 11 { std::vector<int, min_allocator<int>> v(100); @@ -177,16 +163,5 @@ int main() for (; j < 105; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int, min_allocator<int>> v(100); - std::vector<int, min_allocator<int>> v2(100); - int a[] = {1, 2, 3, 4, 5}; - const int N = sizeof(a)/sizeof(a[0]); - std::vector<int, min_allocator<int>>::iterator i = v.insert(v2.cbegin() + 10, input_iterator<const int*>(a), - input_iterator<const int*>(a+N)); - assert(false); - } -#endif #endif } Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_rvalue.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_rvalue.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_rvalue.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_rvalue.pass.cpp Wed Dec 28 00:06:09 2016 @@ -7,16 +7,16 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03 + // <vector> // iterator insert(const_iterator position, value_type&& x); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> + +#include "test_macros.h" #include "test_allocator.h" #include "MoveOnly.h" #include "min_allocator.h" @@ -24,7 +24,6 @@ int main() { -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::vector<MoveOnly> v(100); std::vector<MoveOnly>::iterator i = v.insert(v.cbegin() + 10, MoveOnly(3)); @@ -51,15 +50,6 @@ int main() for (++j; j < 101; ++j) assert(v[j] == MoveOnly()); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int> v1(3); - std::vector<int> v2(3); - v1.insert(v2.begin(), 4); - assert(false); - } -#endif -#if TEST_STD_VER >= 11 { std::vector<MoveOnly, min_allocator<MoveOnly>> v(100); std::vector<MoveOnly, min_allocator<MoveOnly>>::iterator i = v.insert(v.cbegin() + 10, MoveOnly(3)); @@ -73,14 +63,4 @@ int main() for (++j; j < 101; ++j) assert(v[j] == MoveOnly()); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int, min_allocator<int>> v1(3); - std::vector<int, min_allocator<int>> v2(3); - v1.insert(v2.begin(), 4); - assert(false); - } -#endif -#endif -#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES } Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp Wed Dec 28 00:06:09 2016 @@ -11,13 +11,11 @@ // iterator insert(const_iterator position, size_type n, const value_type& x); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> #include <cstddef> + +#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" #include "asan_testing.h" @@ -84,14 +82,6 @@ int main() for (++j; j < 105; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int> c1(100); - std::vector<int> c2; - std::vector<int>::iterator i = c1.insert(c2.cbegin() + 10, 5, 1); - assert(false); - } -#endif #if TEST_STD_VER >= 11 { std::vector<int, min_allocator<int>> v(100); @@ -121,13 +111,5 @@ int main() for (++j; j < 105; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int, min_allocator<int>> c1(100); - std::vector<int, min_allocator<int>> c2; - std::vector<int, min_allocator<int>>::iterator i = c1.insert(c2.cbegin() + 10, 5, 1); - assert(false); - } -#endif #endif } Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_value.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_value.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_value.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/insert_iter_value.pass.cpp Wed Dec 28 00:06:09 2016 @@ -11,13 +11,11 @@ // iterator insert(const_iterator position, const value_type& x); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> #include <cstddef> + +#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" #include "asan_testing.h" @@ -81,15 +79,6 @@ int main() for (++j; j < 101; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int> v1(3); - std::vector<int> v2(3); - int i = 4; - v1.insert(v2.begin(), i); - assert(false); - } -#endif #if TEST_STD_VER >= 11 { std::vector<int, min_allocator<int>> v(100); @@ -104,14 +93,5 @@ int main() for (++j; j < 101; ++j) assert(v[j] == 0); } -#if _LIBCPP_DEBUG >= 1 - { - std::vector<int, min_allocator<int>> v1(3); - std::vector<int, min_allocator<int>> v2(3); - int i = 4; - v1.insert(v2.begin(), i); - assert(false); - } -#endif #endif } Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/pop_back.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/pop_back.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/pop_back.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/pop_back.pass.cpp Wed Dec 28 00:06:09 2016 @@ -11,20 +11,13 @@ // void pop_back(); -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - #include <vector> #include <cassert> + +#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" -#if _LIBCPP_DEBUG >= 1 -#include <cstdlib> -#include <exception> - -#endif int main() { @@ -34,10 +27,7 @@ int main() assert(c.size() == 1); c.pop_back(); assert(c.size() == 0); -#if _LIBCPP_DEBUG >= 1 - c.pop_back(); - assert(false); -#endif + } #if TEST_STD_VER >= 11 { @@ -46,10 +36,6 @@ int main() assert(c.size() == 1); c.pop_back(); assert(c.size() == 0); -#if _LIBCPP_DEBUG >= 1 - c.pop_back(); - assert(false); -#endif } #endif } Removed: libcxx/trunk/test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp?rev=290656&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.special/db_swap_1.pass.cpp (removed) @@ -1,56 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <vector> - -// template <class T, class Alloc> -// void swap(vector<T,Alloc>& x, vector<T,Alloc>& y); - -#if _LIBCPP_DEBUG >= 1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#endif - -#include <vector> -#include <cassert> - -#include "min_allocator.h" - -int main() -{ -#if _LIBCPP_DEBUG >= 1 - { - int a1[] = {1, 3, 7, 9, 10}; - int a2[] = {0, 2, 4, 5, 6, 8, 11}; - std::vector<int> c1(a1, a1+sizeof(a1)/sizeof(a1[0])); - std::vector<int> c2(a2, a2+sizeof(a2)/sizeof(a2[0])); - std::vector<int>::iterator i1 = c1.begin(); - std::vector<int>::iterator i2 = c2.begin(); - swap(c1, c2); - c1.erase(i2); - c2.erase(i1); - c1.erase(i1); - assert(false); - } -#if TEST_STD_VER >= 11 - { - int a1[] = {1, 3, 7, 9, 10}; - int a2[] = {0, 2, 4, 5, 6, 8, 11}; - std::vector<int, min_allocator<int>> c1(a1, a1+sizeof(a1)/sizeof(a1[0])); - std::vector<int, min_allocator<int>> c2(a2, a2+sizeof(a2)/sizeof(a2[0])); - std::vector<int, min_allocator<int>>::iterator i1 = c1.begin(); - std::vector<int, min_allocator<int>>::iterator i2 = c2.begin(); - swap(c1, c2); - c1.erase(i2); - c2.erase(i1); - c1.erase(i1); - assert(false); - } -#endif -#endif -} Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp?rev=290657&r1=290656&r2=290657&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp Wed Dec 28 00:06:09 2016 @@ -162,8 +162,6 @@ int main() assert(is_contiguous_container_asan_correct(c1)); assert(is_contiguous_container_asan_correct(c2)); } -#ifndef _LIBCPP_DEBUG_LEVEL -// This test known to result in undefined behavior detected by _LIBCPP_DEBUG_LEVEL >= 1 { int a1[] = {1, 3, 7, 9, 10}; int a2[] = {0, 2, 4, 5, 6, 8, 11}; @@ -181,5 +179,4 @@ int main() assert(is_contiguous_container_asan_correct(c2)); } #endif -#endif } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits