aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2021-02-15 16:56:52 +0000
committerIain Sandoe <iain@sandoe.co.uk>2021-02-24 19:23:45 +0000
commit9a4eb720b343324f7f8fd2dceed5d0347e5a0153 (patch)
tree23d2041a64b67fbbb72faa4fce731b27aacf761b
parent9d2a69106beb346be1c511a9c1a61a256b697868 (diff)
downloadgcc-9a4eb720b343324f7f8fd2dceed5d0347e5a0153.zip
gcc-9a4eb720b343324f7f8fd2dceed5d0347e5a0153.tar.gz
gcc-9a4eb720b343324f7f8fd2dceed5d0347e5a0153.tar.bz2
testsuite, coroutines : Make final_suspend calls noexcept.
The wording of [dcl.fct.def.coroutine]/15 states: The expression co_await promise.final_suspend() shall not be potentially-throwing. A fair number of testcases are not correctly marked. Fixed here. gcc/testsuite/ChangeLog: * g++.dg/coroutines/co-await-void_type.C: Mark promise final_suspend call as noexcept. * g++.dg/coroutines/co-return-syntax-08-bad-return.C: Likewise. * g++.dg/coroutines/co-return-syntax-10-movable.C: Likewise. * g++.dg/coroutines/co-return-warning-1.C: Likewise. * g++.dg/coroutines/co-yield-syntax-08-needs-expr.C: Likewise. * g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C: Likewise. * g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C: Likewise. * g++.dg/coroutines/coro-missing-gro.C: Likewise. * g++.dg/coroutines/coro-missing-promise-yield.C: Likewise. * g++.dg/coroutines/coro-missing-ret-value.C: Likewise. * g++.dg/coroutines/coro-missing-ret-void.C: Likewise. * g++.dg/coroutines/coro-missing-ueh.h: Likewise. * g++.dg/coroutines/coro1-allocators.h: Likewise. * g++.dg/coroutines/coro1-refs-and-ctors.h: Likewise. * g++.dg/coroutines/coro1-ret-int-yield-int.h: Likewise. * g++.dg/coroutines/pr94682-preview-this.C: Likewise. * g++.dg/coroutines/pr94752.C: Likewise. * g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C: Likewise. * g++.dg/coroutines/pr94879-folly-1.C: Likewise. * g++.dg/coroutines/pr94883-folly-2.C: Likewise. * g++.dg/coroutines/pr95050.C: Likewise. * g++.dg/coroutines/pr95345.C: Likewise. * g++.dg/coroutines/pr95440.C: Likewise. * g++.dg/coroutines/pr95591.C: Likewise. * g++.dg/coroutines/pr95711.C: Likewise. * g++.dg/coroutines/pr95813.C: Likewise. * g++.dg/coroutines/symmetric-transfer-00-basic.C: Likewise. * g++.dg/coroutines/torture/co-await-07-tmpl.C: Likewise. * g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C: Likewise. * g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C: Likewise. * g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C: Likewise. * g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C: Likewise. * g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C: Likewise. * g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C: Likewise. * g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C: Likewise. * g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C: Likewise. * g++.dg/coroutines/torture/co-ret-15-default-return_void.C: Likewise. * g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C: Likewise. * g++.dg/coroutines/torture/co-yield-00-triv.C: Likewise. * g++.dg/coroutines/torture/co-yield-03-tmpl.C: Likewise. * g++.dg/coroutines/torture/co-yield-04-complex-local-state.C: Likewise. * g++.dg/coroutines/torture/exceptions-test-0.C: Likewise. * g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C: Likewise. * g++.dg/coroutines/torture/func-params-04.C: Likewise. * g++.dg/coroutines/torture/local-var-06-structured-binding.C: Likewise. * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Likewise.
-rw-r--r--gcc/testsuite/g++.dg/coroutines/co-await-void_type.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/co-yield-syntax-08-needs-expr.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C4
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-missing-promise-yield.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-missing-ret-value.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-missing-ret-void.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro-missing-ueh.h2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro1-allocators.h2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr94752.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95050.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95345.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95440.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95591.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95711.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/pr95813.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/symmetric-transfer-00-basic.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-await-07-tmpl.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-15-default-return_void.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-0.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/func-params-04.C5
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/local-var-06-structured-binding.C2
-rw-r--r--gcc/testsuite/g++.dg/coroutines/torture/mid-suspend-destruction-0.C2
46 files changed, 49 insertions, 48 deletions
diff --git a/gcc/testsuite/g++.dg/coroutines/co-await-void_type.C b/gcc/testsuite/g++.dg/coroutines/co-await-void_type.C
index 0bb8818..370068f 100644
--- a/gcc/testsuite/g++.dg/coroutines/co-await-void_type.C
+++ b/gcc/testsuite/g++.dg/coroutines/co-await-void_type.C
@@ -28,7 +28,7 @@ struct resumable::promise_type {
return coro_handle::from_promise(*this);
}
auto initial_suspend() { return std::suspend_always(); }
- auto final_suspend() { return std::suspend_always(); }
+ auto final_suspend() noexcept { return std::suspend_always(); }
void yield_value(int v) { value_ = v; }
void unhandled_exception() {}
};
diff --git a/gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C b/gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C
index 9b53754..148ee45 100644
--- a/gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C
+++ b/gcc/testsuite/g++.dg/coroutines/co-return-syntax-08-bad-return.C
@@ -24,7 +24,7 @@ struct Coro {
~promise_type() {}
Coro get_return_object () { return Coro (handle_type::from_promise (*this)); }
auto initial_suspend () { return coro::suspend_always{}; }
- auto final_suspend () { return coro::suspend_always{}; }
+ auto final_suspend () noexcept { return coro::suspend_always{}; }
void return_void () { }
void unhandled_exception() { }
};
diff --git a/gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C b/gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C
index c6f36a7..0cf3c39 100644
--- a/gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C
+++ b/gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C
@@ -32,7 +32,7 @@ struct coro1 {
auto get_return_object () { return handle_type::from_promise (*this);}
coro::suspend_always initial_suspend () const { return {}; }
- coro::suspend_always final_suspend () const { return {}; }
+ coro::suspend_always final_suspend () const noexcept { return {}; }
void return_value(T&& v) noexcept { value = std::move(v); }
void return_value(const T&) noexcept = delete;
diff --git a/gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C b/gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C
index 69e7690..b2aaba1 100644
--- a/gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C
+++ b/gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C
@@ -28,7 +28,7 @@ struct resumable::promise_type {
return coro_handle::from_promise(*this);
}
auto initial_suspend() { return std::suspend_always(); }
- auto final_suspend() { return std::suspend_always(); }
+ auto final_suspend() noexcept { return std::suspend_always(); }
void return_value(int v) { value_ = v; }
std::suspend_always yield_value(int v) {
value_ = v;
diff --git a/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-08-needs-expr.C b/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-08-needs-expr.C
index 86969f7..aec1214 100644
--- a/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-08-needs-expr.C
+++ b/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-08-needs-expr.C
@@ -10,7 +10,7 @@ struct DummyYield {
DummyYield (coro::coroutine_handle<> handle) : handle (handle) {}
struct dummy_yield {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
DummyYield get_return_object() {
return DummyYield (coro::coroutine_handle<dummy_yield>::from_promise (*this));
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C b/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C
index bd9dec6..f9e8a5f 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-00-class-gro-scalar-return.C
@@ -21,11 +21,11 @@ struct std::coroutine_traits<R, HandleRef, T...> {
}
~promise_type () { PRINT ("Destroyed Promise"); g_promise = 0;}
Thing get_return_object() { return {}; }
-
+ //int get_return_object() { return 0; }
auto initial_suspend() {
return std::suspend_always{};
}
- auto final_suspend() { return std::suspend_never{}; }
+ auto final_suspend() noexcept { return std::suspend_never{}; }
void return_void() {}
void unhandled_exception() {}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C b/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C
index c31fcb5..2671ce7 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-bad-gro-01-void-gro-non-class-coro.C
@@ -19,7 +19,7 @@ struct std::coroutine_traits<R, HandleRef, T...> {
auto initial_suspend() {
return std::suspend_always{};
}
- auto final_suspend() { return std::suspend_never{}; }
+ auto final_suspend() noexcept { return std::suspend_never{}; }
void return_void() {}
void unhandled_exception() {}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C b/gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C
index fb02e9d..44a629b 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C
@@ -10,7 +10,7 @@ struct MissingGRO {
MissingGRO (coro::coroutine_handle<> handle) : handle (handle) {}
struct missing_gro {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
void return_void () {}
void unhandled_exception() { /*std::terminate();*/ };
};
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-missing-promise-yield.C b/gcc/testsuite/g++.dg/coroutines/coro-missing-promise-yield.C
index a85a4d5..01cc414 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-missing-promise-yield.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-missing-promise-yield.C
@@ -7,7 +7,7 @@ struct MissingPromiseYield {
MissingPromiseYield (coro::coroutine_handle<> handle) : handle (handle) {}
struct missing_yield {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
MissingPromiseYield get_return_object() {
return MissingPromiseYield (coro::coroutine_handle<missing_yield>::from_promise (*this));
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-value.C b/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-value.C
index f745fa9..91c29d3 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-value.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-value.C
@@ -10,7 +10,7 @@ struct MissingRetValue {
MissingRetValue (coro::coroutine_handle<> handle) : handle (handle) {}
struct missing_retvoid {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
MissingRetValue get_return_object() {
return MissingRetValue (coro::coroutine_handle<missing_retvoid>::from_promise (*this));
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-void.C b/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-void.C
index 8639a9d..502391a 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-void.C
+++ b/gcc/testsuite/g++.dg/coroutines/coro-missing-ret-void.C
@@ -10,7 +10,7 @@ struct MissingRetVoid {
MissingRetVoid (coro::coroutine_handle<> handle) : handle (handle) {}
struct missing_retvoid {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
MissingRetVoid get_return_object() {
return MissingRetVoid (coro::coroutine_handle<missing_retvoid>::from_promise (*this));
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro-missing-ueh.h b/gcc/testsuite/g++.dg/coroutines/coro-missing-ueh.h
index 51e6135..361003c 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro-missing-ueh.h
+++ b/gcc/testsuite/g++.dg/coroutines/coro-missing-ueh.h
@@ -8,7 +8,7 @@ struct MissingUEH {
MissingUEH (coro::coroutine_handle<> handle) : handle (handle) {}
struct missing_ueh {
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
MissingUEH get_return_object() {
return MissingUEH (coro::coroutine_handle<missing_ueh>::from_promise (*this));
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro1-allocators.h b/gcc/testsuite/g++.dg/coroutines/coro1-allocators.h
index f7a85e9..cf73dc0 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro1-allocators.h
+++ b/gcc/testsuite/g++.dg/coroutines/coro1-allocators.h
@@ -100,7 +100,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h b/gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h
index 5b89e7c..8831a07 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h
+++ b/gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h
@@ -19,7 +19,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h b/gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
index 7cf5052..826519e 100644
--- a/gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
+++ b/gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
@@ -108,7 +108,7 @@ struct coro1 {
#endif
#ifdef MISSING_FINAL_SUSPEND
#else
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C b/gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C
index ca96f37..7c4bae2a 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C
@@ -13,7 +13,7 @@ struct promise
promise(Class &,int) { static_assert(!std::is_pointer<Class>::value, ""); }
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
future get_return_object() { return {}; }
diff --git a/gcc/testsuite/g++.dg/coroutines/pr94752.C b/gcc/testsuite/g++.dg/coroutines/pr94752.C
index 89ace6a..e5e4ece 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr94752.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr94752.C
@@ -9,7 +9,7 @@ struct task {
promise_type() {}
task get_return_object() { return {}; }
suspend_never initial_suspend() { return {}; }
- suspend_never final_suspend() { return {}; }
+ suspend_never final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {}
};
diff --git a/gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C b/gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C
index 235b5e7..90a558d 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C
@@ -14,7 +14,7 @@ struct std::coroutine_traits<R, CallOp, T...> {
promise_type (CallOp op, T ...args) {}
Fake get_return_object() { return {}; }
std::suspend_always initial_suspend() { return {}; }
- std::suspend_never final_suspend() { return {}; }
+ std::suspend_never final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {}
};
diff --git a/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C b/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
index 7d66ce0..e815ca7 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
@@ -31,7 +31,7 @@ class j {
public:
std::g initial_suspend();
- l final_suspend();
+ l final_suspend() noexcept;
};
class m : public j {
public:
diff --git a/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C b/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
index 088f133..c5fa659 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
@@ -24,7 +24,7 @@ class h {
public:
void get_return_object();
std::b initial_suspend();
- j final_suspend();
+ j final_suspend() noexcept;
void unhandled_exception();
template <typename g>
auto await_transform (g c) { return ab(f, c); }
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95050.C b/gcc/testsuite/g++.dg/coroutines/pr95050.C
index fd1516d..2867cfc 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95050.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95050.C
@@ -21,7 +21,7 @@ struct task
{
auto get_return_object () -> task { return {}; }
auto initial_suspend () -> suspend_always { return {}; }
- auto final_suspend () -> suspend_always { return {}; }
+ auto final_suspend () noexcept -> suspend_always { return {}; }
void return_void () {}
void unhandled_exception () { }
void thing (ret_type x) {}
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95345.C b/gcc/testsuite/g++.dg/coroutines/pr95345.C
index 90e946d..8eae611 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95345.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95345.C
@@ -14,7 +14,7 @@ struct dummy_coro
void await_resume() { }
dummy_coro get_return_object() { return {}; }
dummy_coro initial_suspend() { return {}; }
- dummy_coro final_suspend() { return {}; }
+ dummy_coro final_suspend() noexcept { return {}; }
void return_void() { }
void unhandled_exception() { }
};
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95440.C b/gcc/testsuite/g++.dg/coroutines/pr95440.C
index 8542880..1169da4 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95440.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95440.C
@@ -22,7 +22,7 @@ struct task
// static constexpr suspend_n initial_suspend() { return {2}; }
#endif
static constexpr std::suspend_always initial_suspend() { return {}; }
- static constexpr std::suspend_never final_suspend() { return {}; }
+ static constexpr std::suspend_never final_suspend() noexcept { return {}; }
static constexpr void return_void() {}
static constexpr void unhandled_exception() {}
};
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95591.C b/gcc/testsuite/g++.dg/coroutines/pr95591.C
index 664b1d3..a1a2e57 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95591.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95591.C
@@ -12,7 +12,7 @@ struct generator {
void return_void();
void unhandled_exception();
suspend_always initial_suspend();
- suspend_always final_suspend();
+ suspend_always final_suspend() noexcept;
template<typename Arg>
suspend_always yield_value(Arg&&) {
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95711.C b/gcc/testsuite/g++.dg/coroutines/pr95711.C
index f6aedb1..682a221 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95711.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95711.C
@@ -23,7 +23,7 @@ struct generator{
std::suspend_always initial_suspend (){
return {};
}
- std::suspend_always final_suspend (){
+ std::suspend_always final_suspend () noexcept {
return {};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/pr95813.C b/gcc/testsuite/g++.dg/coroutines/pr95813.C
index 445cdf1..269cba7 100644
--- a/gcc/testsuite/g++.dg/coroutines/pr95813.C
+++ b/gcc/testsuite/g++.dg/coroutines/pr95813.C
@@ -21,7 +21,7 @@ template <typename T, typename... Args>
struct coroutine_traits<lazy<T>, Args...> {
struct promise_type {
suspend_always initial_suspend() const { return {}; }
- suspend_always final_suspend() const { return {}; }
+ suspend_always final_suspend() const noexcept { return {}; }
void return_value(T val) {}
lazy<T> get_return_object() {
return lazy<T>();
diff --git a/gcc/testsuite/g++.dg/coroutines/symmetric-transfer-00-basic.C b/gcc/testsuite/g++.dg/coroutines/symmetric-transfer-00-basic.C
index b78ae20d..a959408 100644
--- a/gcc/testsuite/g++.dg/coroutines/symmetric-transfer-00-basic.C
+++ b/gcc/testsuite/g++.dg/coroutines/symmetric-transfer-00-basic.C
@@ -44,7 +44,7 @@ struct Loopy {
}
coro::suspend_always initial_suspend() { return {}; }
- coro::suspend_always final_suspend() { return {}; }
+ coro::suspend_always final_suspend() noexcept { return {}; }
void unhandled_exception() { /*std::terminate();*/ }
void return_void() {}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-await-07-tmpl.C b/gcc/testsuite/g++.dg/coroutines/torture/co-await-07-tmpl.C
index 33f8e99..17dff0d 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-await-07-tmpl.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-await-07-tmpl.C
@@ -71,7 +71,7 @@ struct coro1 {
return suspend_never_prt{};
}
- auto final_suspend() {
+ auto final_suspend() noexcept {
PRINT ("get final_suspend");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C b/gcc/testsuite/g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C
index c5829c4..3eefe9e 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-await-17-capture-comp-ref.C
@@ -20,7 +20,7 @@ struct resumable::promise_type {
return coro_handle::from_promise(*this);
}
auto initial_suspend() { return std::suspend_never(); }
- auto final_suspend() { return std::suspend_always(); }
+ auto final_suspend() noexcept { return std::suspend_always(); }
void return_value(int x) {used = x;}
void unhandled_exception() {}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C
index f551c6e..dd0a3b7 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C
@@ -57,7 +57,7 @@ struct coro1 {
PRINT ("get initial_suspend (never) ");
return suspend_never_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always) ");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C
index 03fc6eeb..1f4c3de 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C
@@ -57,7 +57,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C
index 36da680..1a095c6 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C
@@ -55,7 +55,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C
index 29fb942..abb789a 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C
@@ -72,7 +72,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C
index 5b1acb8..91f591a 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C
@@ -63,7 +63,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () const {
+ auto final_suspend () const noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C
index 266bc7b..ac4cca4 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C
@@ -60,7 +60,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- suspend_always_prt final_suspend () const {
+ suspend_always_prt final_suspend () const noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C
index d14c358..3368322 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C
@@ -70,7 +70,7 @@ struct coro1 {
PRINT ("get initial_suspend (always, but really never) ");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always, but never) ");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-15-default-return_void.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-15-default-return_void.C
index 99910f3..300052c 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-15-default-return_void.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-15-default-return_void.C
@@ -28,7 +28,7 @@ public:
using coro_handle = std::coroutine_handle<promise_type>;
auto get_return_object() { return coro_handle::from_promise(*this); }
auto initial_suspend() { return std::suspend_always(); }
- auto final_suspend() { return std::suspend_always(); }
+ auto final_suspend() noexcept { return std::suspend_always(); }
void return_void() { value_ = -1; }
void unhandled_exception() {}
private:
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C
index 01a75c1..9c9d2fa 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-ret-17-void-ret-coro.C
@@ -21,7 +21,7 @@ struct std::coroutine_traits<R, HandleRef, T...> {
auto initial_suspend() {
return std::suspend_always{};
}
- auto final_suspend() { return std::suspend_never{}; }
+ auto final_suspend() noexcept { return std::suspend_never{}; }
void return_void() {}
void unhandled_exception() {}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C
index 586b6b2..15e390e 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C
@@ -62,7 +62,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C
index cceee1f..45fc8d7 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C
@@ -22,7 +22,7 @@ struct looper {
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C
index d9330b3..f97bd23 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C
@@ -25,7 +25,7 @@ struct looper {
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-0.C b/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-0.C
index 164c804..85135fc 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-0.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-0.C
@@ -60,7 +60,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C b/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C
index e96b4ed..6433b62 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/exceptions-test-01-n4849-a.C
@@ -87,7 +87,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_susp_throws_prt(throw_control);
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/func-params-04.C b/gcc/testsuite/g++.dg/coroutines/torture/func-params-04.C
index 789e2c0..c90c152 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/func-params-04.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/func-params-04.C
@@ -12,6 +12,7 @@ struct nontriv {
int a, b, c;
nontriv (int _a, int _b, int _c) : a(_a), b(_b), c(_c) {}
virtual int getA () { return a; }
+ ~nontriv() { a = -1; }
};
struct coro1
@@ -19,12 +20,12 @@ f (nontriv t) noexcept
{
if (t.a > 30)
{
- PRINTF ("coro1: about to return %d", t.b);
+ PRINTF ("coro1: about to return %d\n", t.b);
co_return t.b;
}
else if (t.a > 20)
{
- PRINTF ("coro1: about to co-return %d", t.c);
+ PRINTF ("coro1: about to co-return %d\n", t.c);
co_return t.c;
}
else
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/local-var-06-structured-binding.C b/gcc/testsuite/g++.dg/coroutines/torture/local-var-06-structured-binding.C
index ef3ff47..282aa7a 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/local-var-06-structured-binding.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/local-var-06-structured-binding.C
@@ -15,7 +15,7 @@ struct promise
promise (Args&... args) {}
coro::suspend_never initial_suspend() { return {}; }
- coro::suspend_never final_suspend() { return {}; }
+ coro::suspend_never final_suspend() noexcept { return {}; }
future get_return_object() { return {}; }
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/mid-suspend-destruction-0.C b/gcc/testsuite/g++.dg/coroutines/torture/mid-suspend-destruction-0.C
index 505bfa3..63561ea 100644
--- a/gcc/testsuite/g++.dg/coroutines/torture/mid-suspend-destruction-0.C
+++ b/gcc/testsuite/g++.dg/coroutines/torture/mid-suspend-destruction-0.C
@@ -61,7 +61,7 @@ struct coro1 {
PRINT ("get initial_suspend (always)");
return suspend_always_prt{};
}
- auto final_suspend () {
+ auto final_suspend () noexcept {
PRINT ("get final_suspend (always)");
return suspend_always_prt{};
}