Author: marshall Date: Wed Nov 25 19:24:04 2015 New Revision: 254119 URL: http://llvm.org/viewvc/llvm-project?rev=254119&view=rev Log: Add static_assert to set/multiset/map/multimap/forward_list/deque that the allocator's value_type match the container's value_type. vector/unordered/list/string already do this. Add tests for all the containers to verify this.
Added: libcxx/trunk/test/std/containers/associative/map/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/associative/multimap/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/associative/multiset/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/associative/set/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/sequences/deque/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/sequences/forwardlist/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/sequences/list/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/sequences/vector/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/unord/unord.map/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/unord/unord.multimap/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/unord/unord.multiset/allocator_mismatch.fail.cpp libcxx/trunk/test/std/containers/unord/unord.set/allocator_mismatch.fail.cpp libcxx/trunk/test/std/strings/basic.string/allocator_mismatch.fail.cpp Modified: libcxx/trunk/include/deque libcxx/trunk/include/forward_list libcxx/trunk/include/map libcxx/trunk/include/set Modified: libcxx/trunk/include/deque URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/deque?rev=254119&r1=254118&r2=254119&view=diff ============================================================================== --- libcxx/trunk/include/deque (original) +++ libcxx/trunk/include/deque Wed Nov 25 19:24:04 2015 @@ -1196,6 +1196,9 @@ public: typedef _Tp value_type; typedef _Allocator allocator_type; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + typedef __deque_base<value_type, allocator_type> __base; typedef typename __base::__alloc_traits __alloc_traits; Modified: libcxx/trunk/include/forward_list URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/forward_list?rev=254119&r1=254118&r2=254119&view=diff ============================================================================== --- libcxx/trunk/include/forward_list (original) +++ libcxx/trunk/include/forward_list Wed Nov 25 19:24:04 2015 @@ -537,6 +537,9 @@ public: typedef _Tp value_type; typedef _Alloc allocator_type; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + typedef value_type& reference; typedef const value_type& const_reference; typedef typename allocator_traits<allocator_type>::pointer pointer; Modified: libcxx/trunk/include/map URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/map?rev=254119&r1=254118&r2=254119&view=diff ============================================================================== --- libcxx/trunk/include/map (original) +++ libcxx/trunk/include/map Wed Nov 25 19:24:04 2015 @@ -840,6 +840,9 @@ public: typedef value_type& reference; typedef const value_type& const_reference; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + class _LIBCPP_TYPE_VIS_ONLY value_compare : public binary_function<value_type, value_type, bool> { @@ -1696,6 +1699,9 @@ public: typedef value_type& reference; typedef const value_type& const_reference; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + class _LIBCPP_TYPE_VIS_ONLY value_compare : public binary_function<value_type, value_type, bool> { Modified: libcxx/trunk/include/set URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/set?rev=254119&r1=254118&r2=254119&view=diff ============================================================================== --- libcxx/trunk/include/set (original) +++ libcxx/trunk/include/set Wed Nov 25 19:24:04 2015 @@ -409,6 +409,9 @@ public: typedef value_type& reference; typedef const value_type& const_reference; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + private: typedef __tree<value_type, value_compare, allocator_type> __base; typedef allocator_traits<allocator_type> __alloc_traits; @@ -819,6 +822,9 @@ public: typedef value_type& reference; typedef const value_type& const_reference; + static_assert((is_same<typename allocator_type::value_type, value_type>::value), + "Allocator::value_type must be same type as value_type"); + private: typedef __tree<value_type, value_compare, allocator_type> __base; typedef allocator_traits<allocator_type> __alloc_traits; Added: libcxx/trunk/test/std/containers/associative/map/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/map/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/associative/map/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/associative/map/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <map> +// The container's value type must be the same as the allocator's value type + +#include <map> + +int main() +{ + std::map<int, int, std::less<int>, std::allocator<long> > m; +} Added: libcxx/trunk/test/std/containers/associative/multimap/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multimap/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/associative/multimap/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/associative/multimap/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <map> +// The container's value type must be the same as the allocator's value type + +#include <map> + +int main() +{ + std::multimap<int, int, std::less<int>, std::allocator<long> > m; +} Added: libcxx/trunk/test/std/containers/associative/multiset/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multiset/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/associative/multiset/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/associative/multiset/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <set> +// The container's value type must be the same as the allocator's value type + +#include <set> + +int main() +{ + std::multiset<int, std::less<int>, std::allocator<long> > ms; +} Added: libcxx/trunk/test/std/containers/associative/set/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/set/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/associative/set/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/associative/set/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <set> +// The container's value type must be the same as the allocator's value type + +#include <set> + +int main() +{ + std::set<int, std::less<int>, std::allocator<long> > s; +} Added: libcxx/trunk/test/std/containers/sequences/deque/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/deque/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/deque/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/sequences/deque/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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> +// The container's value type must be the same as the allocator's value type + +#include <deque> + +int main() +{ + std::deque<int, std::allocator<long> > d; +} Added: libcxx/trunk/test/std/containers/sequences/forwardlist/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/forwardlist/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/forwardlist/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/sequences/forwardlist/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <forward_list> +// The container's value type must be the same as the allocator's value type + +#include <forward_list> + +int main() +{ + std::forward_list<int, std::allocator<long> > fl; +} Added: libcxx/trunk/test/std/containers/sequences/list/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/list/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/sequences/list/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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> +// The container's value type must be the same as the allocator's value type + +#include <list> + +int main() +{ + std::list<int, std::allocator<long> > l; +} Added: libcxx/trunk/test/std/containers/sequences/vector/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/sequences/vector/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/sequences/vector/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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> +// The container's value type must be the same as the allocator's value type + +#include <vector> + +int main() +{ + std::vector<int, std::allocator<long> > v; +} Added: libcxx/trunk/test/std/containers/unord/unord.map/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.map/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.map/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/unord/unord.map/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <unordered_map> +// The container's value type must be the same as the allocator's value type + +#include <unordered_map> + +int main() +{ + std::unordered_map<int, int, std::hash<int>, std::less<int>, std::allocator<long> > m; +} Added: libcxx/trunk/test/std/containers/unord/unord.multimap/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multimap/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.multimap/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/unord/unord.multimap/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <unordered_map> +// The container's value type must be the same as the allocator's value type + +#include <unordered_map> + +int main() +{ + std::unordered_multimap<int, int, std::hash<int>, std::less<int>, std::allocator<long> > m; +} Added: libcxx/trunk/test/std/containers/unord/unord.multiset/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multiset/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.multiset/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/unord/unord.multiset/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <unordered_set> +// The container's value type must be the same as the allocator's value type + +#include <unordered_set> + +int main() +{ + std::unordered_multiset<int, std::hash<int>, std::less<int>, std::allocator<long> > v; +} Added: libcxx/trunk/test/std/containers/unord/unord.set/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.set/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/containers/unord/unord.set/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/containers/unord/unord.set/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <unordered_set> +// The container's value type must be the same as the allocator's value type + +#include <unordered_set> + +int main() +{ + std::unordered_set<int, std::hash<int>, std::less<int>, std::allocator<long> > v; +} Added: libcxx/trunk/test/std/strings/basic.string/allocator_mismatch.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/strings/basic.string/allocator_mismatch.fail.cpp?rev=254119&view=auto ============================================================================== --- libcxx/trunk/test/std/strings/basic.string/allocator_mismatch.fail.cpp (added) +++ libcxx/trunk/test/std/strings/basic.string/allocator_mismatch.fail.cpp Wed Nov 25 19:24:04 2015 @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <string> +// The container's value type must be the same as the allocator's value type + +#include <string> + +int main() +{ + std::basic_string<char, std::char_traits<char>, std::allocator<int> > s; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits