diff options
-rw-r--r-- | ChangeLog.coroutines | 3017 | ||||
-rwxr-xr-x | contrib/gcc_update | 2 | ||||
-rw-r--r-- | gcc/REVISION | 1 | ||||
-rwxr-xr-x | gcc/configure | 4 | ||||
-rw-r--r-- | gcc/configure.ac | 4 |
5 files changed, 3025 insertions, 3 deletions
diff --git a/ChangeLog.coroutines b/ChangeLog.coroutines new file mode 100644 index 00000000000..2fba1fa0ccf --- /dev/null +++ b/ChangeLog.coroutines @@ -0,0 +1,3017 @@ +2020-01-16 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Use <cstdlib> instead of a local + declaration for abort (). + +2020-01-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): Check that a handle type + returned by await_suspend is an instance of the coroutines + handle template. + +2020-01-14 Iain Sandoe <iain@sandoe.co.uk> + + libiberty/ + * testsuite/demangle-expected: Add testcase for the co_await + operator mangling. + +2020-01-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Use new and delete to + manage the suspend_points map. + +2020-01-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_coro_traits_template_class): Delete forward + referenced. + (find_coro_handle_type): Likewise. + (coro_traits_templ, coro_handle_templ): New. + (find_coro_traits_template_decl): New. + (instantiate_coro_traits): Revised from + find_coro_traits_template_class. + (find_coro_handle_template_decl): New. + (instantiate_coro_handle_for_promise_type): Revised from + find_coro_handle_type. + (coro_promise_type_found_p): Look up the required coroutine + traits and handle templates, fail if they are not found. + +2020-01-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * call.c (build_new_function_call): Remove extraneous test. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_return_stmt): We should mark the + trees as TREE_NO_WARNING unconditionally (the actual check has + to be done separately). + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (get_or_insert_coroutine_info): Use a cleared + allocator. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Adjust struct use to C++ style. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Mark static trees with GTY. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * constexpr.c (potential_constant_expression_1): Update comment. + * coroutines.cc: Update comments and use of extended format print + options. + * decl.c (emit_coro_helper): Add a comment. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Restore checks for and + skipping of, this pointers in ctors and dtors. + +2020-01-10 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/std/coroutine: Adjust whitespace. Add a definition + for the spaceship operator on coroutine handles. + +2020-01-09 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/std/coroutine: Correct pathname in the edit header. + +2020-01-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * function.h: Fix trailing whitespace. + +2020-01-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_validate_builtin_call): Remove the name + of the currently unused argument. + +2020-01-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Handle use of overloaded + operator delete. + (morph_fn_to_coro): Handle use of overloaded operator new. + + gcc/testsuite/ + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Rename... + * g++.dg/coroutines/torture/alloc-00-gro-on-alloc-fail.C: ... to this. + * g++.dg/coroutines/torture/alloc-01-overload-newdel.C: New test. + +2020-01-06 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r279893. + +2020-01-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_std_experimental): Remove unneeded code. + + libstdc++-v3/ + * include/Makefile.am: Move coroutine header source from + experimental to std. + * include/Makefile.in: Regenerated. + * include/experimental/coroutine: Move from here.. + * include/std/coroutine: ... to here. + +2020-01-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def: Update copyright year. + * coroutine-passes.cc: Likewise. + + gcc/cp/ + * coroutines.cc: Likewise. + + gcc/testsuite/ + * g++.dg/coroutines/coroutines.exp: Likewise. + + libstdc++-v3/ + * include/experimental/coroutine: Likewise. + +2019-12-31 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-await-syntax-01-outside-fn.C: Use coro + namespace; + * g++.dg/coroutines/co-await-syntax-02-outside-fn.C: Likewise. + * g++.dg/coroutines/co-await-syntax-04-ctor-dtor.C: Likewise. + * g++.dg/coroutines/co-await-syntax-05-constexpr.C: Likewise. + * g++.dg/coroutines/co-await-syntax-06-main.C: Likewise. + * g++.dg/coroutines/co-await-syntax-07-varargs.C: Likewise. + * g++.dg/coroutines/coro.h: Check for the coroutines header in + the top level before trying the experimental case. + +2019-12-30 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r279761. + +2019-12-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * call.c (build_new_function_call): Validate coroutine builtins + arguments. + * coroutines.cc (coro_validate_builtin_call): New. + * cp-tree.h (coro_validate_builtin_call): New. + +2019-12-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * builtin-types.def (BT_CONST_SIZE): New. + (BT_FN_PTR_PTR_SIZE_BOOL): Update this... + (BT_FN_PTR_PTR_CONST_SIZE_BOOL): ... to this. + * coroutine-builtins.def (BUILT_IN_CORO_PROMISE): Use revised + builtin signature. + +2019-12-27 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (execute_early_expand_coro_ifns): + Remove unneeded control flow and reindent. + +2019-12-27 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (lower_coro_builtin): Re-indent. + (make_pass_coroutine_lower_builtins): Spelling corrections. + +2019-12-24 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Remove unused var. + +2019-12-24 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (execute_early_expand_coro_ifns): Use + a worklist to contain and process the IFN_CO_ACTORs. + +2019-12-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-03-different GRO-type.C: + Rename to... + * g++.dg/coroutines/torture/co-ret-03-different-GRO-type.C: + ... this. + +2019-12-23 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r279715. + +2019-12-22 Iain Sandoe <iain@sandoe.co.uk> + + * g++.dg/coroutines/torture/func-params-0.C: Rename to... + * g++.dg/coroutines/torture/func-params-00.C: ... this. + * g++.dg/coroutines/torture/func-params-1.C: Rename to... + * g++.dg/coroutines/torture/func-params-01.C: ... this. + * g++.dg/coroutines/torture/func-params-2.C: Rename to... + * g++.dg/coroutines/torture/func-params-02.C: ... this. + * g++.dg/coroutines/torture/func-params-3.C: Rename to... + * g++.dg/coroutines/torture/func-params-03.C: ... this. + * g++.dg/coroutines/torture/func-params-4.C: Rename to... + * g++.dg/coroutines/torture/func-params-04.C: ... this. + * g++.dg/coroutines/torture/func-params-5.C: Rename to... + * g++.dg/coroutines/torture/func-params-05.C: ... this. + * g++.dg/coroutines/torture/func-params-6.C: Rename to... + * g++.dg/coroutines/torture/func-params-06.C: ... this. + +2019-12-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-yield-0-triv.C: Rename to... + * g++.dg/coroutines/torture/co-yield-00-triv.C: ... this. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Rename to... + * g++.dg/coroutines/torture/co-yield-01-multi.C: ... this. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Rename to... + * g++.dg/coroutines/torture/co-yield-02-loop.C: ... this. + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: Rename to... + * g++.dg/coroutines/torture/co-yield-03-tmpl.C: ... this. + * g++.dg/coroutines/torture/co-yield-strings.C: Rename to... + * g++.dg/coroutines/torture/co-yield-04-complex-local-state.C: + ... this.. + +2019-12-21 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Rename to... + * g++.dg/coroutines/torture/co-ret-00-void-return-is-ready.C: + ... this. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Rename to... + * g++.dg/coroutines/torture/co-ret-01-void-return-is-suspend.C: + ... this. + * g++.dg/coroutines/torture/co-ret-3.C: Rename to... + * g++.dg/coroutines/torture/co-ret-03-different: ... this. + * g++.dg/coroutines/torture/co-ret-4.C: Rename to... + * g++.dg/coroutines/torture/co-ret-04-GRO-nontriv.C: ... this. + * g++.dg/coroutines/torture/co-ret-5.C: Rename to... + * g++.dg/coroutines/torture/co-ret-05-return-value.C: ... this. + * g++.dg/coroutines/torture/co-ret-6.C: Rename to... + * g++.dg/coroutines/torture/co-ret-06-template-promise-val-1.C: + ... this. + * g++.dg/coroutines/torture/co-ret-7.C: Rename to... + * g++.dg/coroutines/torture/co-ret-07-void-cast-expr.C: ... this. + * g++.dg/coroutines/torture/co-ret-8.C: Rename to... + * g++.dg/coroutines/torture/co-ret-08-template-cast-ret.C: ... this. + * g++.dg/coroutines/torture/co-ret-9.C: Rename to... + * g++.dg/coroutines/torture/co-ret-09-bool-await-susp.C: ... this. + * g++.dg/coroutines/torture/co-ret-10.C: Rename to... + * g++.dg/coroutines/torture/co-ret-10-expression-evaluates-once.C: + ... this + * g++.dg/coroutines/torture/co-ret-11.C: Rename to... + * g++.dg/coroutines/torture/co-ret-11-co-ret-co-await.C: ... this. + * g++.dg/coroutines/torture/co-ret-12.C: Rename to... + * g++.dg/coroutines/torture/co-ret-12-co-ret-fun-co-await.C: + ... this. + +2019-12-21 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-0-triv.C: Rename to... + * g++.dg/coroutines/torture/co-await-00-trivial.C: ... this. + * g++.dg/coroutines/torture/co-await-1-value.C: Rename to... + * g++.dg/coroutines/torture/co-await-01-with-value.C: ... this. + * g++.dg/coroutines/torture/co-await-2-xform.C: Rename to... + * g++.dg/coroutines/torture/co-await-02-xform.C: ... this.. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Rename to... + * g++.dg/coroutines/torture/co-await-03-rhs-op.C: ... this.. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Rename to... + * g++.dg/coroutines/torture/co-await-04-control-flow.C: ... this. + * g++.dg/coroutines/torture/co-await-5-loop.C: Rename to... + * g++.dg/coroutines/torture/co-await-05-loop.C: ... this. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Rename to... + * g++.dg/coroutines/torture/co-await-06-ovl.C: ... this. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Rename to... + * g++.dg/coroutines/torture/co-await-07-tmpl.C: ... this.. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Rename to... + * g++.dg/coroutines/torture/co-await-08-cascade.C: ... this. + * g++.dg/coroutines/torture/co-await-9-pair.C: Rename to... + * g++.dg/coroutines/torture/co-await-09-pair.C: ... this. + +2019-12-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Check for LAZY move ctors + and assigns. + +2019-12-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Consider CTORs and + DTORs. + +2019-12-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Account for capture of + co_await expression results by reference in call argument + lists. + (maybe_promote_captured_temps): Likewise. + +2019-12-18 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Delete allocated vec + if we are not going to use it. + +2019-12-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ChangeLog: + * coroutines.cc (build_co_await): Set the co_await expression + type to that of the await_resume call. + + gcc/testsuite/ + * g++.dg/coroutines/coro1-ret-int-yield-int.h: Add an awaitable + that returns a reference. + * g++.dg/coroutines/torture/call-03-temp-ref-co-aw.C: New test. + * g++.dg/coroutines/torture/co-await-12-operator-2.C: Make the + syntax more regular. + * g++.dg/coroutines/torture/co-await-13-return-ref.C: New test. + * g++.dg/coroutines/torture/co-yield-08-more-refs.C: New test. + * g++.dg/coroutines/torture/co-yield-09-more-templ-refs.C: New test. + +2019-12-16 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r279408. + +2019-12-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Check for blank lines before functions. + Check comment wrapping. + * decl.c (emit_coro_helper): Adjust a comment. + +2019-12-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (create_anon_label_with_ctx): Mark created + label as used. + (create_named_label_with_ctx): Likewise. + +2019-12-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/C + * g++.dg/coroutines/torture/func-params-6.C: New test. + +2019-12-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_local_var_uses): Adjust frame entry + name for lambda capture proxies. + +2019-12-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct __local_vars_frame_data): Add fields to + collect lambda captures. + (register_local_var_uses): Register lambda captures separately. + (morph_fn_to_coro): For each lambda capture, create a local proxy + and initialise the frame copy from this. + + gcc/testsuite/ + * g++.dg/coroutines/torture/class-04-lambda-1.C: Avoid dangling ref + to a parameter. + * g++.dg/coroutines/torture/class-05-lambda-capture-copy-local.C: New. + * g++.dg/coroutines/torture/class-06-lambda-capture-ref.C: New test. + * g++.dg/coroutines/torture/lambda-05-capture-copy-local.C: New test. + * g++.dg/coroutines/torture/lambda-06-multi-capture.C: New test. + * g++.dg/coroutines/torture/lambda-07-multi-yield.C: New test. + * g++.dg/coroutines/torture/lambda-08-co-ret-parm-ref.C: New test. + +2019-12-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + + PR c++/92933 + * coroutines.cc (register_local_var_uses): Handle unnamed + compiler-generated local variables. + + gcc/testsuite/ + * g++.dg/coroutines/torture/pr92933.C: New test. + +2019-12-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-await-syntax-08-lambda-auto.C: Use + correct dg options for syntax check. + * g++.dg/coroutines/co-return-syntax-09-lambda-auto.C: Likewise. + * g++.dg/coroutines/co-yield-syntax-09-lambda-auto.C: Likewise. + +2019-12-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/class-04-lambda-1.C: New test. + * g++.dg/coroutines/torture/lambda-00-co-ret.C: New test. + * g++.dg/coroutines/torture/lambda-01-co-ret-parm.C: New test. + * g++.dg/coroutines/torture/lambda-02-co-yield-values.C: New test. + * g++.dg/coroutines/torture/lambda-03-auto-parm-1.C: New test. + * g++.dg/coroutines/torture/lambda-04-templ-parm.C: New test. + +2019-12-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_function_valid_p): Return false if we + find inconsistent return information. + * decl.c (finish_function): If the morph fails, assume that + we have nothing interesting in the function body. + +2019-12-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-await-syntax-08-lambda-auto.C: New test. + * g++.dg/coroutines/co-return-syntax-09-lambda-auto.C: New test. + * g++.dg/coroutines/co-yield-syntax-09-lambda-auto.C: New test. + +2019-12-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/class-00-co-ret.C: New test. + * g++.dg/coroutines/torture/class-01-co-ret-parm.C: New test. + * g++.dg/coroutines/torture/class-02-templ-parm.C: New test. + * g++.dg/coroutines/torture/class-03-operator-templ-parm.C: New test. + +2019-12-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * constexpr.c (potential_constant_expression_1): Add + CO_RETURN_EXPR to the list of coroutine exclusions. + +2019-12-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro1-ret-int-yield-int.h: Use long + format for long data. + +2019-12-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-return-syntax-01-outside-fn.C: New test. + * g++.dg/coroutines/co-return-syntax-02-outside-fn.C: New test. + * g++.dg/coroutines/coro-auto-fn.C: Rename to... + * g++.dg/coroutines/co-return-syntax-03-auto.C: ... this. + * g++.dg/coroutines/coro-context-ctor-dtor.C: Rename to... + * g++.dg/coroutines/co-return-syntax-04-ctor-dtor.C: ... this. + * g++.dg/coroutines/coro-constexpr-fn.C: Rename to... + * g++.dg/coroutines/co-return-syntax-05-constexpr-fn.C: ... this. + * g++.dg/coroutines/coro-context-main.C: Rename to... + * g++.dg/coroutines/co-return-syntax-06-main.C: ... this. + * g++.dg/coroutines/coro-context-vararg.C: Rename to... + * g++.dg/coroutines/co-return-syntax-07-vararg.C: ... this. + * g++.dg/coroutines/coro-bad-return.C: Rename to... + * g++.dg/coroutines/co-return-syntax-08-bad-return.C: ... this.. + +2019-12-09 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r279104. + +2019-12-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-12-operator-2.C: New test. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Make the operator + result participate in the output. + +2019-12-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (execute_early_expand_coro_ifns): Early + exit on first non-label. + +2019-12-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_coro_traits_template_class): Use pre- + built namespace. + (find_coro_handle_type): Likewise. + (coro_promise_type_found_p): Initialise namespace and void + coro handle trees. + +2019-12-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ChangeLog: + * coroutines.cc (find_coro_traits_template_decl): Rename forward + declaration to... + (find_coro_traits_template_class): ... this. + (find_std_experimental): Quote std::experimental. + +2019-12-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Just formatting change. + * g++.dg/coroutines/coro1-ret-int-yield-int.h: Add return_void. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Add missing cast. + * g++.dg/coroutines/torture/co-ret-5.C: Use boiler-plate header. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + +2019-12-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_await_expr): Check the function args + for dependent types as well as the return. + (finish_co_yield_expr): Likewise. + (finish_co_return_stmt): Likewise. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-10-template-fn-arg.C: New test. + * g++.dg/coroutines/torture/co-await-11-forwarding.C: New test. + * g++.dg/coroutines/torture/co-ret-13-template-2.C: New test. + * g++.dg/coroutines/torture/co-ret-14-template-3.C: New test. + * g++.dg/coroutines/torture/co-yield-07-template-fn-param.C: New test. + +2019-12-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_std_experimental): Check for NULL + tree return. + (find_coro_traits_template_decl): Renamed to... + (find_coro_traits_template_class): ...this; revise to use a + TYPE_ARGUMENT_PACK for the second param to the traits lookup. + Pass the function in instead of assuming we should find it in + current_function_decl. + (find_coro_handle_type): Show errors or warnings. + (find_promise_type): Rename variables. Show errors and warnings. + (coro_promise_type_found_p): Revise comments and variable names. + +2019-12-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro1-ret-int-yield-int.h: Extract + awaitable, await_transform and promise CTOR from tests. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Use + common header. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + +2019-12-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ChangeLog: + * g++.dg/coroutines/co-yield-syntax-0.C: Rename to... + * g++.dg/coroutines/co-yield-syntax-00-needs-expr.C: ...this + * g++.dg/coroutines/co-yield-syntax-1.C: Rename to... + * g++.dg/coroutines/co-yield-syntax-01-outside-fn.C: ...this + * g++.dg/coroutines/co-yield-syntax-2.C: Rename to... + * g++.dg/coroutines/co-yield-syntax-02-outside-fn.C: ...this. + * g++.dg/coroutines/co-yield-syntax-03-auto.C: New test. + * g++.dg/coroutines/co-yield-syntax-04-ctor-dtor.C: New test. + * g++.dg/coroutines/co-yield-syntax-05-constexpr.C: New test. + * g++.dg/coroutines/co-yield-syntax-06-main.C: New test. + * g++.dg/coroutines/co-yield-syntax-07-varargs.C: New test. + * g++.dg/coroutines/co-yield-syntax-3.C: Rename to... + * g++.dg/coroutines/co-yield-syntax-08-needs-expr.C: ...this. + +2019-12-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-await-syntax-0.C: Rename to... + * g++.dg/coroutines/co-await-syntax-00-needs-expr.C: ... this. + * g++.dg/coroutines/co-await-syntax-01-outside-fn.C: New test. + * g++.dg/coroutines/co-await-syntax-02-outside-fn.C: New test. + * g++.dg/coroutines/coro-await-context-auto-fn.C: Rename to... + * g++.dg/coroutines/co-await-syntax-03-auto.C: ... this. + * g++.dg/coroutines/co-await-syntax-04-ctor-dtor.C: New test. + * g++.dg/coroutines/co-await-syntax-05-constexpr.C: New test. + * g++.dg/coroutines/co-await-syntax-06-main.C: New test. + * g++.dg/coroutines/co-await-syntax-07-varargs.C: New test. + +2019-12-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-3.C: Tidy testcase. + * g++.dg/coroutines/torture/co-await-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-await-1-value.C: Likewise. + * g++.dg/coroutines/torture/co-await-2-xform.C: Likewise. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Likewise. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Likewise. + * g++.dg/coroutines/torture/co-await-5-loop.C: Likewise. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Likewise. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Likewise. + * g++.dg/coroutines/torture/co-await-9-pair.C: Likewise. + * g++.dg/coroutines/torture/co-ret-10.C: Likewise. + * g++.dg/coroutines/torture/co-ret-11.C: Likewise. + * g++.dg/coroutines/torture/co-ret-12.C: Likewise. + * g++.dg/coroutines/torture/co-ret-3.C: Likewise. + * g++.dg/coroutines/torture/co-ret-4.C: Likewise. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-6.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-8.C: Likewise. + * g++.dg/coroutines/torture/co-ret-9.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/co-yield-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Likewise. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Likewise. + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-yield-strings.C: Likewise. + * g++.dg/coroutines/torture/exceptions-test-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-1.C: Likewise. + * g++.dg/coroutines/torture/func-params-2.C: Likewise. + * g++.dg/coroutines/torture/func-params-3.C: Likewise. + * g++.dg/coroutines/torture/func-params-4.C: Likewise. + * g++.dg/coroutines/torture/func-params-5.C: Likewise. + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Likewise. + * g++.dg/coroutines/torture/local-var-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-1.C: Likewise. + * g++.dg/coroutines/torture/local-var-2.C: Likewise. + * g++.dg/coroutines/torture/local-var-3.C: Likewise. + * g++.dg/coroutines/torture/local-var-4.C: Likewise. + * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Likewise. + +2019-12-05 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Handle CALL_EXPR. + + gcc/testsuite/ + * g++.dg/coroutines/coro1-ret-int-yield-int.h: New helper include. + * g++.dg/coroutines/torture/call-00-co-aw-arg.C: New test. + * g++.dg/coroutines/torture/call-01-multiple-co-aw.C: New test. + * g++.dg/coroutines/torture/call-02-temp-co-aw.C: New test. + * g++.dg/coroutines/torture/co-ret-11.C: New test. + * g++.dg/coroutines/torture/co-ret-12.C: New test. + * g++.dg/coroutines/torture/co-yield-05-co-aw.C: New test. + * g++.dg/coroutines/torture/co-yield-06-fun-parm.C: New test. + +2019-12-05 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (create_named_label_with_ctx): Adjust + comment. Don't mark our local labels as used. + (transform_await_expr): Update comments. + (build_actor_fn): Likewise. + (morph_fn_to_coro): Tidy asserts, and make them checking + variety. Remove development code. + +2019-12-04 Iain Sandoe <iain@sandoe.co.uk> + + libiberty/ + * cp-demangle.c (cplus_demangle_operators): Add the co_await + operator. + +2019-12-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (gate): Check for coroutine components in + addition to the coroutine enable flag before executing the IFN + lowering pass. + * function.h (struct function): Allocate a bit to indicate that + the function is a coroutine component. + + gcc/cp/ + * decl.c (emit_coro_helper): Set coroutine component bit when + needed. + (finish_function): Likewise. + +2019-12-02 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r278894. + +2019-12-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (lower_coro_builtin): Amend comments. + (execute_early_expand_coro_ifns): Expand CO_FRAME. + (execute_finalize_frame): Remove. + (class pass_coroutine_finalize_frame): Remove. + (make_pass_coroutine_finalize_frame): Remove. + * passes.def: Remove finalize frame pass. + * tree-pass.h (make_pass_coroutine_finalize_frame): Remove. + +2019-11-30 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (lookup_promise_member): Remove. + (coro_init_identifiers): New. + (coro_promise_type_found_p): Initialize the coroutines state + and identifiers lazily. + (lookup_promise_method): New. + (build_co_await): Use pre-built identifiers for coroutine, + promise and awaiter names. + (finish_co_await_expr): Likewise. + (finish_co_yield_expr): Likewise. + (finish_co_return_stmt): Likewise. + (co_await_expander): Likewise. + (build_actor_fn): Likewise. + (build_init_or_final_await): Likewise. + (morph_fn_to_coro): Likewise. + * cp-tree.h (enum cp_tree_index): Remove coroutine identifiers. + * decl.c (initialize_predefined_identifiers): Likewise. + +2019-11-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (lower_coro_builtin): Use nodes and APIs + consistent with other places in the middle end. + +2019-11-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc (lower_coro_builtin): Use ptr_type_node + throughout instead of building nodes each time. + +2019-11-27 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Update document group + information. + +2019-11-27 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-3.C: Move common code to + coro.h. + * g++.dg/coroutines/coro-bad-return.C: Likewise. + * g++.dg/coroutines/coro-context-vararg.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-1.C: Likewise. + * g++.dg/coroutines/coro-missing-ueh-2.C: Likewise. + * g++.dg/coroutines/coro-missing-ueh-3.C: Likewise. + * g++.dg/coroutines/coro-missing-ueh.h: Likewise. + * g++.dg/coroutines/torture/co-await-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-await-1-value.C: Likewise. + * g++.dg/coroutines/torture/co-await-2-xform.C: Likewise. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Likewise. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Likewise. + * g++.dg/coroutines/torture/co-await-5-loop.C: Likewise. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Likewise. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Likewise. + * g++.dg/coroutines/torture/co-await-9-pair.C: Likewise. + * g++.dg/coroutines/torture/co-ret-10.C: Likewise. + * g++.dg/coroutines/torture/co-ret-3.C: Likewise. + * g++.dg/coroutines/torture/co-ret-4.C: Likewise. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-6.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-8.C: Likewise. + * g++.dg/coroutines/torture/co-ret-9.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/co-yield-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Likewise. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Likewise. + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-yield-strings.C: Likewise. + * g++.dg/coroutines/torture/exceptions-test-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-1.C: Likewise. + * g++.dg/coroutines/torture/func-params-2.C: Likewise. + * g++.dg/coroutines/torture/func-params-3.C: Likewise. + * g++.dg/coroutines/torture/func-params-4.C: Likewise. + * g++.dg/coroutines/torture/func-params-5.C: Likewise. + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Likewise. + * g++.dg/coroutines/torture/local-var-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-1.C: Likewise. + * g++.dg/coroutines/torture/local-var-2.C: Likewise. + * g++.dg/coroutines/torture/local-var-3.C: Likewise. + * g++.dg/coroutines/torture/local-var-4.C: Likewise. + * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Likewise. + * g++.dg/coroutines/coro.h: Collect common code here. + +2019-11-26 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Use GNU convention for + naming. Use implementation-reserved identifiers. + +2019-11-25 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r278677. + +2019-11-24 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_coro_traits_template_decl): Use global + identifier. + (find_coro_handle_type): Likewise. + (find_promise_type): Likewise. + * cp-tree.h (enum cp_tree_index): Add indices for the coroutine + global identifiers. + (coro_traits_identifier): New. + (coro_handle_identifier): New. + (coro_promise_type_identifier): New. + * decl.c (initialize_predefined_identifiers): Initialize global + identifiers for coroutines. + +2019-11-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Updated to en_US spellings. Corrected more + punctuation in error messages. + +2019-11-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * config-lang.in (gtfiles): Add coroutines.cc. + * coroutines.cc (struct coroutine_info_hasher): New. + (coroutine_info_hasher::hash): New. + (coroutine_info_hasher::equal): New. + (get_or_insert_coroutine_info): New. + (get_coroutine_info): New. + (struct coroutine_info): Revise to use in a hash_table. + (coro_promise_type_found_p): Amend to use GTY coroutine_info. + (get_coroutine_promise_type): Likewise. + (get_coroutine_handle_type): Likewise. + (get_coroutine_self_handle_proxy): Likewise. + (get_coroutine_promise_proxy): Likewise. + +2019-11-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc(struct coroutine_info): Make C++ style, comment + fields. + (coro_promise_type_found_p): Adjust info type name. + (get_coroutine_promise_type): Likewise. + (get_coroutine_handle_type): Likewise. + (get_coroutine_self_handle_proxy): Likewise. + (get_coroutine_promise_proxy): Likewise. + (coro_common_keyword_context_valid_p): Adjust error message line + wrapping. + (coro_function_valid_p): Fix comment line wrap. + (enum suspend_point_kind): New. + (build_co_await): Use suspend_point_kind enum. Amend comments, + remove TYPE_CANONICAL() lookup. + (finish_co_await_expr): Remove extra checks on expression, use + Use suspend_point_kind enum. + (finish_co_yield_expr): Likewise. + (co_await_expander): Likewise. + (build_init_or_final_await): Likewise. + + gcc/testsuite/ + * g++.dg/coroutines/co-await-syntax-0.C: New test. + * g++.dg/coroutines/co-yield-syntax-0.C: New test. + +2019-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ChangeLog: + * cp-tree.def (CO_RETRN_EXPR): Rename this to ... + (CO_RETURN_EXPR): ... this. + * coroutines.cc (finish_co_return_stmt): Rename CO_RETRN_EXPR. + (coro_maybe_expand_co_return): Likewise. + * cp-objcp-common.c (cp_common_init_ts): Likewise. + * pt.c (tsubst_expr): Likewise. + * tree.c (cp_walk_subtrees): Likewise. + +2019-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Revise includes. + (debug_tree): Remove debug code. + (lookup_promise_member): Fix whitespace. + (find_coro_traits_template_decl): Adjust comments, fix error + message punctuation. + (get_coroutine_promise_type): Adjust style. + (get_coroutine_handle_type): Likewise. + (get_coroutine_self_handle_proxy): Likewise. + (get_coroutine_promise_proxy): Likewise. + (coro_common_keyword_context_valid_p): Add references to the + standards sections. + to the comments. + (coro_function_valid_p): Fix error message punctuation. + (build_co_await): Fix comments, fix case of a variable name. + (finish_co_await_expr): Fix comments. + (finish_co_yield_expr): Assert correct parser output. + (check_co_return_expr): Delete. + (finish_co_return_stmt): Remove unused code, correct some comments. + (register_await_info): Remove debug code. + (get_await_suspend_return_type): Likewise. + (captures_temporary): Likewise. + (register_local_var_uses): Likewise. + + gcc/testsuite/ + * g++.dg/coroutines/coro-bad-return.C: Update the error message. + +2019-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_maybe_expand_co_return): Ensure that an + expression is void type before inserting it. Update comments + to include the standard section refs. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-10.C: New test. + * g++.dg/coroutines/torture/co-ret-7.C: Check that the void + expression is called exactly once. + +2019-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Remove references to + __builtin_coro_is_suspended. + +2019-11-18 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Correct condition on the + early return from this callback. + +2019-11-18 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r278390. + +2019-11-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def: Update comments. + * coroutine-passes.cc: Likewise. + * internal-fn.c: Likewise. + + gcc/c-family/ + * c-common.h: Likewise. + + gcc/cp/ + * coroutines.cc: Likewise. + * tree.c: Likewise. + + libstdc++-v3/ + * include/experimental/coroutine: Likewise. + +2019-11-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.cc: Delete unused code. + +2019-11-16 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * constexpr.c (potential_constant_expression_1): Amend comments. + * parser.c (cp_parser_unary_expression): Likewise. + (cp_parser_jump_statement): Likewise. + +2019-11-16 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def: Tidy whitespace. + (BUILT_IN_CORO_IS_SUSPENDED): Delete. + (BUILT_IN_CORO_NOOP): Delete. + * coroutine-passes.cc (lower_coro_builtin): Remove lowering for + __builtin_coro_suspended. + + gcc/testsuite/ + * g++.dg/coroutines/coro-builtins.C: Remove checks for + __builtin_coro_suspended, __builtin_coro_noop. + * g++.dg/coroutines/torture/check-suspended.C: Remove. + * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Only + test suspended state if __builtin_coro_suspended is available. + + libstdc++-v3/ + * include/experimental/coroutine: Remove references to + __builtin_coro_suspended. + +2019-11-16 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c.opt: Remove coroutines-ts alias for the command line + flag. Do not enable coroutines for Objective-C++. + +2019-11-16 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Lots of whitespace fixes. + + gcc/ + * coroutine-passes.cc: Likewise. + +2019-11-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c: Rename to... + * coroutine-passes.cc: ... this. + +2019-11-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_promise_type_found_p): New. + (get_coroutine_promise_type): New. + (get_coroutine_handle_type): New. + (get_coroutine_self_handle_proxy): New. + (get_coroutine_promise_proxy): New. + (lookup_promise_member): Use local hash map state instead of the + function decl. + (coro_function_valid_p): Likewise. + (build_co_await): Likewise. + (finish_co_await_expr): Likewise. + (finish_co_yield_expr): Likewise. + (finish_co_return_stmt): Likewise. + (build_actor_fn): Likewise. + (build_init_or_final_await): Likewise. + (morph_fn_to_coro): Likewise. + * cp-tree.h (struct GTY): Remove coroutine state fields. + (DECL_COROUTINE_HANDLE_TYPE): Remove. + (DECL_COROUTINE_SELF_H_PROXY): Remove. + (DECL_COROUTINE_PROMISE_TYPE): Remove. + (DECL_COROUTINE_PROMISE_PROXY): Remove. + (DECL_COROUTINE_FIRST_KEYWD_LOC): Remove. + +2019-11-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Mark as coroutine. + (build_destroy_fn): Likewise. + +2019-11-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Update to n4835. + + libstdc++-v3/ + * include/experimental/coroutine: Fill in section names, update + section numbers to C++20 CD (n4835). + +2019-11-13 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-3.C: Adjust namespace. + * g++.dg/coroutines/coro-bad-return.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/torture/check-suspended.C: Likewise. + * g++.dg/coroutines/torture/co-ret-3.C: Likewise. + * g++.dg/coroutines/torture/co-ret-4.C: Likewise. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-6.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-8.C: Likewise. + * g++.dg/coroutines/torture/co-ret-9.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: Likewise. + * g++.dg/coroutines/torture/exceptions-test-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-1.C: Likewise. + * g++.dg/coroutines/torture/local-var-2.C: Likewise. + * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Likewise. + * g++.dg/coroutines/torture/co-await-0-triv.C: Adjust namespace, add + dg-run. + * g++.dg/coroutines/torture/co-await-1-value.C: Likewise. + * g++.dg/coroutines/torture/co-await-2-xform.C: Likewise. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Likewise. + * g++.dg/coroutines/torture/co-await-5-loop.C: Likewise. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Likewise. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Likewise. + * g++.dg/coroutines/torture/co-await-9-pair.C: Likewise. + * g++.dg/coroutines/torture/co-yield-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Likewise. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Likewise. + * g++.dg/coroutines/torture/co-yield-strings.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-1.C: Likewise. + * g++.dg/coroutines/torture/func-params-2.C: Likewise. + * g++.dg/coroutines/torture/func-params-3.C: Likewise. + * g++.dg/coroutines/torture/func-params-4.C: Likewise. + * g++.dg/coroutines/torture/func-params-5.C: Likewise. + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Likewise. + * g++.dg/coroutines/torture/local-var-3.C: Likewise. + * g++.dg/coroutines/torture/local-var-4.C: Likewise. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Adjust namespace, add + dg-run, correct check values. + +2019-11-12 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Adjust to use spaceship operator + when it's available. + +2019-11-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c-cppbuiltin.c (c_cpp_builtins): Adjust value for + __cpp_coroutines. + + gcc/testsuite/ + * g++.dg/coroutines/coro-pre-proc.C: Adjust test value. + +2019-11-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_early_expand_coro_ifns): + Fix whitespace. + + gcc/cp/ + * coroutines.cc (find_coro_traits_template_decl): Fix whitespace. + (build_co_await): Likewise. + (finish_co_await_expr): Likewise. + (co_return_expander): Likewise. + (co_await_expander): Likewise. + (struct __await_xform_data): Likewise. + (transform_await_expr): Likewise. + (transform_local_var_uses): Likewise. + (build_destroy_fn): Likewise. + (captures_temporary): Likewise. + (morph_fn_to_coro): Likewise. + * cp-tree.def: Likewise. + * decl.c (finish_function): Likewise. + * parser.c (cp_parser_yield_expression): Likewise. + +2019-11-11 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r278049. + * gcc/configure: Regenerate. + +2019-11-04 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r277764. + * gcc/configure: Regenerate. + +2019-10-28 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Include <bits/stl_function.h> + instead of <functional>. + +2019-10-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (first_vuser): Delete. + (move_edge_and_update_vdef): Delete. + (execute_expand_coro_ifns): Delete. + (class pass_coroutine_expand_ifns): Delete. + (make_pass_coroutine_expand_ifns): Delete. + * passes.def: Delete coroutine_expand_ifns pass. + * tree-pass.h (make_pass_coroutine_expand_ifns): Delete. + +2019-10-28 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r277499. + +2019-10-21 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r277221. + +2019-10-14 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r276952. + +2019-10-11 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine (noop_coroutine_handle): New. + +2019-10-11 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Fix long lines. + +2019-10-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/exceptions-test-0.C: New test. + +2019-10-07 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r276647. + +2019-10-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Include + <new> when available. + +2019-10-07 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine: Include <functional>. + +2019-10-04 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine (operator!=): New. + (operator<): New. + (operator>): New. + (operator<=): New. + (operator>=): New. + +2019-10-02 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/experimental/coroutine (operator==): New. + +2019-10-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-yield-strings.C: Update the test + to show that a DTOR for coro state is run on scope exit. Make + the test run. + +2019-09-30 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r276292. + +2019-09-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Include experimental/coroutine when + it is available. + +2019-09-25 Iain Sandoe <iain@sandoe.co.uk> + + libstdc++-v3/ + * include/Makefile.am (experimental_headers): Add + experimental/coroutine. + * include/Makefile.in: Regenerated. + * include/experimental/coroutine: New file. + +2019-09-23 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r276035. + +2019-09-18 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_early_expand_coro_ifns): + Remove redundant yield logic labels. + +2019-09-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-yield-strings.C: New test. + +2019-09-11 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r275623. + +2019-09-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro-missing-ueh-1.C: New test. + * g++.dg/coroutines/coro-missing-ueh-2.C: New test. + * g++.dg/coroutines/coro-missing-ueh-3.C: New test. + * g++.dg/coroutines/coro-missing-ueh.h: New. + +2019-09-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (captures_temporary): Where the 'this' pointer + addresses a temporary object, promote that to a frame variable. + +2019-09-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (maybe_promote_captured_temps): Check that there + are any blocks in the stack before using. + +2019-09-06 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r275450. + +2019-09-05 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Move the block link handling to + the morph function. + (morph_fn_to_coro): Reorganise block re-writing to handle the case + for exception wrapper. Implement exception wrapper onto the users + function statements. + +2019-09-04 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Ensure that we stitch in subblocks + of the original function top block. + (morph_fn_to_coro): Create a new top block for the ramp, rather than + reusing the one from the original function. + +2019-09-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (move_edge_and_update): New. + (execute_early_expand_coro_ifns): New. + (class pass_coroutine_early_expand_ifns): New. + (make_pass_coroutine_early_expand_ifns): New. + (pass_coroutine_expand_ifns::gate): Disable. + * passes.def: Add coroutine_early_expand_ifns pass. + * tree-pass.h (make_pass_coroutine_early_expand_ifns): New declaration. + +2019-09-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutines.cc (struct __susp_frame_data): Arrange to record + temporary vars caputered by reference. + (captures_temporary): New callback. + (register_awaits): Walk the initialier for captured temporaries. + (maybe_promote_captured_temps): New, if we see one or more temps + captured by reference promote them to regular vars. + (await_statement_walker): Walk bind expressions so that we can + record the scope into which new insertions would be made. + (morph_fn_to_coro): Initialise additional suspend point vars. + Update comments. + +2019-08-27 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h (__CORO_H_N4775): Change to... + ... this __CORO_H_N4830. Revise hidden namespace. + * g++.dg/coroutines/co-yield-syntax-3.C: Use revised namespace. + * g++.dg/coroutines/coro-bad-return.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/torture/check-suspended.C: Likewise. + * g++.dg/coroutines/torture/co-await-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-await-1-value.C: Likewise. + * g++.dg/coroutines/torture/co-await-2-xform.C: Likewise. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Likewise. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Likewise. + * g++.dg/coroutines/torture/co-await-5-loop.C: Likewise. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Likewise. + * g++.dg/coroutines/torture/co-await-7-tmpl.C: Likewise. + * g++.dg/coroutines/torture/co-await-8-cascade.C: Likewise. + * g++.dg/coroutines/torture/co-await-9-pair.C: Likewise. + * g++.dg/coroutines/torture/co-ret-3.C: Likewise. + * g++.dg/coroutines/torture/co-ret-4.C: Likewise. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-6.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-8.C: Likewise. + * g++.dg/coroutines/torture/co-ret-9.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/co-yield-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Likewise. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Likewise. + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-1.C: Likewise. + * g++.dg/coroutines/torture/func-params-2.C: Likewise. + * g++.dg/coroutines/torture/func-params-3.C: Likewise. + * g++.dg/coroutines/torture/func-params-4.C: Likewise. + * g++.dg/coroutines/torture/func-params-5.C: Likewise. + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: Likewise. + * g++.dg/coroutines/torture/local-var-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-1.C: Likewise. + * g++.dg/coroutines/torture/local-var-2.C: Likewise. + * g++.dg/coroutines/torture/local-var-3.C: Likewise. + * g++.dg/coroutines/torture/local-var-4.C: Likewise. + * g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Likewise. + * g++.dg/coroutines/coro-pre-proc.C: Likewise. Check revised pre- + proc value. + +2019-08-27 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c-cppbuiltin.c (c_cpp_builtins): Update builtin define to date + of post-Cologne c++20 working draft. + +2019-08-26 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r274922. + +2019-08-20 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r274689. + +2019-08-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Wrap the internal fn + call for IFN_CO_SUSPN into a full expression. + +2019-08-18 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct __susp_frame_data): Add a counter for awaits. + (register_awaits): Account the handled await. + (await_statement_walker): New, walk statements checking each for + awaits. + (morph_fn_to_coro): Use await_statement_walker instead of calling + register_awaits directly. + +2019-08-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Remove unused lowering. + +2019-08-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Delete dead code. + +2019-08-12 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r274275. + +2019-08-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_expand_coro_ifns): Update call + argument description. + +2019-08-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (lower_coro_builtin): Lower IFN_CO_SUSPN. + * internal-fn.c (expand_CO_SUSPN): New. + * internal-fn.def (CO_SUSPN): New. + + gcc/cp/ChangeLog: + * coroutines.cc (co_await_expander): Encode the scope exiting + return as an internal function. + +2019-08-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * passes.def: Lower coroutine builtins after the EH/cleanup + expansions. + +2019-08-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * internal-fn.def (CO_YIELD): Remove argument signature. + +2019-08-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct __coro_aw_data): Reorder await state + vars struct and update comments. + (expand_co_awaits): Likewise. + +2019-08-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (transform_local_var_uses): Remove dead instances + of local variables copied to the frame. + +2019-08-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ChangeLog: + * coroutines.cc (transform_local_var_uses): Initialise frame + copies of local vars directly. + +2019-08-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Initialise the coro frame + pointer before passing to IFN_CO_FRAME. + +2019-08-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Discard unused code for + explicit GRO destruction. + +2019-08-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Create the return object + in place when possible. + +2019-08-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Lookup and use delete operator + instead of builtin_free(). + +2019-08-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (transform_local_var_uses): If a local var needs + constructing, then do so. + +2019-08-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_awaits): Set the handle for the + await_suspend() return to the correct type. + +2019-08-05 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r274111. + +2019-08-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Check for the availability of + a move CTOR and use it if present. + +2019-08-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): Expect a record type for a + await_suspend() returning a handle. + (co_await_expander): Deal with the three cases of return type + that are allowed for await_suspend(). + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-9.C: New test. + +2019-08-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (get_await_suspend_return_type): Handle TARGET_EXPR + as well as CALL_EXPR. + +2019-08-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (transform_await_expr): Rearrange and cater for the + await_suspend() return type. + +2019-08-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Simplify argument computation + for await_suspend(). + +2019-08-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct suspend_point_info): Add space for the + await_suspend method type. Rename the handle field. + (transform_await_expr): Rename the handle field. + (register_await_info): Cache the suspend method return type. + (get_await_suspend_return_type): New. + (register_awaits): Handle caching the await_suspend return type. + (morph_fn_to_coro): Ensure that we have the right suspend types + for initial and final suspends. + +2019-07-31 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_await_expr): Use the expression type as + the tree type when processing template decls. + (finish_co_yield_expr): Likewise. + +2019-07-30 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Check that the promise needs + constructing before building one. + +2019-07-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Comment unused param. + +2019-07-29 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r273864. + +2019-07-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): If we use the allocation failure + method, mark it as used. + +2019-07-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_finalize_frame): Copy the first argument + for now. + * internal-fn.def (CO_FRAME): Mark as pure. + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): If the user has declared a method + to handle allocation failure, use a no-throw new and check its return + using the provided method if the return is NULL. + + gcc/testsuite/ + * g++.dg/coroutines/torture/gro_on_alloc_fail_0.C: New test. + +2019-07-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/coro-torture.exp: Default to c++17. + +2019-07-22 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r273656. + +2019-07-21 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Remove unused var. + +2019-07-21 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (lower_coro_builtin): Revert changes to handle + three callback pointers. Reimplement the is_suspended check to be a + test for non-null on the destroy() function pointer field. + + gcc/cp/ + * coroutines.cc (build_actor_fn): Remove support for the "is_suspended" + test. + (build_suspended_fn): Likewise. + (register_local_var_uses): Likewise. + (morph_fn_to_coro): Likewise. + * cp-tree.h (morph_fn_to_coro): Likewise. + * decl.c (finish_function): Likewise. + +2019-07-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * internal-fn.def (CO_YIELD): Add function signature. + (CO_FRAME): Make leaf. + + gcc/cp/= + * coroutines.cc (co_await_expander): Add coro frame as a call arg to + IFN_CO_YIELD calls. + +2019-07-18 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_finalize_frame): New. + (class pass_coroutine_finalize_frame): New. + (make_pass_coroutine_finalize_frame): New. + * passes.def (pass_coroutine_finalize_frame): New. + * tree-pass.h (make_pass_coroutine_finalize_frame): New. + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Remove the generation of the call + to builtin malloc and replace with IFN_CO_FRAME. + +2019-07-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (get_fn_local_identifier): Use the mangled function + name as the base of function-local identifiers, if it's available. + +2019-07-16 Iain Sandoe <iain@sandoe.co.uk> + + * coroutines.cc (get_fn_local_identifier): Use the instantiated type + names to unique the function-local identifiers in instantiations. + (morph_fn_to_coro): Use get_fn_local_identifier to make the frame + identifier. + +2019-07-16 Iain Sandoe <iain@sandoe.co.uk> + + * coroutines.cc (register_param_uses): Back out forced type completion + for referenced parameter types. + +2019-07-15 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_param_uses): Convert reference types to + pointers. + (morph_fn_to_coro): Add an explicit type conversion in the case that + the passed-by type differs from the actual. + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-5.C: New test. + +2019-07-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_param_uses): Ensure complete types for + params. Save actual frame type. Tidy up a useless statement. + (morph_fn_to_coro): Used the actual saved frame type to figure + determine if construction is needed. + +2019-07-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp + * coroutines.cc (co_await_expander): Exit early for statement class. + +2019-07-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp + * coroutines.cc (co_await_expander): Recurse into co_await sub-trees. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-8-cascade.C: New test. + * g++.dg/coroutines/torture/co-await-9-pair.C: New test. + +2019-07-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander):Use reordered expression vars. + (transform_await_expr): Re-order expression vars. + +2019-07-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * tree.c (cp_walk_subtrees): Handle CO_YIELD_EXPR, CO_AWAIT_EXPR and + CO_RETRN_EXPR. + +2019-07-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Fix line wrapping, leading and trailing whitespace. + +2019-07-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_await_expr): Return early with the original + expression when we have incomplete promise type. + Amend comments related to co_await. + * pt.c (tsubst_copy): Handle CO_AWAIT_EXPR. + (tsubst_expr): Likewise. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-7-tmpl.C: New test. + +2019-07-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_yield_expr): Return early with the original + expression when we have incomplete promise type. + * pt.c (tsubst_expr): Handle CO_YIELD_EXPR. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-yield-3-tmpl.C: New test. + +2019-07-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (finish_co_return_stmt): Return early with the original + expression when we have incomplete promise type. + * pt.c (tsubst_expr): Handle CO_RETRN_EXPR. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-8.C: New test. + +2019-07-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.def (CO_AWAIT_EXPR): Amend operand descriptions. + +2019-07-08 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r272193. + gcc/ + * configure: Regenerated. + + gcc/c-family/ + * c.opt: Remerge modules flags. + +2019-07-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Connect up the suspension checking built- + in. + * g++.dg/coroutines/torture/check-suspended.C: New test. + +2019-07-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def (BUILT_IN_CORO_IS_SUSPENDED): New. + * coroutine-passes.c (lower_coro_builtin): Lower suspension check + builtin. + + gcc/cp/ + * coroutines.cc (build_suspended_fn): New helper function. + (morph_fn_to_coro): Add and populate a function pointer field for the + suspension-checking routine. + * cp-tree.h (morph_fn_to_coro): Alter prototype. + * decl.c (finish_function): Generate output for the suspension check + helper. + + gcc/testsuite/ + * g++.dg/coroutines/coro-builtins.C (main): Test that we handle the + new __builtin_coro_is_suspended builtin. + +2019-07-06 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Clear suspended status on entry + set it on suspended returns. + (build_destroy_fn): Comment change only. + (register_local_var_uses): Rename suspension status field. + (morph_fn_to_coro): Likewise. Reorder code that initialises the + field. + +2019-07-01 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r272840. + +2019-06-30 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_maybe_expand_co_return): New. + (co_return_expander): Handle statement lists and insert the expanded + co_return statements instead of nesting them. + (build_actor_fn): Update comment. + +2019-06-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): If the body is empty or an error + mark, then we can't determine any more so punt. If the body is marked + noexcept, remember this and pass on to the ramp. Some small comment + changes are included. + * decl.c (finish_function): Handle exception blocks from the ramp. + + gcc/testsuite/ + * g++.dg/coroutines/coroutines.exp: + * g++.dg/coroutines/torture/coro-torture.exp: + +2019-06-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-3.C: Remove explicit "inline" from + the test declaration. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + +2019-06-29 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-3.C: GNU-ify test function + declaration. + * g++.dg/coroutines/coro-bad-return.C: Likewise. + * g++.dg/coroutines/coro-context-vararg.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/torture/co-await-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-await-1-value.C: Likewise. + * g++.dg/coroutines/torture/co-await-2-xform.C: Likewise. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: Likewise. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: Likewise. + * g++.dg/coroutines/torture/co-await-5-loop.C: Likewise. + * g++.dg/coroutines/torture/co-await-6-ovl.C: Likewise. + * g++.dg/coroutines/torture/co-ret-3.C: Likewise.: + * g++.dg/coroutines/torture/co-ret-4.C: Likewise. + * g++.dg/coroutines/torture/co-ret-5.C: Likewise. + * g++.dg/coroutines/torture/co-ret-6.C: Likewise. + * g++.dg/coroutines/torture/co-ret-7.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: Likewise. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: Likewise. + * g++.dg/coroutines/torture/co-yield-0-triv.C: Likewise. + * g++.dg/coroutines/torture/co-yield-1-multi.C: Likewise. + * g++.dg/coroutines/torture/co-yield-2-loop.C: Likewise. + * g++.dg/coroutines/torture/func-params-0.C: Likewise. + * g++.dg/coroutines/torture/func-params-1.C: Likewise. + * g++.dg/coroutines/torture/func-params-2.C: Likewise. + * g++.dg/coroutines/torture/func-params-3.C: Likewise. + * g++.dg/coroutines/torture/func-params-4.C: Likewise. + * g++.dg/coroutines/torture/local-var-0.C: Likewise. + * g++.dg/coroutines/torture/local-var-1.C: Likewise. + * g++.dg/coroutines/torture/local-var-2.C: Likewise. + * g++.dg/coroutines/torture/local-var-3.C: Likewise. + * g++.dg/coroutines/torture/local-var-4.C: Likewise. + +2019-06-24 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r272613. + +2019-06-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Run DTORs for params that had + corresponding CTORs. + (register_param_uses): Strip references. + (morph_fn_to_coro): Where the type of a param requires constucting + build a placement new for the frame entry constructed from the + param. Pass the list of constructed entries to the actor build fn. + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-4.C: New test. + +2019-06-17 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_local_var_uses): Make frame local var ids + unique for each bind scope. + + gcc/testsuite/ + * g++.dg/coroutines/torture/local-var-4.C: New test. + +2019-06-17 Iain Sandoe <iain@sandoe.co.uk> + + * g++.dg/coroutines/torture/local-var-0.C: New test. + * g++.dg/coroutines/torture/local-var-1.C: New test. + * g++.dg/coroutines/torture/local-var-2.C: New test. + * g++.dg/coroutines/torture/local-var-3.C: New test. + +2019-06-17 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r272370. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct __local_vars_transform): New. + (transform_local_var_uses): Initialise local variable frame + copies and then rewrite uses to them. + (build_actor_fn): Use transform_local_var_uses to rewrite local + variables. + (struct __local_vars_frame_data): New. + (register_local_var_uses): Make space for local vars in the frame. + (register_param_uses): Update comment about the frame. + (morph_fn_to_coro): Use register_local_var_uses to record the + local var space. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-4.C: Remove 'inline'. + * g++.dg/coroutines/torture/local-var-0.C: New test. + * g++.dg/coroutines/torture/local-var-1.C: New test. + * g++.dg/coroutines/torture/local-var-2.C: New test. + * g++.dg/coroutines/torture/local-var-3.C: New test. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Chain the new funtions + directly after the ramp. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Adjust scopes in the re- + mapped function. + (morph_fn_to_coro): Build new scope for the ramp. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_destroy_fn): Don't generate a BIND_EXPR. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-3.C: New test. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Return a default-constructed + object on morph error. + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-3.C (struct DummyYield): + * g++.dg/coroutines/coro-missing-gro.C (struct MissingGRO): + * g++.dg/coroutines/coro-missing-promise-yield.C (struct MissingPromiseYield): + * g++.dg/coroutines/coro-missing-ret-value.C (struct MissingRetValue): + * g++.dg/coroutines/coro-missing-ret-void.C (struct MissingRetVoid): + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Add location information to + generated trees. + (morph_fn_to_coro): Likewise. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coroutines.exp: Append '-fno-exceptions' to + the test flags. + +2019-06-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (create_anon_label_with_ctx): Moved. + (create_named_label_with_ctx): New Helper. + (co_await_expander): Use label creation helper. + (build_actor_fn): Likewise. + (morph_fn_to_coro): Likewise. + +2019-06-09 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r272095. + +2019-06-09 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Record every use of each function + param, not just the first one. + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-2.C: New test. + +2019-06-08 Iain Sandoe <iain@sandoe.co.uk> + + * coroutines.cc (build_actor_fn): Simplify the conditional call to + free the coroutine frame. + +2019-06-08 Iain Sandoe <iain@sandoe.co.uk> + + * coroutines.cc (co_return_expander): Look inside cleanup point + expressions, and expand co_returns inside, adding cleanup points + to the new sub-expressions where needed. + +2019-06-08 Iain Sandoe <iain@sandoe.co.uk> + + * coroutines.cc (coro_build_expr_stmt): New helper. + (coro_build_cvt_void_expr_stmt): New helper. + (co_await_expander): Use EXPR_STMT build helpers. + (build_actor_fn): Likewise. + (build_destroy_fn): Likewise. + (morph_fn_to_coro): Likewise. + +2019-06-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Avoid a maybe used uninitialised + warning. + +2019-06-08 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_make_frame_entry): New helper. + (register_awaits): Use coro_make_frame_entry() to build new frame + field entries. + (register_param_uses): Likewise. + (morph_fn_to_coro): Likewise. + +2019-06-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Rewrite uses of params in the + original function body with references to the saved frame version. + (struct __param_frame_data): New struct. + (register_param_uses): New function. + (morph_fn_to_coro): Record any params used within the original + function body. Make and initialise space for them in the frame. + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-1.C: New test. + +2019-06-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Manage the visited sets so + that they don't hang around for the entire duration of the func. + +2019-06-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Verify trees before and after. + +2019-06-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * decl.c (emit_coro_helper): Ensure that the folder cache is + clear before we fold each routine. + +2019-05-29 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r271729. + +2019-05-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Wrap call expressions in + expression statements where needed. + (morph_fn_to_coro): Likewise. + +2019-05-28 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * tree.c (build_call_expr_internal_loc_array): Make the argument + list match the declaration. + +2019-05-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Check if the promise has a CTOR + that takes the same param list as the function. use that if so else + use CTOR with empty param list. + + gcc/testsuite/ + * g++.dg/coroutines/torture/func-params-0.C: New. + +2019-05-12 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r271107. + + gcc/ + * configure: Regenerated. + + gcc/cp/ + * cp-objcp-common.c (cp_common_init_ts): Make coroutine + keywords MARK_TS_EXP. + * parser.c (cp_parser_jump_statement): Update to use + FNDECL_USED_AUTO. + * coroutines.cc: Likewise. + +2019-04-20 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r270468. + +2019-04-01 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r270053. + +2019-03-11 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r269569. + +2019-03-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Use a temporary expression for + the coroutine handle passed to await_suspend(), rather than a frame + entry. + +2019-03-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Use TARGET_EXPR in INIT_EXPR. + (build_actor_fn): Likewise. + (morph_fn_to_coro): Likewise. + +2019-03-11 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (struct __coro_ret_data): Remove blank line. + +2019-02-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * typeck.c: Move check_co_return_expr from here to ... + * coroutines.cc: ... Here and make it static. + * cp-tree.h (check_co_return_expr): Remove. + +2019-02-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (expand_co_returns): Remove dead code. + (build_actor_fn): Likewise. + +2019-02-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.h (COROUTINE_RETURN_P): Remove. + +2019-02-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_return_context_valid_p): Rename to + finish_co_return_stmt. (finish_co_return_stmt): Amend to return + CO_RETRN_EXPR, use promise proxy. + (struct __proxy_replace, replace_proxy): Move earlier in the source. + (struct __coro_ret_data): Add promise proxy member. + (co_return_expander): Revise to handle CO_RETRN_EXPR. + (expand_co_returns): Revise to handle replacement of promise proxy. + * cp-tree.h (co_return_context_valid_p): Remove. + * parser.c (cp_parser_jump_statement): Revise to use + finish_co_return_stmt only. + * semantics.c (finish_co_return_stmt): Remove. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): Free args vec after use. + (build_actor_fn): Likewise. + (morph_fn_to_coro): Likewise. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): We build the awaiter calls to + verify, so save them for expansion time. + (co_await_expander): Use saved awaiter calls instead of rebuilding + them. + (transform_await_expr): Substitute the proxy for self handle into + any of the calls that use it. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (__coro_aw_data): Add "self" handle field. + (co_await_expander): Collect the calls build at parse time instead + of building them again. Use the saved handle for "self". + (__await_xform_data): Add fields for the self handle. + (build_actor_fn): Transform the proxy for the "self" handle. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): initialize the "self" handle + slot. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Allocate a slot for "self" + handle in the coro frame. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_promise_type_found_p): Ensure that the + coro handle type is complete. + +2019-02-14 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_promise_type_found_p): Build a proxy for + the handle to coroutine 'self'. + * cp-tree.h (lang_decl_fn): Add self_h_proxy, amend comments. + (DECL_COROUTINE_SELF_H_PROXY): New. + +2019-02-13 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r268852. + gcc/ + * configure: Regenerated. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-await-0-triv.C: New. + * g++.dg/coroutines/torture/co-await-1-value.C: New. + * g++.dg/coroutines/torture/co-await-2-xform.C: New. + * g++.dg/coroutines/torture/co-await-3-rhs-op.C: New. + * g++.dg/coroutines/torture/co-await-4-control-flow.C: New. + * g++.dg/coroutines/torture/co-await-5-loop.C: New. + * g++.dg/coroutines/torture/co-await-6-ovl.C: New. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-yield-0-triv.C: New. + * g++.dg/coroutines/torture/co-yield-1-multi.C: New. + * g++.dg/coroutines/torture/co-yield-2-loop.C: New. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_expand_coro_ifns): Rewrite the tail of + .CO_YIELD IFN blocks. This is needed to avoid confusing the loop + verifier at O0 when we suddenly disconnect stuff inside loops. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_expand_coro_ifns): Just update comments + and diagnostic strings. NFC. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (move_edge_and_update_vdef): Don't recompute + dominators immediately, defer until the common code at the end. Note + this wasn't "wrong" it was just a waste of resources. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): implement co_await() operator + overload resolution. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_find_in_subtree): Fix unused parm. + (register_awaits): Likewise. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Adjust the expander to look + inside cleanup point exprs. The rewritten control flow needs to be + introduced at this level. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Use the rewritten co_resume() + call as a proof of principle. Eventually, we will use the three + calls built at parser time. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): Check the awaitable method + signatures more rigorously. Build the method calls for ready and + suspend - but don't record them (yet). + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_find_in_subtree): New. + (co_await_expander): Initial implementation of co_await, limited to + expressions without temporaries. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (replace_proxy, transform_await_expr, + transform_await_wrapper): New. + (build_actor_fn): Rewrite the proxy vars used at parse time to the + actual frame vars now we know them. Drop the synthesis of the initial + and final suspend points and use the ones generated at morph time. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_actor_fn): Use the new measured suspend point + count to build the resume and destroy dispatchers. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (register_await_info, register_awaits): New. + (morph_fn_to_coro): Record suspend points from the function body. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_init_or_final_await): New. + (morph_fn_to_coro): Use the co_await builder for initial and final + suspend. Rename the tree list variable used to build the known + coroutine frame entries. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Collect parse-related functions together, adjust + comments. NFC. + * cp-tree.def: Adjust comments. NFC. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * constexpr.c (potential_constant_expression_1): Declare that co_await + and co_yield expressions are not candidates for constexpr. + * coroutines.cc: Reorganise text to put the parser-related functions + together. Rename co_await_context_valid_p to finish_co_await_expr. + (finish_co_await_expr): Perform the check for p.await_transform(). + Use the common build_co_await() to complete the build. + * cp-tree.h: Rename co_await_context_valid_p to finish_co_await_expr. + * parser.c (cp_parser_unary_expression): Use finish_co_await_expr in + place of the temporary parse. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Rename co_yield_context_valid_p to + finish_co_yield_expr. (finish_co_yield_expr): Validate and build + yield_value() call, use build_co_await() to construct the co_await. + * cp-tree.h: Rename co_yield_context_valid_p to finish_co_yield_expr. + * parser.c (cp_parser_yield_expression): Revise to use + finish_co_yield_expr. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_co_await): New. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * call.c (add_builtin_candidates): Rename COAWAIT_EXPR to + CO_AWAIT_EXPR. (op_error, build_new_op_1): Likewise. + * coroutines.cc (co_await_expander, build_actor_fn) Likewise. + * cp-objcp-common.c (cp_common_init_ts): Rename COAWAIT_EXPR and + COYIELD_EXPR, add CO_RETRN_EXPR. + * cp-tree.def: Likewise. + * operators.def: Rename COAWAIT_EXPR. + * parser.c (cp_parser_unary_expression): Likewise. + (cp_parser_operator): Ensure CO_AWAIT_EXPR is recognised as a built- + in operator. + (cp_parser_yield_expression): Rename COYIELD_EXPR to CO_YIELD_EXPR. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_promise_type_found_p): Stash the location + of the first coroutine keyword seen. + * cp-tree.h (lang_decl_fn): Add first_coro_kw. + (DECL_COROUTINE_FIRST_KEYWD_LOC): New. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_promise_type_found_p): Build a promise var + to be used as a proxy for the eventual frame var. + * cp-tree.h (lang_decl_fn): Add promise_proxy. + (DECL_COROUTINE_PROMISE_PROXY): New. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_promise_type): Ensure that the promise + type is complete. + +2019-02-12 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_std_experimental): New. + (find_handle_type): Rename to find_coro_traits_template_decl. + (find_coro_handle_type): Rename vars, use factored function. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * parser.c (required_token): Add RT_CO_YIELD. + (cp_parser_yield_expression): New. + (cp_parser_assignment_expression): Handle co_yield. + (cp_parser_required_error): Handle RT_CO_YIELD. + + gcc/testsuite/ + * g++.dg/coroutines/co-yield-syntax-1.C: New. + * g++.dg/coroutines/co-yield-syntax-2.C: New. + * g++.dg/coroutines/co-yield-syntax-3.C: New. + * g++.dg/coroutines/coro-missing-promise-yield.C: New. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-objcp-common.c (cp_common_init_ts): Repurpose unused + CORO_ALLOCATOR to COYIELD_EXPR. + * cp-tree.def: Likewise. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_yield_context_valid_p): New. + * cp-tree.h (co_yield_context_valid_p): Declare. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): make sure that we can + really get a method that produces the return object. + * decl.c (finish_function): Update error exit for the case + where we fail to morph the coroutine. + + gcc/testsuite/ + * g++.dg/coroutines/coro-missing-gro.C: New. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc: Whitespace and comment and punctuation + changes. NFC. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Adjust the lookup for the + initial and final suspend point functions to force instantiation + of the promise. + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-6.C: Update test now that the + templatized version handles 'auto' return values for promise + members. + +2019-02-03 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (get_fn_local_identifier): New helper. + (morph_fn_to_coro): User helper to find names for outlined + functions. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/coro-bad-return.C: New. + * g++.dg/coroutines/torture/coro-missing-ret-value.C: New. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-6.C: New. + * g++.dg/coroutines/torture/co-ret-7.C: New. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-5.C: New. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h (promise): Use the __fr_ptr member. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Handle GRO with a + signature different from the function return. Handle GRO with + non-trivial dtor. + gcc/testsuite/ + * g++.dg/coroutines/torture/co-ret-3.C: New. + * g++.dg/coroutines/torture/co-ret-4.C: New. + +2019-01-25 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Correct a couple of statement + void casts. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/torture/coro-torture.exp: New. + * g++.dg/coroutines/torture/co-ret-void-is-suspend.C: New. + * g++.dg/coroutines/torture/co-ret-void-is-ready.C: New. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Update this to move closer to the + actual experimental/coroutines header we will need. + At present, enough support for initial co_return cases. Rename + the __handle field to __fr_ptr, since that's more specific. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c.opt (flag_coroutines): Have this recognised by LTO too. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * passes.def: Move coroutine IFN expansion to post LTO. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c: Update header use. + (first_vuser, move_edge_and_update_vdef): New helper functions. + (execute_expand_coro_ifns): Try to minimise early scan for CO_XXX + functions, since this has to be executed for all fns. + Move dummy edges for the dispatcher to their real targets for any + YIELD points that remain. Elide others. Arrange to update DOM and + VSSA. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + *internal-fn.def (CO_ACTOR, CO_YIELD): Make LEAF. + Reorder defs to keep NOP at the end. + * internal-fn.c (expand_CO_FRAME, expand_CO_YIELD, + expand_CO_ACTOR): Don't ICE if they are not expanded, but print an + error for now. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * decl.c (emit_coro_helper): New. + (finish_function): Emit the actor (resume) and destroy functions. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (build_destroy_fn): New. + (morph_fn_to_coro): Use destroy function builder. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (USE_SWITCH_CO_YIELD_GUARD): New. + (create_anon_label_with_ctx): New. + (co_await_expander): Add alternate codepath generation selected + with the USE_SWITCH_CO_YIELD_GUARD. Push the code labels into the + context of the generated actor function. + (expand_co_awaits): Provide the actor function decl to the expand + callback. (build_actor_fn): New. + (morph_fn_to_coro): Move the expansion of await trees from here + to the new actor function and build that in a deferred access + check state so that it doesn't show as nested to the gimpifier. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Move the Get Return Object + to its own bind level. Note a code path that is generated by + clang but appears dead. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Adjust the ramp function + bind to remove the GRO and to rename. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Add a "suspended" field + to the coro frame and initialise it. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Add a "frame needs free" + field to the coro frame and set it true once malloc has set it. In + this case of course, it's always true - but at some later time the + elision of the frame allocation will make it meaningful. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Use malloc in the ramp + to generate the coro frame for now. Make the ramp function check + for NULL return and bail early if so. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): Make the resume index + unsigned short. (expand_co_awaits, morph_fn_to_coro): Likewise. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Adjust function interface + to allow return of generated function bodies. Declare resumer and + destroyer functions. + * cp-tree.h (morph_fn_to_coro): Adjust interface. + * decl.c (finish_function): Allow for the morph routine to return + function decls for the resume and destroy functions. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * decl.c (finish_function): Break out condition for doing + coroutine expansion. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c-common.h (D_CXX_CHAR8_T_FLAGS): Clean up stray character + committed in error. + +2019-01-23 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r268188. + gcc/ + * configure: Regenerated. + gcc/c-family/ + * c-common.h (D_CXX_COROUTINES): Adjust for new entry. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (lower_coro_builtin, + execute_lower_coro_builtins, pass_data_coroutine_lower_builtins, + gate, execute): New. + * passes.def: Add pass_coroutine_lower_builtins. + * tree-pass.h (make_pass_coroutine_lower_builtins): New. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-passes.c (execute_expand_coro_ifns): New. + (pass_coroutine_expand_ifns): Update comments. (execute): Call the + dummy implementation. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def (BUILT_IN_CORO_PROMISE, + BUILT_IN_CORO_DONE, BUILT_IN_CORO_NOOP): Mark nothrow. + * gcc/internal-fn.c (CO_FRAME, CO_YIELD, CO_ACTOR): Likewise. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Adjust wrapping of the + GRO initialiser. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * decl.c (finish_function): Don't try to process exceptions + yet. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * coroutine-builtins.def: Update copyright years. + * coroutine-passes.c: Likewise. + gcc/cp/ + * coroutines.cc: Update copyright years. + gcc/testsuite/ + * g++.dg/coroutines/coroutines.exp: Update copyright years. + +2019-01-07 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r267619. + +2018-12-24 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r267412. + +2018-12-10 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r266943. + gcc/ + * configure: Regenerated. + +2018-12-03 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r266733. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Call the internal + CO_FRAME function directly, rather than deferring to + gimplification. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_await_expander): New callback. + (expand_co_awaits): New. (morph_fn_to_coro): Rename phase_name + to resume_idx_name, and likewise phase to resume_idx. Add + initial suspend and final suspend handles to the coroutine + frame. Remove the inline building of initial and final susp + point vars. Add a reference to the relevant awaiter to each + co_await tree. Remove unused init and final awaiter destructors. + Expand co_await trees. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_return_context_valid_p): It is a valid void + co_return if the expression is either absent or void type. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_return_expander): New callback. + (expand_co_returns): New. (morph_fn_to_coro): Lookup the + promise return_void() method. Expand co_returns. Implement + rule for flowing off the end of a coroutine. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_coro_handle_type): new. + (find_handle_type): Remove unused vars. + (coro_promise_type_found_p): Save the coro handle rather than + the traits one. (find_promise_type): Remove unused arg. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Update initial validity checks + and diagnostics. Amend comments. + +2018-11-26 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r266446. + +2018-11-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Implement initial function + rewriting. + +2018-11-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_handle_type): New. + (find_promise_type): Refactor. (lookup_promise_member): New. + * cp-tree.h (lang_decl_fn): Save handle type. + +2018-11-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * parser.c (cp_parser_jump_statement): Check for co_return + before auto return pattern to get diagnostics for invalid use of + 'auto'. + +2018-11-20 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.def (CORO_ALLOCATOR): New tree. + * cp-objcp-common.c (cp_common_init_ts): Mark CORO_ALLOCATOR + as typed. + +2018-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h: Migrate to use the builtin functions + declared to implement the core library functions. + +2018-11-19 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c-cppbuiltin.c (c_cpp_builtins): Update coroutines + version to 201806. + + gcc/testsuite/ + * g++.dg/coroutines/coro-missing-ret-void.C: Update to cater for + n4775 changes to coro.h. Move bad promise example to this file + from coro.h. + * g++.dg/coroutines/coro-pre-proc.C: Amend to version + to 201806. + * g++.dg/coroutines/coro.h: Update to n4775. Remove examples of + coroutine and promise classes. + +2018-11-19 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r266264. + +2018-11-03 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r265766. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (morph_fn_to_coro): Remove unused variable. + (co_await_context_valid_p): Check that the co_await expression is + non-NULL. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (coro_function_valid_p): New. + (morph_fn_to_coro): New. + * cp-tree.h (morph_fn_to_coro): New. + * decl.c (finish_function): When we have a coroutine, call out to + morph the user's original function to add the ramp function base. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * call.c (op_error): Handle COAWAIT_EXPR. (build_new_op_1): Likewise. + * coroutines.cc (co_await_context_valid_p): New. + * cp-tree.h (co_await_context_valid_p): New. + * parser.c (cp_parser_unary_expression): Handle RID_CO_AWAIT. + gcc/testsuite/ + * g++.dg/coroutines/coro-await-context-auto-fn.C: New. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (co_return_context_valid_p): Factor code to provide + common functionality. (coro_promise_type_found_p): New. + (coro_common_keyword_context_valid_p): New. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-objcp-common.c (cp_common_init_ts): Add COAWAIT_EXPR to typed + trees. + * cp-tree.def (COAWAIT_EXPR): New tree code. + * operators.def (co_await): New unary operator. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * g++.dg/coroutines/coro.h (coroutine_traits): Move typename into the + implementation space. + +2018-11-02 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.h (DECL_COROUTINE_FUNCTION_P): Rename to DECL_COROUTINE_P. + (co_return_context_valid_p): Move declaration to new section for + coroutines.cc. + * semantics.c (finish_co_return_stmt): Rename DECL_COROUTINE_FUNCTION_P. + +2018-10-29 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r265582. + +2018-10-15 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r265156. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * coroutines.cc (find_promise_type): New. + (co_return_context_valid_p): Diagnose missing promise members. + * cp-tree.h (lang_decl_fn): Add promise_type. + (DECL_COROUTINE_PROMISE_TYPE): New. + + gcc/testsuite/ + * g++.dg/coroutines/coro.h (MissingRetVoid): New class. + * g++.dg/coroutines/coro-missing-ret-void.C: New. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * Make-lang.in (CXX_AND_OBJCXX_OBJS): Add cp/coroutines.o. + * semantics.c: Move co_return_context_valid_p to new file. + * coroutines.cc: New. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.h: Use a bit in lang_decl_fn instead of DECL_LANG_FLAG_3 + to signal that a function is a coroutine. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * Makefile.in (OBJS): Add coroutine-passes.o. + * tree-pass.h (make_pass_coroutine_expand_ifns): New. + * passes.def: Add pass_coroutine_expand_ifns to lowering passes. + * coroutine-passes.c: New. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * internal-fn.def (CO_FRAME, CO_YIELD, CO_ACTOR): New. + * internal-fn.c (expand_CO_FRAME, expand_CO_YIELD, + expand_CO_ACTOR): New. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * builtin-types.def (BT_FN_BOOL_PTR, BT_FN_PTR_PTR_SIZE_BOOL): New. + * builtins.def (DEF_COROUTINE_BUILTIN): New. + Include coroutine-builtins.def. + * coroutine-builtins.def: New. + gcc/testsuite/ + * coro-builtins.C: New. + +2018-10-10 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * coroutines/coroutines.exp: Update to add attribution. + +2018-10-09 Nathan Sidwell <nathan@acm.org> + + gcc/c-family/ + * c.opt: Add some modules options. + gcc/cp/ + * lang-specs.h: Provide diagnostic when modules options are used. + +2018-10-09 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r264949. + +2018-10-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/cp/ + * cp-tree.h (COROUTINE_RETURN_P, DECL_COROUTINE_FUNCTION_P): New. + * typecheck.c (check_co_return_expr): New. + * semantics.c (co_return_context_valid_p, finish_co_return_stmt) New. + * parser.c (cp_parser_statement): handle RID_CO_RETURN. + (cp_parser_jump_statement): handle RID_CO_RETURN. + gcc/testsuite/ + * g++.dg/coroutines/coro.h: New. + * g++.dg/coroutines/coro-auto-fn.C: New. + * g++.dg/coroutines/coro-constexpr-fn.C: New. + * g++.dg/coroutines/coro-context-ctor-dtor.C: New. + * g++.dg/coroutines/coro-context-main.C: New. + * g++.dg/coroutines/coro-context-vararg.C: New. + +2018-10-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c-common.h (RID_CO_AWAIT, RID_CO_YIELD, RID_CO_RETURN, + D_CXX_COROUTINES, D_CXX_COROUTINES_FLAGS): New. + * c-common.c (c_common_reswords): co_await, co_yield, + co_return New keywords. + gcc/cp/ + * lex.c (init_reswords): Handle flag_coroutines. + +2018-10-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/testsuite/ + * coroutines/coroutines.exp: New. + * coroutines/coro-pre-proc.C: New. + +2018-10-01 Iain Sandoe <iain@sandoe.co.uk> + + gcc/c-family/ + * c.opt (fcoroutines, fcoroutines-ts): New. + * c-cppbuiltin.c (c_cpp_builtins): Add __cpp_coroutines. + gcc/ + * doc/invoke.texi (fcoroutines): New description. + +2018-10-01 Iain Sandoe <iain@sandoe.co.uk> + + Merge trunk r264732. + +2018-09-22 Iain Sandoe <iain@sandoe.co.uk> + + gcc/ + * configure.ac (ACX_BUGURL): Point to the project wiki page. + * configure: Regenerated. + +2018-09-21 Iain Sandoe <iain@sandoe.co.uk> + + Branch creation from trunk:264468 + Use this Changelog for all branch changes, including merges. + + gcc/REVISION: New (branch identifier). + +Local Variables: +mode: change-log +change-log-default-name: "ChangeLog.coroutines" +End: diff --git a/contrib/gcc_update b/contrib/gcc_update index 620504e3856..b2f855dcef2 100755 --- a/contrib/gcc_update +++ b/contrib/gcc_update @@ -295,7 +295,7 @@ p esac # Check for known version control systems. -if [ -d .git ] || [ -f .git ]; then +if ( [ -d .git ] || [ -f .git ] ) && [ ! -d .svn ]; then GCC_GIT=${GCC_GIT-${GIT-git}} vcs_type="git" elif [ -d .hg ]; then diff --git a/gcc/REVISION b/gcc/REVISION new file mode 100644 index 00000000000..082dcd6974a --- /dev/null +++ b/gcc/REVISION @@ -0,0 +1 @@ +[c++-coroutines revision 279845] diff --git a/gcc/configure b/gcc/configure index 5ce0557719a..8e685ffa62a 100755 --- a/gcc/configure +++ b/gcc/configure @@ -8131,6 +8131,8 @@ fi +# ACX_BUGURL([https://gcc.gnu.org/bugs/]) +# '\#' needed to escape hash to Make # Check whether --with-bugurl was given. @@ -8143,7 +8145,7 @@ if test "${with_bugurl+set}" = set; then : ;; esac else - BUGURL="https://gcc.gnu.org/bugs/" + BUGURL="https://gcc.gnu.org/wiki/cxx-coroutines\#Bugs" fi diff --git a/gcc/configure.ac b/gcc/configure.ac index 23bee7010a3..d3b07c0d623 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1064,7 +1064,9 @@ AC_ARG_WITH(specs, AC_SUBST(CONFIGURE_SPECS) ACX_PKGVERSION([GCC]) -ACX_BUGURL([https://gcc.gnu.org/bugs/]) +# ACX_BUGURL([https://gcc.gnu.org/bugs/]) +# '\#' needed to escape hash to Make +ACX_BUGURL([https://gcc.gnu.org/wiki/cxx-coroutines\#Bugs]) # Allow overriding the default URL for documentation AC_ARG_WITH(documentation-root-url, |