[libcxx-commits] [libcxx] f97936f - [libc++] Cleanup and enable multiple warnings.

Eric Fiselier via libcxx-commits libcxx-commits at lists.llvm.org
Thu Dec 12 18:09:16 PST 2019


Author: Eric Fiselier
Date: 2019-12-12T21:09:08-05:00
New Revision: f97936fabd263e3b311e3b8e9ffca4920e4fcff0

URL: https://github.com/llvm/llvm-project/commit/f97936fabd263e3b311e3b8e9ffca4920e4fcff0
DIFF: https://github.com/llvm/llvm-project/commit/f97936fabd263e3b311e3b8e9ffca4920e4fcff0.diff

LOG: [libc++] Cleanup and enable multiple warnings.

Too many warnings are being disabled too quickly. Warnings are
important to keeping libc++ correct. This patch re-enables two
warnings: -Wconstant-evaluated and -Wdeprecated-copy.

In future, all warnings disabled for the test suite should require
an attached bug. The bug should state the plan for re-enabling that
warning, or a strong case why it should remain disabled.

Added: 
    

Modified: 
    libcxx/include/__bit_reference
    libcxx/include/__hash_table
    libcxx/include/__tree
    libcxx/include/ext/hash_map
    libcxx/include/random
    libcxx/include/valarray
    libcxx/test/libcxx/containers/sequences/vector/asan_throw.pass.cpp
    libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.fail.cpp
    libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp
    libcxx/test/support/test_macros.h
    libcxx/utils/libcxx/test/config.py

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index bbc159834242..3d4da1cbb68a 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -1114,8 +1114,12 @@ public:
 #endif
     {}
 
+    // avoid re-declaring a copy constructor for the non-const version.
+    using __type_for_copy_to_const =
+      _If<_IsConst, __bit_iterator<_Cp, false>, struct __private_nat>;
+
     _LIBCPP_INLINE_VISIBILITY
-    __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT
+    __bit_iterator(const __type_for_copy_to_const& __it) _NOEXCEPT
         : __seg_(__it.__seg_), __ctz_(__it.__ctz_) {}
 
     _LIBCPP_INLINE_VISIBILITY reference operator*() const _NOEXCEPT

diff  --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index 0b953f58e99e..7ba3cebd0941 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -825,11 +825,13 @@ private:
 
     allocator_type& __na_;
 
-    __hash_node_destructor& operator=(const __hash_node_destructor&);
-
 public:
     bool __value_constructed;
 
+    __hash_node_destructor(__hash_node_destructor const&) = default;
+    __hash_node_destructor& operator=(const __hash_node_destructor&) = delete;
+
+
     _LIBCPP_INLINE_VISIBILITY
     explicit __hash_node_destructor(allocator_type& __na,
                                     bool __constructed = false) _NOEXCEPT

diff  --git a/libcxx/include/__tree b/libcxx/include/__tree
index 8421299c9bc8..8b6509cf91c0 100644
--- a/libcxx/include/__tree
+++ b/libcxx/include/__tree
@@ -775,11 +775,14 @@ private:
     typedef __tree_node_types<pointer> _NodeTypes;
     allocator_type& __na_;
 
-    __tree_node_destructor& operator=(const __tree_node_destructor&);
 
 public:
     bool __value_constructed;
 
+
+    __tree_node_destructor(const __tree_node_destructor &) = default;
+    __tree_node_destructor& operator=(const __tree_node_destructor&) = delete;
+
     _LIBCPP_INLINE_VISIBILITY
     explicit __tree_node_destructor(allocator_type& __na, bool __val = false) _NOEXCEPT
         : __na_(__na),

diff  --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index 09beaa607d83..7478d7410064 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -318,12 +318,13 @@ private:
 
     allocator_type& __na_;
 
-    __hash_map_node_destructor& operator=(const __hash_map_node_destructor&);
-
 public:
     bool __first_constructed;
     bool __second_constructed;
 
+    __hash_map_node_destructor(__hash_map_node_destructor const&) = default;
+    __hash_map_node_destructor& operator=(const __hash_map_node_destructor&) = delete;
+
     _LIBCPP_INLINE_VISIBILITY
     explicit __hash_map_node_destructor(allocator_type& __na)
         : __na_(__na),

diff  --git a/libcxx/include/random b/libcxx/include/random
index 0cbc72dc1cfc..7c4054f7eea8 100644
--- a/libcxx/include/random
+++ b/libcxx/include/random
@@ -6105,6 +6105,7 @@ public:
         template<class _UnaryOperation>
             param_type(size_t __nw, result_type __xmin, result_type __xmax,
                        _UnaryOperation __fw);
+        param_type(param_type const&) = default;
         param_type & operator=(const param_type& __rhs);
 
         _LIBCPP_INLINE_VISIBILITY
@@ -6428,6 +6429,7 @@ public:
         template<class _UnaryOperation>
             param_type(size_t __nw, result_type __xmin, result_type __xmax,
                        _UnaryOperation __fw);
+        param_type(param_type const&) = default;
         param_type & operator=(const param_type& __rhs);
 
         _LIBCPP_INLINE_VISIBILITY

diff  --git a/libcxx/include/valarray b/libcxx/include/valarray
index 8f6221ab3f39..c048a6d7e498 100644
--- a/libcxx/include/valarray
+++ b/libcxx/include/valarray
@@ -1256,6 +1256,8 @@ public:
     _LIBCPP_INLINE_VISIBILITY
     operator>>=(const _Expr& __v) const;
 
+    slice_array(slice_array const&) = default;
+
     _LIBCPP_INLINE_VISIBILITY
     const slice_array& operator=(const slice_array& __sa) const;
 
@@ -1505,11 +1507,6 @@ public:
 
 #endif  // _LIBCPP_CXX03_LANG
 
-//  gslice(const gslice&)            = default;
-//  gslice(gslice&&)                 = default;
-//  gslice& operator=(const gslice&) = default;
-//  gslice& operator=(gslice&&)      = default;
-
     _LIBCPP_INLINE_VISIBILITY
     size_t           start()  const {return __1d_.size() ? __1d_[0] : 0;}
 
@@ -1645,10 +1642,7 @@ public:
     _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
-//  gslice_array(const gslice_array&)            = default;
-//  gslice_array(gslice_array&&)                 = default;
-//  gslice_array& operator=(const gslice_array&) = default;
-//  gslice_array& operator=(gslice_array&&)      = default;
+    gslice_array(const gslice_array&)            = default;
 
 private:
     gslice_array(const gslice& __gs, const valarray<value_type>& __v)
@@ -1977,17 +1971,14 @@ public:
     _LIBCPP_INLINE_VISIBILITY
     operator>>=(const _Expr& __v) const;
 
+    mask_array(const mask_array&) = default;
+
     _LIBCPP_INLINE_VISIBILITY
     const mask_array& operator=(const mask_array& __ma) const;
 
     _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
-//  mask_array(const mask_array&)            = default;
-//  mask_array(mask_array&&)                 = default;
-//  mask_array& operator=(const mask_array&) = default;
-//  mask_array& operator=(mask_array&&)      = default;
-
 private:
     _LIBCPP_INLINE_VISIBILITY
     mask_array(const valarray<bool>& __vb, const valarray<value_type>& __v)
@@ -2336,17 +2327,14 @@ public:
     _LIBCPP_INLINE_VISIBILITY
     operator>>=(const _Expr& __v) const;
 
+    indirect_array(const indirect_array&) = default;
+
     _LIBCPP_INLINE_VISIBILITY
     const indirect_array& operator=(const indirect_array& __ia) const;
 
     _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
-//  indirect_array(const indirect_array&)            = default;
-//  indirect_array(indirect_array&&)                 = default;
-//  indirect_array& operator=(const indirect_array&) = default;
-//  indirect_array& operator=(indirect_array&&)      = default;
-
 private:
      _LIBCPP_INLINE_VISIBILITY
    indirect_array(const valarray<size_t>& __ia, const valarray<value_type>& __v)

diff  --git a/libcxx/test/libcxx/containers/sequences/vector/asan_throw.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/asan_throw.pass.cpp
index 443a6f2e9243..235a3ffae14e 100644
--- a/libcxx/test/libcxx/containers/sequences/vector/asan_throw.pass.cpp
+++ b/libcxx/test/libcxx/containers/sequences/vector/asan_throw.pass.cpp
@@ -50,6 +50,7 @@ class ThrowOnCopy {
             throw 0;
         }
     }
+    ThrowOnCopy& operator=(ThrowOnCopy const&) = default;
 
     bool should_throw;
 };

diff  --git a/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.fail.cpp b/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.fail.cpp
index c139233b8dae..2d2e07157624 100644
--- a/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.fail.cpp
+++ b/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.fail.cpp
@@ -24,6 +24,7 @@ int main(int, char**)
 #else
   // expected-error at +1 {{static_assert failed}}
   static_assert(!std::is_constant_evaluated(), "");
+  // expected-error at -1 0-1 {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
 #endif
   return 0;
 }

diff  --git a/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.pass.cpp b/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.pass.cpp
index 0f9f98e91768..e4b8a7575b0b 100644
--- a/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.const.eval/is_constant_evaluated.pass.cpp
@@ -23,6 +23,12 @@
 #endif
 #endif
 
+// Disable the tautological constant evaluation warnings for this test,
+// because it's explicitly testing those cases.
+#if TEST_HAS_WARNING("-Wconstant-evaluated") && defined(__clang__)
+#pragma clang diagnostic ignored "-Wconstant-evaluated"
+#endif
+
 template <bool> struct InTemplate {};
 
 int main(int, char**)

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp
index a5ff10201c92..f14e20657d7b 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp
@@ -30,6 +30,7 @@ struct X
         if (throw_now)
             TEST_THROW(6);
     }
+    X& operator=(X const&) = default;
 };
 
 bool X::throw_now = false;

diff  --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h
index f5fbedb55552..443165516b25 100644
--- a/libcxx/test/support/test_macros.h
+++ b/libcxx/test/support/test_macros.h
@@ -47,6 +47,12 @@
 #define TEST_HAS_EXTENSION(X) 0
 #endif
 
+#ifdef __has_warning
+#define TEST_HAS_WARNING(X) __has_warning(X)
+#else
+#define TEST_HAS_WARNING(X) 0
+#endif
+
 #ifdef __has_builtin
 #define TEST_HAS_BUILTIN(X) __has_builtin(X)
 #else

diff  --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py
index 403abe9ddfb8..e81571a7f1f0 100644
--- a/libcxx/utils/libcxx/test/config.py
+++ b/libcxx/utils/libcxx/test/config.py
@@ -917,8 +917,6 @@ def configure_warnings(self):
         self.cxx.addWarningFlagIfSupported('-Wshadow')
         self.cxx.addWarningFlagIfSupported('-Wno-unused-command-line-argument')
         self.cxx.addWarningFlagIfSupported('-Wno-attributes')
-        self.cxx.addWarningFlagIfSupported('-Wno-deprecated-copy')
-        self.cxx.addWarningFlagIfSupported('-Wno-constant-evaluated')
         self.cxx.addWarningFlagIfSupported('-Wno-pessimizing-move')
         self.cxx.addWarningFlagIfSupported('-Wno-c++11-extensions')
         self.cxx.addWarningFlagIfSupported('-Wno-user-defined-literals')


        


More information about the libcxx-commits mailing list