public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6992] Declare std::array members with attribute const [PR101831].
@ 2022-02-02  0:22 Martin Sebor
  0 siblings, 0 replies; only message in thread
From: Martin Sebor @ 2022-02-02  0:22 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:756eabacfcd767e39eea63257a026f61a4c4e661

commit r12-6992-g756eabacfcd767e39eea63257a026f61a4c4e661
Author: Martin Sebor <msebor@redhat.com>
Date:   Tue Feb 1 17:19:11 2022 -0700

    Declare std::array members with attribute const [PR101831].
    
    Resolves:
    PR libstdc++/101831 - Spurious maybe-uninitialized warning on std::array::size
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/101831
            * include/std/array (begin): Declare const member function attribute
            const.
            (end, rbegin, rend, size, max_size, empty, data): Same.
            * testsuite/23_containers/array/capacity/empty.cc: Add test cases.
            * testsuite/23_containers/array/capacity/max_size.cc: Same.
            * testsuite/23_containers/array/capacity/size.cc: Same.
            * testsuite/23_containers/array/iterators/begin_end.cc: New test.

Diff:
---
 libstdc++-v3/include/std/array                     | 16 ++++-----
 .../23_containers/array/capacity/empty.cc          | 18 ++++++++++
 .../23_containers/array/capacity/max_size.cc       | 18 ++++++++++
 .../testsuite/23_containers/array/capacity/size.cc | 18 ++++++++++
 .../23_containers/array/iterators/begin_end.cc     | 39 ++++++++++++++++++++++
 5 files changed, 101 insertions(+), 8 deletions(-)

diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index b4d8fc81a52..e45143fb329 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -127,7 +127,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       { std::swap_ranges(begin(), end(), __other.begin()); }
 
       // Iterators.
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       _GLIBCXX17_CONSTEXPR iterator
       begin() noexcept
       { return iterator(data()); }
@@ -137,7 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       begin() const noexcept
       { return const_iterator(data()); }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       _GLIBCXX17_CONSTEXPR iterator
       end() noexcept
       { return iterator(data() + _Nm); }
@@ -147,7 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       end() const noexcept
       { return const_iterator(data() + _Nm); }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       _GLIBCXX17_CONSTEXPR reverse_iterator
       rbegin() noexcept
       { return reverse_iterator(end()); }
@@ -157,7 +157,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       rbegin() const noexcept
       { return const_reverse_iterator(end()); }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       _GLIBCXX17_CONSTEXPR reverse_iterator
       rend() noexcept
       { return reverse_iterator(begin()); }
@@ -188,15 +188,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       { return const_reverse_iterator(begin()); }
 
       // Capacity.
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       constexpr size_type
       size() const noexcept { return _Nm; }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       constexpr size_type
       max_size() const noexcept { return _Nm; }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       constexpr bool
       empty() const noexcept { return size() == 0; }
 
@@ -278,7 +278,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  	           : _AT_Type::_S_ref(_M_elems, 0);
       }
 
-      [[__nodiscard__]]
+      [[__gnu__::__const__, __nodiscard__]]
       _GLIBCXX17_CONSTEXPR pointer
       data() noexcept
       { return _AT_Type::_S_ptr(_M_elems); }
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
index 3f3f282ad9d..cecbae39e45 100644
--- a/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
@@ -40,8 +40,26 @@ test01()
   }
 }
 
+#pragma GCC push_options
+#pragma GCC optimize "0"
+
+void
+test02()
+{
+  {
+    const size_t len = 3;
+    typedef std::array<int, len> array_type;
+    array_type a;
+
+    VERIFY( a.empty() == false );    // { dg-bogus "-Wmaybe-uninitialized"
+  }
+}
+
+#pragma GCC pop_options
+
 int main()
 {
   test01();
+  test02();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
index 0e000258530..4629316161d 100644
--- a/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
@@ -40,8 +40,26 @@ test01()
   }
 }
 
+#pragma GCC push_options
+#pragma GCC optimize "0"
+
+void
+test02()
+{
+  {
+    const size_t len = 3;
+    typedef std::array<int, len> array_type;
+    array_type a;
+
+    VERIFY( a.max_size() == len );  // { dg-bogus "-Wmaybe-uninitialized"
+  }
+}
+
+#pragma GCC pop_options
+
 int main()
 {
   test01();
+  test02();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc b/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
index 3e4aa7143dc..dddd909a0ac 100644
--- a/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
@@ -40,8 +40,26 @@ test01()
   }
 }
 
+#pragma GCC push_options
+#pragma GCC optimize "0"
+
+void
+test02()
+{
+  {
+    const size_t len = 3;
+    typedef std::array<int, len> array_type;
+    array_type a;
+
+    VERIFY( a.size() == len );      // { dg-bogus "-Wmaybe-uninitialized"
+  }
+}
+
+#pragma GCC pop_options
+
 int main()
 {
   test01();
+  test02();
   return 0;
 }
diff --git a/libstdc++-v3/testsuite/23_containers/array/iterators/begin_end.cc b/libstdc++-v3/testsuite/23_containers/array/iterators/begin_end.cc
new file mode 100644
index 00000000000..69594a1fc74
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/iterators/begin_end.cc
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+
+#include <array>
+
+#pragma GCC push_options
+#pragma GCC optimize "0"
+
+extern void
+sink (const void*, ...);
+
+void
+test01()
+{
+  {
+    const std::size_t len = 1;
+    typedef std::array<int, len> array_type;
+    typedef array_type::iterator iterator;;
+    array_type a;
+
+    iterator b = a.begin();           // { dg-bogus "-Wmaybe-uninitialized" }
+    iterator e = a.end();             // { dg-bogus "-Wmaybe-uninitialized" }
+
+    sink(&b, &e);
+  }
+
+  {
+    const std::size_t len = 3;
+    typedef std::array<int, len> array_type;
+    typedef array_type::reverse_iterator reverse_iterator;
+    array_type a;
+
+    reverse_iterator b = a.rbegin();  // { dg-bogus "-Wmaybe-uninitialized" }
+    reverse_iterator e = a.rend();    // { dg-bogus "-Wmaybe-uninitialized" }
+
+    sink(&b, &e);
+  }
+}
+
+#pragma GCC pop_options


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-02-02  0:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-02  0:22 [gcc r12-6992] Declare std::array members with attribute const [PR101831] Martin Sebor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).