From b05c3fd684219cde701d995c88277ced21dbc3b5 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 17 Nov 2016 12:39:24 +0000 Subject: [PATCH] re PR c++/78383 (label as values ICE with C++ lambda) 2016-11-17 Richard Biener PR middle-end/78383 * tree-cfgcleanup.c (cleanup_control_flow_bb): Do not turn non-local goto into CFG. From-SVN: r242543 --- gcc/ChangeLog | 6 ++++++ gcc/tree-cfgcleanup.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e07caaa2623..0fb592a624d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-17 Richard Biener + + PR middle-end/78383 + * tree-cfgcleanup.c (cleanup_control_flow_bb): Do not turn + non-local goto into CFG. + 2016-11-17 Richard Biener * common.opt (ftree-loop-if-convert-stores): Mark as preserved for diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 21873f8d516..fe22ed309e4 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -230,6 +230,8 @@ cleanup_control_flow_bb (basic_block bb, bool first_p) edges which do not go to the right block. For the one edge which goes to the right block, fix up its flags. */ label = TREE_OPERAND (gimple_goto_dest (stmt), 0); + if (DECL_CONTEXT (label) != cfun->decl) + return retval; target_block = label_to_block (label); for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) { -- 2.30.2