re PR c++/78383 (label as values ICE with C++ lambda)
authorRichard Biener <rguenther@suse.de>
Thu, 17 Nov 2016 12:39:24 +0000 (12:39 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 17 Nov 2016 12:39:24 +0000 (12:39 +0000)
2016-11-17  Richard Biener  <rguenther@suse.de>

PR middle-end/78383
* tree-cfgcleanup.c (cleanup_control_flow_bb): Do not turn
non-local goto into CFG.

From-SVN: r242543

gcc/ChangeLog
gcc/tree-cfgcleanup.c

index e07caaa2623481e4a1a9ffd23cfe001d004301dd..0fb592a624d7fb8d140bc2ccc6acc264c879359f 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-17  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/78383
+       * tree-cfgcleanup.c (cleanup_control_flow_bb): Do not turn
+       non-local goto into CFG.
+
 2016-11-17  Richard Biener  <rguenther@suse.de>
 
        * common.opt (ftree-loop-if-convert-stores): Mark as preserved for
index 21873f8d516c2e27836f95e6eb002359bde04d50..fe22ed309e4a6c7b029660e0b6bfc907fd62b175 100644 (file)
@@ -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)); )
        {