tree.def (LABELED_BLOCK_EXPR, [...]): New tree nodes.
authorAlexandre Petit-Bianco <apbianco@cygnus.com>
Fri, 21 Aug 1998 19:32:19 +0000 (12:32 -0700)
committerPer Bothner <bothner@gcc.gnu.org>
Fri, 21 Aug 1998 19:32:19 +0000 (12:32 -0700)

* tree.def (LABELED_BLOCK_EXPR, EXIT_BLOCK_EXPR): New tree nodes.
   * tree.h (LABELED_BLOCK_LABEL, LABELED_BLOCK_BODY,
  EXIT_BLOCK_LABELED_BLOCK, EXIT_BLOCK_RETURN, LOOP_EXPR_BODY): New
  macros.
* expr.c (expand_expr): Handle LABELED_BLOCK_EXPR and
  EXIT_BLOCK_EXPR.

From-SVN: r21897

gcc/expr.c

index e14517bf58c7beaebca120aee25309fcab8d0be3..22fc5f73e79e89f409f6321729274946897af0d2 100644 (file)
@@ -5796,6 +5796,18 @@ expand_expr (exp, target, tmode, modifier)
                                 invert_truthvalue (TREE_OPERAND (exp, 0)));
       return const0_rtx;
 
+    case LABELED_BLOCK_EXPR:
+      if (LABELED_BLOCK_BODY (exp))
+       expand_expr_stmt (LABELED_BLOCK_BODY (exp));
+      emit_label (label_rtx (LABELED_BLOCK_LABEL (exp)));
+      return const0_rtx;
+
+    case EXIT_BLOCK_EXPR:
+      if (EXIT_BLOCK_RETURN (exp))
+       really_sorry ("returned value in block_exit_expr");
+      expand_goto (LABELED_BLOCK_LABEL (EXIT_BLOCK_LABELED_BLOCK (exp)));
+      return const0_rtx;
+
     case LOOP_EXPR:
       push_temp_slots ();
       expand_start_loop (1);