]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: suppress -Wdangling-reference with operator| [PR111410]
authorMarek Polacek <polacek@redhat.com>
Fri, 19 Jan 2024 20:27:51 +0000 (15:27 -0500)
committerMarek Polacek <polacek@redhat.com>
Sat, 20 Jan 2024 20:41:52 +0000 (15:41 -0500)
It seems to me that we should exclude std::ranges::views::__adaptor::operator|
from the -Wdangling-reference warning.  It's commonly used when handling
ranges.

PR c++/111410

libstdc++-v3/ChangeLog:

* include/std/ranges: Add #pragma to disable -Wdangling-reference with
std::ranges::views::__adaptor::operator|.

gcc/testsuite/ChangeLog:

* g++.dg/warn/Wdangling-reference17.C: New test.

gcc/testsuite/g++.dg/warn/Wdangling-reference17.C [new file with mode: 0644]
libstdc++-v3/include/std/ranges

diff --git a/gcc/testsuite/g++.dg/warn/Wdangling-reference17.C b/gcc/testsuite/g++.dg/warn/Wdangling-reference17.C
new file mode 100644 (file)
index 0000000..2236984
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/111410
+// { dg-do compile { target c++20 } }
+// { dg-options "-Wdangling-reference" }
+
+#include <vector>
+#include <ranges>
+
+int main()
+{
+  std::vector v{1, 2, 3, 4, 5};
+  for (auto i : std::span{v} | std::views::take(1))
+    {
+      (void) i;
+    }
+}
index 7ef835f486a7073fea234353e0be0d64561df0e6..f2413badd9ceab0cc9a955f6c3fd29121bb0f7f4 100644 (file)
@@ -942,6 +942,8 @@ namespace views::__adaptor
     concept __is_range_adaptor_closure
       = requires (_Tp __t) { __adaptor::__is_range_adaptor_closure_fn(__t, __t); };
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdangling-reference"
   // range | adaptor is equivalent to adaptor(range).
   template<typename _Self, typename _Range>
     requires __is_range_adaptor_closure<_Self>
@@ -961,6 +963,7 @@ namespace views::__adaptor
       return _Pipe<decay_t<_Lhs>, decay_t<_Rhs>>{std::forward<_Lhs>(__lhs),
                                                 std::forward<_Rhs>(__rhs)};
     }
+#pragma GCC diagnostic pop
 
   // The base class of every range adaptor non-closure.
   //