From 90aabc7e9be942324952d8705e753ff02cf631a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fran=C3=A7ois=20Dumont?= Date: Tue, 8 May 2018 19:46:59 +0000 Subject: [PATCH] macros.h (__glibcxx_check_valid_range_at): New. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2018-05-08 François Dumont * include/debug/macros.h (__glibcxx_check_valid_range_at): New. * include/debug/functions.h (__check_valid_range): Use latter. * include/debug/macros.h (__glibcxx_check_valid_constructor_range): New, use latter. * include/debug/deque (deque::deque<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter. * include/debug/forward_list (forward_list::forward_list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/list (list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/list (list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/map.h (map::map<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (map::map<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): Likewise. * include/debug/multimap.h (multimap::multimap<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (multimap::multimap<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): Likewise. * include/debug/set.h (set::set<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (set::set<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): Likewise. * include/debug/multiset.h (multiset::multiset<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (multiset::multiset<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): Likewise. * include/debug/string (basic_string::basic_string<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/unordered_map (unordered_map::unordered_map<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (unordered_multimap::unordered_multimap<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/unordered_set (unordered_set::unordered_set<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. (unordered_multiset::unordered_multiset<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. * include/debug/vector (vector::vector<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter. From-SVN: r260053 --- libstdc++-v3/ChangeLog | 45 ++++++++++++++++++++++++ libstdc++-v3/include/debug/deque | 4 +-- libstdc++-v3/include/debug/forward_list | 4 +-- libstdc++-v3/include/debug/functions.h | 9 +++-- libstdc++-v3/include/debug/list | 4 +-- libstdc++-v3/include/debug/macros.h | 11 ++++++ libstdc++-v3/include/debug/map.h | 8 ++--- libstdc++-v3/include/debug/multimap.h | 8 ++--- libstdc++-v3/include/debug/multiset.h | 8 ++--- libstdc++-v3/include/debug/set.h | 8 ++--- libstdc++-v3/include/debug/string | 4 +-- libstdc++-v3/include/debug/unordered_map | 8 ++--- libstdc++-v3/include/debug/unordered_set | 8 ++--- libstdc++-v3/include/debug/vector | 4 +-- 14 files changed, 96 insertions(+), 37 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 87bd39c9341..bf1e80333be 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,50 @@ 2018-05-08 François Dumont + * include/debug/macros.h (__glibcxx_check_valid_range_at): New. + * include/debug/functions.h (__check_valid_range): Use latter. + * include/debug/macros.h (__glibcxx_check_valid_constructor_range): New, + use latter. + * include/debug/deque + (deque::deque<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter. + * include/debug/forward_list + (forward_list::forward_list<_Iter>(_Iter, _Iter, const _Alloc&)): + Likewise. + * include/debug/list + (list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + * include/debug/list + (list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + * include/debug/map.h + (map::map<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + (map::map<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): + Likewise. + * include/debug/multimap.h + (multimap::multimap<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + (multimap::multimap<_Iter>(_Iter, _Iter, const _Compare&, + const _Alloc&)): Likewise. + * include/debug/set.h + (set::set<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + (set::set<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)): + Likewise. + * include/debug/multiset.h + (multiset::multiset<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise. + (multiset::multiset<_Iter>(_Iter, _Iter, const _Compare&, + const _Alloc&)): Likewise. + * include/debug/string + (basic_string::basic_string<_Iter>(_Iter, _Iter, const _Alloc&)): + Likewise. + * include/debug/unordered_map + (unordered_map::unordered_map<_Iter>(_Iter, _Iter, const _Alloc&)): + Likewise. + (unordered_multimap::unordered_multimap<_Iter>(_Iter, _Iter, + const _Alloc&)): Likewise. + * include/debug/unordered_set + (unordered_set::unordered_set<_Iter>(_Iter, _Iter, const _Alloc&)): + Likewise. + (unordered_multiset::unordered_multiset<_Iter>(_Iter, _Iter, + const _Alloc&)): Likewise. + * include/debug/vector + (vector::vector<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter. + * include/debug/formatter.h (_Error_formatter::_M_function): New. (_Error_formatter(const char*, unsigned int)): Adapt. (_Error_formatter::_M_at): Rename in... diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque index 90110e7d7de..93b82cf0cdc 100644 --- a/libstdc++-v3/include/debug/deque +++ b/libstdc++-v3/include/debug/deque @@ -130,8 +130,8 @@ namespace __debug #endif deque(_InputIterator __first, _InputIterator __last, const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list index d45494851c6..633af1a90e7 100644 --- a/libstdc++-v3/include/debug/forward_list +++ b/libstdc++-v3/include/debug/forward_list @@ -241,8 +241,8 @@ namespace __debug typename = std::_RequireInputIter<_InputIterator>> forward_list(_InputIterator __first, _InputIterator __last, const allocator_type& __al = allocator_type()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __al) { } diff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h index 57cc6826ce0..3a2ba74fbbe 100644 --- a/libstdc++-v3/include/debug/functions.h +++ b/libstdc++-v3/include/debug/functions.h @@ -87,10 +87,13 @@ namespace __gnu_debug template inline _InputIterator __check_valid_range(const _InputIterator& __first, - const _InputIterator& __last - __attribute__((__unused__))) + const _InputIterator& __last, + const char* __file, + unsigned int __line, + const char* __function) { - __glibcxx_check_valid_range(__first, __last); + __glibcxx_check_valid_range_at(__first, __last, + __file, __line, __function); return __first; } diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list index 13a7486fff4..e37ebf1a3eb 100644 --- a/libstdc++-v3/include/debug/list +++ b/libstdc++-v3/include/debug/list @@ -131,8 +131,8 @@ namespace __debug #endif list(_InputIterator __first, _InputIterator __last, const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } diff --git a/libstdc++-v3/include/debug/macros.h b/libstdc++-v3/include/debug/macros.h index 6f901bc0031..824d399941c 100644 --- a/libstdc++-v3/include/debug/macros.h +++ b/libstdc++-v3/include/debug/macros.h @@ -60,12 +60,23 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \ ._M_iterator(_First, #_First) \ ._M_iterator(_Last, #_Last)) +#define __glibcxx_check_valid_range_at(_First,_Last,_File,_Line,_Func) \ +_GLIBCXX_DEBUG_VERIFY_AT_F(__gnu_debug::__valid_range(_First, _Last), \ + _M_message(__gnu_debug::__msg_valid_range) \ + ._M_iterator(_First, #_First) \ + ._M_iterator(_Last, #_Last), \ + _File,_Line,_Func) + #define __glibcxx_check_valid_range2(_First,_Last,_Dist) \ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last, _Dist), \ _M_message(__gnu_debug::__msg_valid_range) \ ._M_iterator(_First, #_First) \ ._M_iterator(_Last, #_Last)) +#define __glibcxx_check_valid_constructor_range(_First,_Last) \ + __gnu_debug::__check_valid_range(_First, _Last, \ + __FILE__, __LINE__, __PRETTY_FUNCTION__) + // Verify that [_First, _Last) forms a non-empty iterator range. #define __glibcxx_check_non_empty_range(_First,_Last) \ _GLIBCXX_DEBUG_VERIFY(_First != _Last, \ diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index 414b4dc0752..3f0649aef9e 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -114,8 +114,8 @@ namespace __debug template map(_InputIterator __first, _InputIterator __last, const allocator_type& __a) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } @@ -133,8 +133,8 @@ namespace __debug map(_InputIterator __first, _InputIterator __last, const _Compare& __comp = _Compare(), const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __comp, __a) { } diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h index 8d6358b3030..e709eb7452f 100644 --- a/libstdc++-v3/include/debug/multimap.h +++ b/libstdc++-v3/include/debug/multimap.h @@ -114,8 +114,8 @@ namespace __debug template multimap(_InputIterator __first, _InputIterator __last, const allocator_type& __a) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } ~multimap() = default; @@ -129,8 +129,8 @@ namespace __debug multimap(_InputIterator __first, _InputIterator __last, const _Compare& __comp = _Compare(), const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __comp, __a) { } diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h index 4e1406e93c2..461f4f632dd 100644 --- a/libstdc++-v3/include/debug/multiset.h +++ b/libstdc++-v3/include/debug/multiset.h @@ -114,8 +114,8 @@ namespace __debug template multiset(_InputIterator __first, _InputIterator __last, const allocator_type& __a) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } ~multiset() = default; @@ -129,8 +129,8 @@ namespace __debug multiset(_InputIterator __first, _InputIterator __last, const _Compare& __comp = _Compare(), const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __comp, __a) { } diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h index a886860ceab..2ac8f1c1fab 100644 --- a/libstdc++-v3/include/debug/set.h +++ b/libstdc++-v3/include/debug/set.h @@ -113,8 +113,8 @@ namespace __debug template set(_InputIterator __first, _InputIterator __last, const allocator_type& __a) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } ~set() = default; @@ -128,8 +128,8 @@ namespace __debug set(_InputIterator __first, _InputIterator __last, const _Compare& __comp = _Compare(), const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __comp, __a) { } diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string index 2b3677b3f7e..0aa5e9cf825 100644 --- a/libstdc++-v3/include/debug/string +++ b/libstdc++-v3/include/debug/string @@ -138,8 +138,8 @@ template, template basic_string(_InputIterator __begin, _InputIterator __end, const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__begin, - __end)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__begin, __end)), __gnu_debug::__base(__end), __a) { } #if __cplusplus < 201103L diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 687a46ca50d..e4f7c5ca733 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -99,8 +99,8 @@ namespace __debug const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __n, __hf, __eql, __a) { } @@ -785,8 +785,8 @@ namespace __debug const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __n, __hf, __eql, __a) { } diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set index 9b2ac9d69a3..adafdb73a4f 100644 --- a/libstdc++-v3/include/debug/unordered_set +++ b/libstdc++-v3/include/debug/unordered_set @@ -99,8 +99,8 @@ namespace __debug const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __n, __hf, __eql, __a) { } @@ -662,8 +662,8 @@ namespace __debug const hasher& __hf = hasher(), const key_equal& __eql = key_equal(), const allocator_type& __a = allocator_type()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __n, __hf, __eql, __a) { } diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index 52892653728..8d60da328e1 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -182,8 +182,8 @@ namespace __debug #endif vector(_InputIterator __first, _InputIterator __last, const _Allocator& __a = _Allocator()) - : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first, - __last)), + : _Base(__gnu_debug::__base( + __glibcxx_check_valid_constructor_range(__first, __last)), __gnu_debug::__base(__last), __a) { } #if __cplusplus < 201103L -- 2.30.2