trans.c (gfc_allocate_allocatable): Revert accidental commit.
2012-10-27 Thomas Koenig <tkoenig@gcc.gnu.org> * trans.c (gfc_allocate_allocatable): Revert accidental commit. From-SVN: r192875
This commit is contained in:
parent
38d233a928
commit
7999d7b4e6
2 changed files with 17 additions and 16 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-10-27 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
* trans.c (gfc_allocate_allocatable): Revert accidental
|
||||
commit.
|
||||
|
||||
2012-10-24 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/55037
|
||||
|
|
|
@ -814,23 +814,26 @@ gfc_allocate_allocatable (stmtblock_t * block, tree mem, tree size, tree token,
|
|||
}
|
||||
|
||||
|
||||
/* Free a given variable. If it is NULL, free takes care of this
|
||||
automatically. */
|
||||
/* Free a given variable, if it's not NULL. */
|
||||
tree
|
||||
gfc_call_free (tree var)
|
||||
{
|
||||
stmtblock_t block;
|
||||
tree call;
|
||||
tree tmp, cond, call;
|
||||
|
||||
if (TREE_TYPE (var) != TREE_TYPE (pvoid_type_node))
|
||||
var = fold_convert (pvoid_type_node, var);
|
||||
|
||||
gfc_start_block (&block);
|
||||
var = gfc_evaluate_now (var, &block);
|
||||
cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, var,
|
||||
build_int_cst (pvoid_type_node, 0));
|
||||
call = build_call_expr_loc (input_location,
|
||||
builtin_decl_explicit (BUILT_IN_FREE),
|
||||
1, var);
|
||||
gfc_add_expr_to_block (&block, call);
|
||||
tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond, call,
|
||||
build_empty_stmt (input_location));
|
||||
gfc_add_expr_to_block (&block, tmp);
|
||||
|
||||
return gfc_finish_block (&block);
|
||||
}
|
||||
|
@ -858,10 +861,11 @@ gfc_call_free (tree var)
|
|||
}
|
||||
}
|
||||
|
||||
In this front-end version, status doesn't have to be GFC_INTEGER_4. If
|
||||
CAN_FAIL is true, no status variable is passed and we are not dealing with
|
||||
a coarray, we will simply call free(). This is used for unconditional
|
||||
deallocation generated by the front-end at end of each procedure.
|
||||
In this front-end version, status doesn't have to be GFC_INTEGER_4.
|
||||
Moreover, if CAN_FAIL is true, then we will not emit a runtime error,
|
||||
even when no status variable is passed to us (this is used for
|
||||
unconditional deallocation generated by the front-end at end of
|
||||
each procedure).
|
||||
|
||||
If a runtime-message is possible, `expr' must point to the original
|
||||
expression being deallocated for its locus and variable name.
|
||||
|
@ -886,14 +890,6 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg,
|
|||
STRIP_NOPS (pointer);
|
||||
}
|
||||
|
||||
else if (can_fail && status == NULL_TREE)
|
||||
{
|
||||
tmp = build_call_expr_loc (input_location,
|
||||
builtin_decl_explicit (BUILT_IN_FREE), 1,
|
||||
fold_convert (pvoid_type_node, pointer));
|
||||
return tmp;
|
||||
}
|
||||
|
||||
cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node, pointer,
|
||||
build_int_cst (TREE_TYPE (pointer), 0));
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue