[committed] coroutines: ensure placeholder var is properly declared.

Message ID 804F549B-627B-4DDE-B094-97EB19090072@sandoe.co.uk
State New
Headers show
  • [committed] coroutines: ensure placeholder var is properly declared.
Related show

Commit Message

Iain Sandoe April 7, 2020, 3:33 p.m.

An omission spotted while working on open PRs.
tested on x86_64-linux/darwin, applied to master as obvious.
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.

2020-04-07  Iain Sandoe  <iain@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);