https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105287
David Malcolm <dmalcolm at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2022-04-15 CC| |iains at gcc dot gnu.org Status|UNCONFIRMED |ASSIGNED --- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Confirmed; it's an assertion failing in ana::frame_region::get_region_for_local, due to a variable having NULL for its DECL_CONTEXT: (gdb) list 869 case SSA_NAME: 870 { 871 if (tree var = SSA_NAME_VAR (expr)) 872 { 873 if (DECL_P (var)) 874 gcc_assert (DECL_CONTEXT (var) == m_fun->decl); 875 } This is probably benign if assertions are disabled (perhaps the analyzer is being more fussy than the rest of the middle-end?) (gdb) call debug_tree(var) <var_decl 0x7fffea7c8750 D.2381 type <boolean_type 0x7fffea665b28 bool sizes-gimplified public unsigned type_6 QI size <integer_cst 0x7fffea667048 constant 8> unit-size <integer_cst 0x7fffea667060 constant 1> align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7fffea665b28 precision:1 min <integer_cst 0x7fffea6672a0 0> max <integer_cst 0x7fffea6672d0 1> pointer_to_this <pointer_type 0x7fffea7bddc8>> unsigned QI ../../src/gcc/testsuite/g++.dg/analyzer/pr105287.C:35:73 size <integer_cst 0x7fffea667048 8> unit-size <integer_cst 0x7fffea667060 1> align:8 warn_if_not_align:0> (gdb) p var.decl_minimal.context $2 = <tree 0x0> The var_decl is "cond_var" created here in the C++ FE: #4 0x0000000000b30ec2 in flatten_await_stmt (n=0x317b9b0, promoted=0x7fffffffcc40, temps_used=0x7fffffffcc70, replace_in=<optimized out>) at ../../src/gcc/cp/coroutines.cc:2792 2792 tree cond_var = build_lang_decl (VAR_DECL, NULL_TREE, cond_type); (gdb) list 2787 /* If the condition contains an await expression, then we need to 2788 set that first and use a separate var. */ 2789 if (cp_walk_tree (&cond, find_any_await, &found, NULL)) 2790 { 2791 tree cond_type = TREE_TYPE (cond); 2792 tree cond_var = build_lang_decl (VAR_DECL, NULL_TREE, cond_type); 2793 DECL_ARTIFICIAL (cond_var) = true; 2794 layout_decl (cond_var, 0); 2795 gcc_checking_assert (!TYPE_NEEDS_CONSTRUCTING (cond_type)); 2796 cond = build2 (INIT_EXPR, cond_type, cond_var, cond); 2797 var_nest_node *ins 2798 = new var_nest_node (cond_var, cond, n->prev, n); 2799 COND_EXPR_COND (n->init) = cond_var; 2800 flatten_await_stmt (ins, promoted, temps_used, NULL); 2801 } Iain: shouldn't the DECL_CONTEXT be being set on var_decls created here?