diff options
-rw-r--r-- | gcc/expr.c | 7 | ||||
-rw-r--r-- | gcc/tree.def | 2 |
2 files changed, 8 insertions, 1 deletions
@@ -5919,6 +5919,13 @@ expand_expr (exp, target, tmode, modifier) placeholder_list = TREE_CHAIN (placeholder_list); return target; + case GOTO_EXPR: + if (TREE_CODE (TREE_OPERAND (exp, 0)) == LABEL_DECL) + expand_goto (TREE_OPERAND (exp, 0)); + else + expand_computed_goto (TREE_OPERAND (exp, 0)); + return const0_rtx; + case EXIT_EXPR: expand_exit_loop_if_false (NULL_PTR, invert_truthvalue (TREE_OPERAND (exp, 0))); diff --git a/gcc/tree.def b/gcc/tree.def index 16a07d8..71d0687 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -721,7 +721,7 @@ DEFTREECODE (POPDCC_EXPR, "popdcc_expr", 's', 0) The type should be void and the value should be ignored. */ DEFTREECODE (LABEL_EXPR, "label_expr", 's', 1) -/* GOTO. Operand 0 is a LABEL_DECL node. +/* GOTO. Operand 0 is a LABEL_DECL node or an expression. The type should be void and the value should be ignored. */ DEFTREECODE (GOTO_EXPR, "goto_expr", 's', 1) |