diff options
| author | Daniel Franke <dfranke@gcc.gnu.org> | 2007-05-20 06:22:15 -0400 |
|---|---|---|
| committer | Daniel Franke <dfranke@gcc.gnu.org> | 2007-05-20 06:22:15 -0400 |
| commit | 6495bc0b8df118643ca7aa1d9f311eb2f0344e3b (patch) | |
| tree | ec421757595303c173812267c584be54858cce91 /gcc/fortran | |
| parent | 643827b29b291d05d4cbe2f64cc78da272232514 (diff) | |
| download | gcc-6495bc0b8df118643ca7aa1d9f311eb2f0344e3b.zip gcc-6495bc0b8df118643ca7aa1d9f311eb2f0344e3b.tar.gz gcc-6495bc0b8df118643ca7aa1d9f311eb2f0344e3b.tar.bz2 | |
re PR fortran/32001 (MAX intrinsic with large number of arguments)
gcc/fortran:
2007-05-20 Daniel Franke <franke.daniel@gmail.com>
PR fortran/32001
* check.c (check_rest): Improved argument conformance check and
fixed error message generation.
gcc/testsuite:
2007-05-20 Daniel Franke <franke.daniel@gmail.org>
PR fortran/32001
* gfortran.dg/min_max_conformance.f90: Added more testcases.
From-SVN: r124869
Diffstat (limited to 'gcc/fortran')
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/check.c | 29 |
2 files changed, 21 insertions, 14 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b0c8fba..0e7bc69 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-05-20 Daniel Franke <franke.daniel@gmail.com> + + PR fortran/32001 + * check.c (check_rest): Improved argument conformance check and + fixed error message generation. + 2007-05-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/30820 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 4c0a592..682dc8b 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -1486,19 +1486,17 @@ min_max_args (gfc_actual_arglist *arg) static try -check_rest (bt type, int kind, gfc_actual_arglist *arg) +check_rest (bt type, int kind, gfc_actual_arglist *arglist) { - gfc_expr *x, *first_arg; - int n; - char buffer[80]; + gfc_actual_arglist *arg, *tmp; - if (min_max_args (arg) == FAILURE) - return FAILURE; + gfc_expr *x; + int m, n; - n = 1; + if (min_max_args (arglist) == FAILURE) + return FAILURE; - first_arg = arg->expr; - for (; arg; arg = arg->next, n++) + for (arg = arglist, n=1; arg; arg = arg->next, n++) { x = arg->expr; if (x->ts.type != type || x->ts.kind != kind) @@ -1518,11 +1516,14 @@ check_rest (bt type, int kind, gfc_actual_arglist *arg) } } - snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'", - gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[n-1], - gfc_current_intrinsic); - if (gfc_check_conformance (buffer, first_arg, x) == FAILURE) - return FAILURE; + for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++) + { + char buffer[80]; + snprintf (buffer, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'", + m, n, gfc_current_intrinsic); + if (gfc_check_conformance (buffer, tmp->expr, x) == FAILURE) + return FAILURE; + } } return SUCCESS; |
