Hi,

Arsen Arsenović <ar...@aarsen.me> writes:

> gcc/testsuite/ChangeLog:
>
>       * g++.dg/coroutines/pr113457-1.C: New test.
>       * g++.dg/coroutines/pr113457.C: New test.

Just noticed that pr113457.C actually has excess errors.  Unsure how I
didn't notice on initial testing (the regstrap caught it) - must've put
the test file in the wrong directory or worktree before moving it from
my testing branch, or something like that.  Anyway, this fixes the
testcase (it still retains the ICE if tested without this patch, and no
errors if tested with):

diff --git a/gcc/testsuite/g++.dg/coroutines/pr113457.C 
b/gcc/testsuite/g++.dg/coroutines/pr113457.C
index 77b1a3ceaa2b..add45a2f8921 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr113457.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr113457.C
@@ -110,8 +110,8 @@ template <typename _Tp> struct iterator_traits<_Tp *> {
     template <typename _Gen> struct _Recursive_awaiter;
     struct _Final_awaiter;
   public:
-    suspend_always initial_suspend() const noexcept {}
-    suspend_always yield_value(_Yielded __val) noexcept {}
+    suspend_always initial_suspend() const noexcept;
+    suspend_always yield_value(_Yielded __val) noexcept;
     template <typename _R2, typename _V2>
     auto yield_value(
         ranges::elements_of<generator<_R2, _V2> &&> __r) noexcept {
@@ -132,14 +132,14 @@ template <typename _Tp> struct iterator_traits<_Tp *> {
       __n
       (  ranges::begin(__r.range))));
     }
-    _Final_awaiter final_suspend() noexcept {}
+    _Final_awaiter final_suspend() noexcept;
     void unhandled_exception() {}
   };
   template <typename _Yielded>
   struct _Promise_erased<_Yielded>::_Final_awaiter {
-    bool await_ready() noexcept {}
+    bool await_ready() noexcept;
     template <typename _Promise>
-    auto await_suspend(std::coroutine_handle<_Promise> __c) noexcept {}
+    void await_suspend(std::coroutine_handle<_Promise> __c) noexcept {}
     void await_resume() noexcept {}
   };
   template <typename _Yielded>
@@ -148,7 +148,7 @@ template <typename _Tp> struct iterator_traits<_Tp *> {
     _Gen _M_gen;
     constexpr bool await_ready() const noexcept { return false; }
     template <typename _Promise>
-    std::coroutine_handle<>
+    void
     await_suspend(std::coroutine_handle<_Promise> __p) noexcept {}
     void await_resume() {}
   };
@@ -159,13 +159,13 @@ template <typename _Tp> struct iterator_traits<_Tp *> {
     struct promise_type
     :   __gen::_Promise_erased<const int &>
     {
-      generator get_return_object() noexcept {}
+      generator get_return_object() noexcept;
     };
   };
 } // namespace std
 using namespace std;
 template <typename... Ranges>
-[[nodiscard]] auto concat(Ranges &&...ranges) -> generator<double, double> {
+auto concat(Ranges &&...ranges) -> generator<double, double> {
   (
   co_yield
   ranges::elements_of(ranges), ...);

Attachment: signature.asc
Description: PGP signature

Reply via email to