aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/expr.c7
-rw-r--r--gcc/tree.def2
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 445f151..adb2d4a 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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)