From e33dae0cb3bb8485eb992f917390f520ef27ec25 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Fri, 8 Oct 2021 16:03:19 -0700 Subject: [PATCH 1/2] Clearing the way for LLVM 13 Clang 13 has new warnings to silence: * `-Wdeprecated-copy`: Warns when implicit generation of a copy constructor (respectively copy assignment operator) is deprecated due to the presence of a user-defined copy assignment operator (resp. copy constructor). * `-Wunused-but-set-variable`: Warns when a variable is only ever assigned to. (This presumably ignores class types, or at least classes with non-trivial destructors.) These changes make us nearly Clang 13-clean. There are also three known-failing libcxx tests that pass with Clang 13 since it no longer emits some false positive `-Wdangling` warnings. --- stl/inc/iomanip | 6 ----- stl/inc/regex | 4 ---- stl/inc/vector | 22 ++++++++++++++----- stl/inc/xstring | 9 ++++++-- .../Dev10_561430_list_and_tree_leaks/test.cpp | 8 ++++--- .../test.cpp | 1 + .../test.compile.pass.cpp | 2 ++ tests/tr1/tests/functional/test.cpp | 1 + tests/tr1/tests/memory3/test.cpp | 1 + tests/tr1/tests/string1/test.cpp | 1 + 10 files changed, 35 insertions(+), 20 deletions(-) diff --git a/stl/inc/iomanip b/stl/inc/iomanip index 47b44fce3d0..2eb8bee82c6 100644 --- a/stl/inc/iomanip +++ b/stl/inc/iomanip @@ -57,8 +57,6 @@ struct _Monobj { // store reference to monetary amount _Money& _Val; // the monetary amount reference bool _Intl; // international flag - - _Monobj& operator=(const _Monobj&) = delete; }; template @@ -195,8 +193,6 @@ struct _Quote_in { // store reference to string _Mystr& _Str; // reference to string _Elem _Delim; // delimiter element _Elem _Escape; // escape element - - _Quote_in& operator=(const _Quote_in&) = delete; }; template @@ -208,8 +204,6 @@ struct _Quote_out { // store pointer/length for string _Sizet _Size; // length of string _Elem _Delim; // delimiter element _Elem _Escape; // escape element - - _Quote_out& operator=(const _Quote_out&) = delete; }; template diff --git a/stl/inc/regex b/stl/inc/regex index 61d7a4d8681..07e953f9550 100644 --- a/stl/inc/regex +++ b/stl/inc/regex @@ -201,8 +201,6 @@ struct _Cmp_icase { // functor to compare for case-insensitive equality } const _RxTraits& _Traits; - - _Cmp_icase& operator=(const _Cmp_icase&) = delete; }; template @@ -216,8 +214,6 @@ struct _Cmp_collate { // functor to compare for locale-specific equality } const _RxTraits& _Traits; - - _Cmp_collate& operator=(const _Cmp_collate&) = delete; }; struct _Regex_traits_base { // base of all regular expression traits diff --git a/stl/inc/vector b/stl/inc/vector index d300d12e32f..489799851a7 100644 --- a/stl/inc/vector +++ b/stl/inc/vector @@ -42,8 +42,10 @@ public: this->_Adopt(_Pvector); } - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _Vector_const_iterator(const _Vector_const_iterator&) noexcept = default; _CONSTEXPR20 _Vector_const_iterator& operator=(const _Vector_const_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _NODISCARD _CONSTEXPR20 reference operator*() const noexcept { #if _ITERATOR_DEBUG_LEVEL != 0 @@ -261,8 +263,11 @@ public: using _Mybase::_Mybase; - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _Vector_iterator() noexcept = default; + _CONSTEXPR20 _Vector_iterator(const _Vector_iterator&) noexcept = default; _CONSTEXPR20 _Vector_iterator& operator=(const _Vector_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _NODISCARD _CONSTEXPR20 reference operator*() const noexcept { return const_cast(_Mybase::operator*()); @@ -1944,8 +1949,10 @@ public: this->_Adopt(_Mypvbool); } - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _Vb_iter_base(const _Vb_iter_base&) noexcept = default; _CONSTEXPR20 _Vb_iter_base& operator=(const _Vb_iter_base&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _CONSTEXPR20 void _Advance(_Size_type _Off) noexcept { _Myoff += _Off; @@ -2047,8 +2054,10 @@ public: _CONSTEXPR20 _Vb_const_iterator(const _Vbase* _Ptr, const _Container_base* _Mypvbool) noexcept : _Mybase(_Ptr, 0, _Mypvbool) {} - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _Vb_const_iterator(const _Vb_const_iterator&) noexcept = default; _CONSTEXPR20 _Vb_const_iterator& operator=(const _Vb_const_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _NODISCARD _CONSTEXPR20 const_reference operator*() const noexcept { #if _ITERATOR_DEBUG_LEVEL != 0 @@ -2259,8 +2268,11 @@ public: return _Reft(*this); } - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _Vb_iterator() noexcept = default; + _CONSTEXPR20 _Vb_iterator(const _Vb_iterator&) noexcept = default; _CONSTEXPR20 _Vb_iterator& operator=(const _Vb_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _CONSTEXPR20 _Vb_iterator& operator++() noexcept { _Mybase::operator++(); diff --git a/stl/inc/xstring b/stl/inc/xstring index 1f1c7a16702..a6a524c3577 100644 --- a/stl/inc/xstring +++ b/stl/inc/xstring @@ -1938,8 +1938,10 @@ public: this->_Adopt(_Pstring); } - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _String_const_iterator(const _String_const_iterator&) noexcept = default; _CONSTEXPR20 _String_const_iterator& operator=(const _String_const_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _NODISCARD _CONSTEXPR20 reference operator*() const noexcept { #if _ITERATOR_DEBUG_LEVEL >= 1 @@ -2177,8 +2179,11 @@ public: using _Mybase::_Mybase; - // TRANSITION, DevCom-1331017 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1331017 + _CONSTEXPR20 _String_iterator() noexcept = default; + _CONSTEXPR20 _String_iterator(const _String_iterator&) noexcept = default; _CONSTEXPR20 _String_iterator& operator=(const _String_iterator&) noexcept = default; +#endif // TRANSITION, DevCom-1331017 _NODISCARD _CONSTEXPR20 reference operator*() const noexcept { return const_cast(_Mybase::operator*()); diff --git a/tests/std/tests/Dev10_561430_list_and_tree_leaks/test.cpp b/tests/std/tests/Dev10_561430_list_and_tree_leaks/test.cpp index 9c21039cc74..8d2f66b285f 100644 --- a/tests/std/tests/Dev10_561430_list_and_tree_leaks/test.cpp +++ b/tests/std/tests/Dev10_561430_list_and_tree_leaks/test.cpp @@ -29,10 +29,14 @@ template struct Mallocator { typedef T value_type; - Mallocator() {} + Mallocator() = default; + Mallocator(const Mallocator&) = default; + template Mallocator(const Mallocator&) {} + Mallocator& operator=(const Mallocator&) = delete; + bool operator==(const Mallocator&) const { return true; } @@ -63,8 +67,6 @@ struct Mallocator { free(p); } - - Mallocator& operator=(const Mallocator&) = delete; }; template diff --git a/tests/std/tests/Dev11_0863628_atomic_compare_exchange/test.cpp b/tests/std/tests/Dev11_0863628_atomic_compare_exchange/test.cpp index 6e9a163345d..63ee746546e 100644 --- a/tests/std/tests/Dev11_0863628_atomic_compare_exchange/test.cpp +++ b/tests/std/tests/Dev11_0863628_atomic_compare_exchange/test.cpp @@ -150,6 +150,7 @@ void helper2() { const Atom const_atom(obj); bool b = const_atom.is_lock_free(); + (void) b; atom.store(obj); atom.store(obj, memory_order_seq_cst); diff --git a/tests/std/tests/VSO_0191296_allocator_construct/test.compile.pass.cpp b/tests/std/tests/VSO_0191296_allocator_construct/test.compile.pass.cpp index 1d312ad3bb4..8036e20e90c 100644 --- a/tests/std/tests/VSO_0191296_allocator_construct/test.compile.pass.cpp +++ b/tests/std/tests/VSO_0191296_allocator_construct/test.compile.pass.cpp @@ -134,6 +134,8 @@ struct construct_applying_allocator { template construct_applying_allocator(const construct_applying_allocator&) {} + construct_applying_allocator& operator=(const construct_applying_allocator&) = default; + using propagate_on_container_copy_assignment = std::bool_constant; using propagate_on_container_move_assignment = std::bool_constant; using propagate_on_container_swap = std::bool_constant; diff --git a/tests/tr1/tests/functional/test.cpp b/tests/tr1/tests/functional/test.cpp index 1a3ed6e0c2f..f4a7115a017 100644 --- a/tests/tr1/tests/functional/test.cpp +++ b/tests/tr1/tests/functional/test.cpp @@ -223,6 +223,7 @@ void test_main() { // test basic workings of functional definitions test_pointer(first, last, dest); CSTD size_t hash_val = STD hash()(3); + (void) hash_val; hash_val = STD hash()(3.0); hash_val = STD hash()(STD string("abc")); diff --git a/tests/tr1/tests/memory3/test.cpp b/tests/tr1/tests/memory3/test.cpp index ec718586240..c0a2e6987d9 100644 --- a/tests/tr1/tests/memory3/test.cpp +++ b/tests/tr1/tests/memory3/test.cpp @@ -233,6 +233,7 @@ void t_hash() { // test hash functions typedef STD shared_ptr sptr_t; sptr_t sp0; CSTD size_t hash_val = STD hash()(sp0); + (void) hash_val; typedef STD unique_ptr uptr_t; uptr_t up0; diff --git a/tests/tr1/tests/string1/test.cpp b/tests/tr1/tests/string1/test.cpp index b12c795dac8..949216ec1ef 100644 --- a/tests/tr1/tests/string1/test.cpp +++ b/tests/tr1/tests/string1/test.cpp @@ -554,6 +554,7 @@ void test_main() { // test basic workings of string definitions hash_val = STD hash()(STD wstring(L"abc")); hash_val = STD hash()(STD u16string(3, 'x')); hash_val = STD hash()(STD u32string(3, 'x')); + (void) hash_val; } { From 47370c62bcbd1697d0142b60d7f907e4f6d281f8 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Mon, 18 Oct 2021 15:42:35 -0700 Subject: [PATCH 2/2] AlexG's comment --- stl/inc/iomanip | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stl/inc/iomanip b/stl/inc/iomanip index 2eb8bee82c6..2ffe9c4ec58 100644 --- a/stl/inc/iomanip +++ b/stl/inc/iomanip @@ -200,10 +200,14 @@ struct _Quote_out { // store pointer/length for string _Quote_out(const _Elem* _Ptr_obj, _Sizet _Size_obj, _Elem _Delim_obj, _Elem _Escape_obj) : _Ptr(_Ptr_obj), _Size(_Size_obj), _Delim(_Delim_obj), _Escape(_Escape_obj) {} + _Quote_out(const _Quote_out&) = default; + const _Elem* _Ptr; // pointer to string _Sizet _Size; // length of string _Elem _Delim; // delimiter element _Elem _Escape; // escape element + + _Quote_out& operator=(const _Quote_out&) = delete; }; template