diff options
| author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-13 21:35:33 +0000 |
|---|---|---|
| committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-13 21:35:33 +0000 |
| commit | 67170043e9a7e6fe293e9c20d7ecc25587d125d3 (patch) | |
| tree | 99e3aac4649951ef115b9fe3fb115ab5d90a0f83 /gcc/fortran/resolve.c | |
| parent | 1c343287f8006e61f14c9342d5bd02b34ba4d85c (diff) | |
| download | ppe42-gcc-67170043e9a7e6fe293e9c20d7ecc25587d125d3.tar.gz ppe42-gcc-67170043e9a7e6fe293e9c20d7ecc25587d125d3.zip | |
2008-01-13 Tobias Burnus <burnus@net-b.de>
PR fortran/34665
* resolve.c (resolve_actual_arglist): For expressions,
also check for assume-sized arrays.
* interface.c (compare_parameter): Move F2003 character checks
here, print error messages here, reject elements of
assumed-shape array as argument to dummy arrays.
(compare_actual_formal): Update for the changes above.
2008-01-13 Tobias Burnus <burnus@net-b.de>
PR fortran/34665
* gfortran.dg/argument_checking_11.f90: New.
* gfortran.dg/argument_checking_12.f90: New.
* gfortran.dg/used_dummy_types_4.f90: Update dg-error.
* gfortran.dg/c_assoc_2.f03: Update dg-error.
* gfortran.dg/argument_checking_3.f90: Ditto.
* gfortran.dg/pointer_intent_2.f90: Ditto.
* gfortran.dg/import2.f90: Ditto.
* gfortran.dg/assumed_shape_ranks_1.f90: Ditto.
* gfortran.dg/implicit_actual.f90: Ditto.
* gfortran.dg/used_dummy_types_3.f90: Ditto.
* gfortran.dg/derived_comp_array_ref_6.f90: Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131513 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/resolve.c')
| -rw-r--r-- | gcc/fortran/resolve.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 0f96cd6eb75..0c4946e67bd 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1013,6 +1013,7 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype) gfc_symbol *sym; gfc_symtree *parent_st; gfc_expr *e; + int save_need_full_assumed_size; for (; arg; arg = arg->next) { @@ -1041,8 +1042,12 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype) if (e->ts.type != BT_PROCEDURE) { + save_need_full_assumed_size = need_full_assumed_size; + if (e->expr_type != FL_VARIABLE) + need_full_assumed_size = 0; if (gfc_resolve_expr (e) != SUCCESS) return FAILURE; + need_full_assumed_size = save_need_full_assumed_size; goto argument_list; } @@ -1181,8 +1186,12 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype) primary.c (match_actual_arg). If above code determines that it is a variable instead, it needs to be resolved as it was not done at the beginning of this function. */ + save_need_full_assumed_size = need_full_assumed_size; + if (e->expr_type != FL_VARIABLE) + need_full_assumed_size = 0; if (gfc_resolve_expr (e) != SUCCESS) return FAILURE; + need_full_assumed_size = save_need_full_assumed_size; argument_list: /* Check argument list functions %VAL, %LOC and %REF. There is |

