On Thu, Jul 07, 2016 at 12:32:02PM -0400, Jason Merrill wrote: > Hmm, I wonder if walk_tree_1 should walk into DECL_EXPR like it does into > BIND_EXPR_VARS. But your patch is OK.
Well, walk_tree_1 does walk into DECL_EXPR, but cp_genericize_r says *walk_subtrees on the VAR_DECL inside of it. When walking BIND_EXPR_VARS, it doesn't walk the vars themselves, but /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk into declarations that are just mentioned, rather than declared; they don't really belong to this part of the tree. And, we can see cycles: the initializer for a declaration can refer to the declaration itself. */ WALK_SUBTREE (DECL_INITIAL (decl)); WALK_SUBTREE (DECL_SIZE (decl)); WALK_SUBTREE (DECL_SIZE_UNIT (decl)); Do you mean walk_tree_1 should walk DECL_INITIAL/DECL_SIZE/DECL_SIZE_UNIT of the var mentioned in the DECL_EXPR? Then for many vars (which are both mentioned in BIND_EXPR_VARS and in DECL_EXPR) it would walk them twice. Jakub