Author: marshall Date: Tue Aug 21 21:28:43 2018 New Revision: 340385 URL: http://llvm.org/viewvc/llvm-project?rev=340385&view=rev Log: Fix Bug 38644: multimap::clear() missing exception specifier. Add noexcept tests for all the containers that have clear().
Added: libcxx/trunk/test/std/containers/sequences/deque/deque.modifiers/clear.pass.cpp Modified: libcxx/trunk/include/map libcxx/trunk/test/std/containers/associative/map/map.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/associative/multimap/multimap.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/associative/multiset/clear.pass.cpp libcxx/trunk/test/std/containers/associative/set/clear.pass.cpp libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/sequences/list/list.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/unord/unord.map/unord.map.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/clear.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multiset/clear.pass.cpp libcxx/trunk/test/std/containers/unord/unord.set/clear.pass.cpp Modified: libcxx/trunk/include/map URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/map?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/include/map (original) +++ libcxx/trunk/include/map Tue Aug 21 21:28:43 2018 @@ -1884,7 +1884,7 @@ public: #endif _LIBCPP_INLINE_VISIBILITY - void clear() {__tree_.clear();} + void clear() _NOEXCEPT {__tree_.clear();} _LIBCPP_INLINE_VISIBILITY void swap(multimap& __m) Modified: libcxx/trunk/test/std/containers/associative/map/map.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/map/map.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/associative/map/map.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/map/map.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -11,11 +11,12 @@ // class map -// void clear(); +// void clear() noexcept; #include <map> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } @@ -56,6 +58,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } Modified: libcxx/trunk/test/std/containers/associative/multimap/multimap.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multimap/multimap.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/associative/multimap/multimap.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/multimap/multimap.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -11,11 +11,12 @@ // class multimap -// void clear(); +// void clear() noexcept; #include <map> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } @@ -56,6 +58,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } Modified: libcxx/trunk/test/std/containers/associative/multiset/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multiset/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/associative/multiset/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/multiset/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -11,11 +11,12 @@ // class multiset -// void clear(); +// void clear() noexcept; #include <set> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } @@ -56,6 +58,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } Modified: libcxx/trunk/test/std/containers/associative/set/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/set/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/associative/set/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/set/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -11,11 +11,12 @@ // class set -// void clear(); +// void clear() noexcept; #include <set> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } @@ -56,6 +58,7 @@ int main() }; M m(ar, ar + sizeof(ar)/sizeof(ar[0])); assert(m.size() == 8); + ASSERT_NOEXCEPT(m.clear()); m.clear(); assert(m.size() == 0); } Added: libcxx/trunk/test/std/containers/sequences/deque/deque.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/deque/deque.modifiers/clear.pass.cpp?rev=340385&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/deque/deque.modifiers/clear.pass.cpp (added) +++ libcxx/trunk/test/std/containers/sequences/deque/deque.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -0,0 +1,67 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <deque> + +// void clear() noexcept; + +#include <deque> +#include <cassert> + +#include "test_macros.h" +#include "../../../NotConstructible.h" +#include "min_allocator.h" + +int main() +{ + { + typedef NotConstructible T; + typedef std::deque<T> C; + C c; + ASSERT_NOEXCEPT(c.clear()); + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + } + { + typedef int T; + typedef std::deque<T> C; + const T t[] = {0, 1, 2, 3, 4}; + C c(std::begin(t), std::end(t)); + + ASSERT_NOEXCEPT(c.clear()); + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + } +#if TEST_STD_VER >= 11 + { + typedef NotConstructible T; + typedef std::deque<T, min_allocator<T>> C; + C c; + ASSERT_NOEXCEPT(c.clear()); + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + } + { + typedef int T; + typedef std::deque<T, min_allocator<T>> C; + const T t[] = {0, 1, 2, 3, 4}; + C c(std::begin(t), std::end(t)); + + ASSERT_NOEXCEPT(c.clear()); + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + + c.clear(); + assert(distance(c.begin(), c.end()) == 0); + } +#endif +} Modified: libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -9,11 +9,12 @@ // <forward_list> -// void clear(); +// void clear() noexcept; #include <forward_list> #include <cassert> +#include "test_macros.h" #include "../../../NotConstructible.h" #include "min_allocator.h" @@ -23,6 +24,7 @@ int main() typedef NotConstructible T; typedef std::forward_list<T> C; C c; + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(distance(c.begin(), c.end()) == 0); } @@ -32,6 +34,7 @@ int main() const T t[] = {0, 1, 2, 3, 4}; C c(std::begin(t), std::end(t)); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(distance(c.begin(), c.end()) == 0); @@ -43,6 +46,7 @@ int main() typedef NotConstructible T; typedef std::forward_list<T, min_allocator<T>> C; C c; + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(distance(c.begin(), c.end()) == 0); } @@ -52,6 +56,7 @@ int main() const T t[] = {0, 1, 2, 3, 4}; C c(std::begin(t), std::end(t)); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(distance(c.begin(), c.end()) == 0); Modified: libcxx/trunk/test/std/containers/sequences/list/list.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/list.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/list/list.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/list/list.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -9,11 +9,12 @@ // <list> -// void clear(); +// void clear() noexcept; #include <list> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -21,6 +22,7 @@ int main() { int a[] = {1, 2, 3}; std::list<int> c(a, a+3); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.empty()); } @@ -28,6 +30,7 @@ int main() { int a[] = {1, 2, 3}; std::list<int, min_allocator<int>> c(a, a+3); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.empty()); } Modified: libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/vector/vector.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -9,11 +9,12 @@ // <vector> -// void clear(); +// void clear() noexcept; #include <vector> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" #include "asan_testing.h" @@ -22,6 +23,7 @@ int main() { int a[] = {1, 2, 3}; std::vector<int> c(a, a+3); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.empty()); LIBCPP_ASSERT(c.__invariants()); @@ -31,6 +33,7 @@ int main() { int a[] = {1, 2, 3}; std::vector<int, min_allocator<int>> c(a, a+3); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.empty()); LIBCPP_ASSERT(c.__invariants()); Modified: libcxx/trunk/test/std/containers/unord/unord.map/unord.map.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.map/unord.map.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.map/unord.map.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/unord/unord.map/unord.map.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -13,12 +13,13 @@ // class Alloc = allocator<pair<const Key, T>>> // class unordered_map -// void clear() +// void clear() noexcept; #include <unordered_map> #include <string> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() P(2, "four"), }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } @@ -54,6 +56,7 @@ int main() P(2, "four"), }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } Modified: libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -13,12 +13,13 @@ // class Alloc = allocator<pair<const Key, T>>> // class unordered_multimap -// void clear() +// void clear() noexcept; #include <unordered_map> #include <string> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -36,6 +37,7 @@ int main() P(2, "four"), }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } @@ -54,6 +56,7 @@ int main() P(2, "four"), }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } Modified: libcxx/trunk/test/std/containers/unord/unord.multiset/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multiset/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.multiset/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/unord/unord.multiset/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -13,11 +13,12 @@ // class Alloc = allocator<Value>> // class unordered_multiset -// void clear() +// void clear() noexcept; #include <unordered_set> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -35,6 +36,7 @@ int main() P(2) }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } @@ -53,6 +55,7 @@ int main() P(2) }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } Modified: libcxx/trunk/test/std/containers/unord/unord.set/clear.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.set/clear.pass.cpp?rev=340385&r1=340384&r2=340385&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.set/clear.pass.cpp (original) +++ libcxx/trunk/test/std/containers/unord/unord.set/clear.pass.cpp Tue Aug 21 21:28:43 2018 @@ -13,11 +13,12 @@ // class Alloc = allocator<Value>> // class unordered_set -// void clear() +// void clear() noexcept; #include <unordered_set> #include <cassert> +#include "test_macros.h" #include "min_allocator.h" int main() @@ -35,6 +36,7 @@ int main() P(2) }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } @@ -52,6 +54,7 @@ int main() P(2) }; C c(a, a + sizeof(a)/sizeof(a[0])); + ASSERT_NOEXCEPT(c.clear()); c.clear(); assert(c.size() == 0); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits