diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-10-19 04:51:14 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-10-19 04:51:14 +0000 |
commit | 6b591ec0bab0897c18e94a785d1f5bcb543a42a3 (patch) | |
tree | 0a238ae277da6e261a574bc4c7f6ff8fd90829f2 /gcc/fortran/trans-expr.c | |
parent | 2d142abdf326e15d183330ddca63a734fa56b478 (diff) | |
download | gcc-6b591ec0bab0897c18e94a785d1f5bcb543a42a3.zip gcc-6b591ec0bab0897c18e94a785d1f5bcb543a42a3.tar.gz gcc-6b591ec0bab0897c18e94a785d1f5bcb543a42a3.tar.bz2 |
[multiple changes]
2006-10-19 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29216
PR fortran/29314
* gfortran.h : Add EXEC_INIT_ASSIGN.
* dump-parse-tree.c (gfc_show_code_node): The same.
* trans-openmp.c (gfc_trans_omp_array_reduction): Set new
argument for gfc_trans_assignment to false.
* trans-stmt.c (gfc_trans_forall_1): The same.
* trans-expr.c (gfc_conv_function_call, gfc_trans_assign,
gfc_trans_arrayfunc_assign, gfc_trans_assignment): The
same. In the latter function, use the new flag to stop
the checking of the lhs for deallocation.
(gfc_trans_init_assign): New function.
* trans-stmt.h : Add prototype for gfc_trans_init_assign.
* trans.c (gfc_trans_code): Implement EXEC_INIT_ASSIGN.
* trans.h : Add new boolean argument to the prototype of
gfc_trans_assignment.
* resolve.c (resolve_allocate_exp): Replace EXEC_ASSIGN by
EXEC_INIT_ASSIGN.
(resolve_code): EXEC_INIT_ASSIGN does not need resolution.
(apply_default_init): New function.
(resolve_symbol): Call it for derived types that become
defined but which do not already have an initialization
expression..
* st.c (gfc_free_statement): Include EXEC_INIT_ASSIGN.
2006-10-19 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29216
* gfortran.dg/result_default_init_1.f90: New test.
PR fortran/29314
* gfortran.dg/automatic_default_init_1.f90: New test.
* gfortran.dg/alloc_comp_basics_1.f90: Reduce deallocate count
from 38 to 33.
From-SVN: r117879
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 190a115..3e7844e 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2031,7 +2031,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, && fsym->value) { gcc_assert (!fsym->attr.allocatable); - tmp = gfc_trans_assignment (e, fsym->value); + tmp = gfc_trans_assignment (e, fsym->value, false); gfc_add_expr_to_block (&se->pre, tmp); } @@ -3363,7 +3363,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2) setting up the scalarizer. */ tree -gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2) +gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2, bool init_flag) { gfc_se lse; gfc_se rse; @@ -3466,7 +3466,8 @@ gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2) else gfc_conv_expr (&lse, expr1); - tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, l_is_temp, + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, + l_is_temp || init_flag, expr2->expr_type == EXPR_VARIABLE); gfc_add_expr_to_block (&body, tmp); @@ -3500,7 +3501,8 @@ gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2) gcc_assert (lse.ss == gfc_ss_terminator && rse.ss == gfc_ss_terminator); - tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, false, false); + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, + false, false); gfc_add_expr_to_block (&body, tmp); } @@ -3518,7 +3520,13 @@ gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2) } tree +gfc_trans_init_assign (gfc_code * code) +{ + return gfc_trans_assignment (code->expr, code->expr2, true); +} + +tree gfc_trans_assign (gfc_code * code) { - return gfc_trans_assignment (code->expr, code->expr2); + return gfc_trans_assignment (code->expr, code->expr2, false); } |