Hi, An omission spotted while working on open PRs. tested on x86_64-linux/darwin, applied to master as obvious. thanks Iain In cases that we need to extended the lifetime of a temporary captured by reference, we make a replacement var for the temporary. This will be then used to define a coroutine frame entry (so that the var created is elided by a later phase). However, we should ensure that the var is correctly declared anyway.
gcc/cp/ChangeLog: 2020-04-07 Iain Sandoe <i...@sandoe.co.uk> * coroutines.cc (maybe_promote_captured_temps): Ensure that reference capture placeholder vars are properly declared. diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 38a23a91f8b..983fa650b55 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -2832,7 +2832,9 @@ maybe_promote_captured_temps (tree *stmt, void *d) sloc = DECL_SOURCE_LOCATION (orig_temp); DECL_SOURCE_LOCATION (newvar) = sloc; DECL_CHAIN (newvar) = varlist; - varlist = newvar; + varlist = newvar; /* Chain it onto the list for the bind expr. */ + /* Declare and initialze it in the new bind scope. */ + add_decl_expr (newvar); tree stmt = build2_loc (sloc, INIT_EXPR, var_type, newvar, to_replace); stmt = coro_build_cvt_void_expr_stmt (stmt, sloc);