mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 07:00:29 +08:00
re PR fortran/29101 (Memory leak in gfortran)
2006-09-19 Paul Thomas <pault@gcc.gnu.org> Steven Bosscher <steven@gcc.gnu.org> PR fortran/29101 * trans-stmt.c (gfc_trans_character_select): Store the label from select_string and then clean up any temporaries from the conversion of the select expression, before branching to the selected case. Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org> From-SVN: r117053
This commit is contained in:
parent
95cefe5f0e
commit
dc6c771432
@ -1,3 +1,12 @@
|
||||
2006-09-19 Paul Thomas <pault@gcc.gnu.org>
|
||||
Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
PR fortran/29101
|
||||
* trans-stmt.c (gfc_trans_character_select): Store the label
|
||||
from select_string and then clean up any temporaries from the
|
||||
conversion of the select expression, before branching to the
|
||||
selected case.
|
||||
|
||||
2006-09-18 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/28526
|
||||
|
@ -1307,6 +1307,7 @@ static tree
|
||||
gfc_trans_character_select (gfc_code *code)
|
||||
{
|
||||
tree init, node, end_label, tmp, type, args, *labels;
|
||||
tree case_label;
|
||||
stmtblock_t block, body;
|
||||
gfc_case *cp, *d;
|
||||
gfc_code *c;
|
||||
@ -1464,7 +1465,12 @@ gfc_trans_character_select (gfc_code *code)
|
||||
gfc_add_block_to_block (&block, &se.pre);
|
||||
|
||||
tmp = build_function_call_expr (gfor_fndecl_select_string, args);
|
||||
tmp = build1 (GOTO_EXPR, void_type_node, tmp);
|
||||
case_label = gfc_create_var (TREE_TYPE (tmp), "case_label");
|
||||
gfc_add_modify_expr (&block, case_label, tmp);
|
||||
|
||||
gfc_add_block_to_block (&block, &se.post);
|
||||
|
||||
tmp = build1 (GOTO_EXPR, void_type_node, case_label);
|
||||
gfc_add_expr_to_block (&block, tmp);
|
||||
|
||||
tmp = gfc_finish_block (&body);
|
||||
@ -1475,8 +1481,6 @@ gfc_trans_character_select (gfc_code *code)
|
||||
if (n != 0)
|
||||
gfc_free (labels);
|
||||
|
||||
gfc_add_block_to_block (&block, &se.post);
|
||||
|
||||
return gfc_finish_block (&block);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user