aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorDaniel Franke <dfranke@gcc.gnu.org>2007-05-20 06:22:15 -0400
committerDaniel Franke <dfranke@gcc.gnu.org>2007-05-20 06:22:15 -0400
commit6495bc0b8df118643ca7aa1d9f311eb2f0344e3b (patch)
treeec421757595303c173812267c584be54858cce91 /gcc/fortran
parent643827b29b291d05d4cbe2f64cc78da272232514 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/check.c29
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;