of the assigned goto variable.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102607
138bc75d-0d04-0410-961f-
82ee72b054a4
+2005-07-31 Steven Bosscher <stevenb@suse.de>
+
+ * trans-stmt.c (gfc_trans_goto): Jump to the known label instead
+ of the assigned goto variable.
+
2005-07-29 Steven Bosscher <stevenb@suse.de>
* trans-types.h (gfc_array_range_type): Add missing GTY decl for this.
2005-07-29 Steven Bosscher <stevenb@suse.de>
* trans-types.h (gfc_array_range_type): Add missing GTY decl for this.
gfc_trans_runtime_check (tmp, assign_error, &se.pre);
assigned_goto = GFC_DECL_ASSIGN_ADDR (se.expr);
gfc_trans_runtime_check (tmp, assign_error, &se.pre);
assigned_goto = GFC_DECL_ASSIGN_ADDR (se.expr);
- target = build1 (GOTO_EXPR, void_type_node, assigned_goto);
code = code->block;
if (code == NULL)
{
code = code->block;
if (code == NULL)
{
+ target = build1 (GOTO_EXPR, void_type_node, assigned_goto);
gfc_add_expr_to_block (&se.pre, target);
return gfc_finish_block (&se.pre);
}
gfc_add_expr_to_block (&se.pre, target);
return gfc_finish_block (&se.pre);
}
- tmp = gfc_get_label_decl (code->label);
- tmp = gfc_build_addr_expr (pvoid_type_node, tmp);
+ target = gfc_get_label_decl (code->label);
+ tmp = gfc_build_addr_expr (pvoid_type_node, target);
tmp = build2 (EQ_EXPR, boolean_type_node, tmp, assigned_goto);
tmp = build2 (EQ_EXPR, boolean_type_node, tmp, assigned_goto);
- tmp = build3_v (COND_EXPR, tmp, target, build_empty_stmt ());
+ tmp = build3_v (COND_EXPR, tmp,
+ build1 (GOTO_EXPR, void_type_node, target),
+ build_empty_stmt ());
gfc_add_expr_to_block (&se.pre, tmp);
code = code->block;
}
gfc_add_expr_to_block (&se.pre, tmp);
code = code->block;
}