[Bug debug/77931] PASS->FAIL: gdb.cp/namespace.exp: print ina
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77931 Richard Biener changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED --- Comment #5 from Richard Biener --- Fixed.
[Bug debug/77931] PASS->FAIL: gdb.cp/namespace.exp: print ina
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77931 --- Comment #4 from Richard Biener --- Author: rguenth Date: Tue Oct 11 12:52:44 2016 New Revision: 240991 URL: https://gcc.gnu.org/viewcvs?rev=240991&root=gcc&view=rev Log: 2016-10-11 Richard Biener PR debug/77931 * gimple-low.c (lower_gimple_bind): Handle arbitrary common sub-chains of BLOCK_VARS and gimple_bind_vars. Modified: trunk/gcc/ChangeLog trunk/gcc/gimple-low.c
[Bug debug/77931] PASS->FAIL: gdb.cp/namespace.exp: print ina
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77931 --- Comment #3 from Thomas Preud'homme --- Confirmed, this patch fixes the issue. Thanks!
[Bug debug/77931] PASS->FAIL: gdb.cp/namespace.exp: print ina
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77931 --- Comment #2 from Richard Biener --- It's that way in the original BIND_EXPR already. So it looks like we need to handle this gracefully :/ Index: gcc/gimple-low.c === --- gcc/gimple-low.c(revision 240964) +++ gcc/gimple-low.c(working copy) @@ -420,18 +420,24 @@ lower_gimple_bind (gimple_stmt_iterator /* Scrap DECL_CHAIN up to BLOCK_VARS to ease GC after we no longer need gimple_bind_vars. */ tree next; - tree end = NULL_TREE; + /* BLOCK_VARS and gimple_bind_vars share a common sub-chain. Find + it by marking all BLOCK_VARS. */ if (gimple_bind_block (stmt)) -end = BLOCK_VARS (gimple_bind_block (stmt)); - for (tree var = gimple_bind_vars (stmt); var != end; var = next) +for (tree t = BLOCK_VARS (gimple_bind_block (stmt)); t; t = DECL_CHAIN (t)) + { + gcc_checking_assert (! TREE_VISITED (t)); + TREE_VISITED (t) = 1; + } + for (tree var = gimple_bind_vars (stmt); + var && ! TREE_VISITED (var); var = next) { - /* Ugh, something is violating the constraint that BLOCK_VARS - is a sub-chain of gimple_bind_vars. */ - if (! var) - break; next = DECL_CHAIN (var); DECL_CHAIN (var) = NULL_TREE; } + /* Unmark BLOCK_VARS. */ + if (gimple_bind_block (stmt)) +for (tree t = BLOCK_VARS (gimple_bind_block (stmt)); t; t = DECL_CHAIN (t)) + TREE_VISITED (t) = 0; lower_sequence (gimple_bind_body_ptr (stmt), data); fixes it.
[Bug debug/77931] PASS->FAIL: gdb.cp/namespace.exp: print ina
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77931 Richard Biener changed: What|Removed |Added Status|UNCONFIRMED |ASSIGNED Last reconfirmed||2016-10-11 Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Richard Biener --- Ok, we're hitting /* Ugh */ which shouldn't really happen. BLOCK_VARS should be a sub-chain of gimple_bind_vars. It looks like BLOCK_VARS in this case has a common sub-chain with gimple_bind_vars instead... /* Scrap DECL_CHAIN up to BLOCK_VARS to ease GC after we no longer need gimple_bind_vars. */ tree next; tree end = NULL_TREE; if (gimple_bind_block (stmt)) end = BLOCK_VARS (gimple_bind_block (stmt)); for (tree var = gimple_bind_vars (stmt); var != end; var = next) { /* Ugh, something is violating the constraint that BLOCK_VARS is a sub-chain of gimple_bind_vars. */ if (! var) break; next = DECL_CHAIN (var); DECL_CHAIN (var) = NULL_TREE; } and we have gimple_bind_vars: c1D.2424 varD.2425 inaD.2426 yD.2460 clD.2462 BLOCK_VARS: <<< Unknown tree: imported_decl >>> <<< Unknown tree: imported_decl >>> c1D.2424 varD.2425 inaD.2426 yD.2460 clD.2462