@@ -3797,6 +3797,7 @@ morph_fn_to_coro (tree orig, tree *resumer, tree *destroyer)
param_uses = new hash_map<tree, param_info>;
bool lambda_p = LAMBDA_TYPE_P (DECL_CONTEXT (orig));
+ unsigned no_name_parm = 0;
for (tree arg = DECL_ARGUMENTS (orig); arg != NULL;
arg = DECL_CHAIN (arg))
{
@@ -3847,8 +3848,14 @@ morph_fn_to_coro (tree orig, tree *resumer, tree *destroyer)
parm.lambda_cobj = false;
parm.trivial_dtor = TYPE_HAS_TRIVIAL_DESTRUCTOR (parm.frame_type);
- tree pname = DECL_NAME (arg);
- char *buf = xasprintf ("__parm.%s", IDENTIFIER_POINTER (pname));
+ char *buf;
+ if (DECL_NAME (arg))
+ {
+ tree pname = DECL_NAME (arg);
+ buf = xasprintf ("__parm.%s", IDENTIFIER_POINTER (pname));
+ }
+ else
+ buf = xasprintf ("__unnamed_parm.%d", no_name_parm++);
parm.field_id = coro_make_frame_entry
(&field_list, buf, actual_type, DECL_SOURCE_LOCATION (arg));
free (buf);
new file mode 100644
@@ -0,0 +1,17 @@
+#include <coroutine>
+using namespace std;
+
+struct task {
+ struct promise_type {
+ promise_type() {}
+ task get_return_object() { return {}; }
+ suspend_never initial_suspend() { return {}; }
+ suspend_never final_suspend() { return {}; }
+ void return_void() {}
+ void unhandled_exception() {}
+ };
+};
+
+task foo(int) {
+ co_return;
+}