diff options
author | Steven Bosscher <stevenb@suse.de> | 2005-07-31 20:36:47 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2005-07-31 20:36:47 +0000 |
commit | 75d2cf695f0ad555d6e37a95bbb4d186c78c58d6 (patch) | |
tree | 9b75890b2b738049291b05d366a16111ed46b33b /gcc/fortran/trans-stmt.c | |
parent | 7dcbf65993ee71dd17805df86bbff9d7a8716258 (diff) | |
download | gcc-75d2cf695f0ad555d6e37a95bbb4d186c78c58d6.zip gcc-75d2cf695f0ad555d6e37a95bbb4d186c78c58d6.tar.gz gcc-75d2cf695f0ad555d6e37a95bbb4d186c78c58d6.tar.bz2 |
trans-stmt.c (gfc_trans_goto): Jump to the known label instead of the assigned goto variable.
* trans-stmt.c (gfc_trans_goto): Jump to the known label instead
of the assigned goto variable.
From-SVN: r102607
Diffstat (limited to 'gcc/fortran/trans-stmt.c')
-rw-r--r-- | gcc/fortran/trans-stmt.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 99467b4..72407ae 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -163,11 +163,11 @@ gfc_trans_goto (gfc_code * code) 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) { + target = build1 (GOTO_EXPR, void_type_node, assigned_goto); gfc_add_expr_to_block (&se.pre, target); return gfc_finish_block (&se.pre); } @@ -177,10 +177,12 @@ gfc_trans_goto (gfc_code * code) do { - 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 = 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; } |