aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/check.c23
-rw-r--r--gcc/fortran/expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/maxval_maxloc_conformance_1.f9035
5 files changed, 72 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bcdd799..517535b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2006-01-31 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR fortran/26039
+ expr.c (gfc_check_conformance): Reorder error message
+ to avoid plural.
+ check.c(gfc_check_minloc_maxloc): Call gfc_check_conformance
+ for checking arguments array and mask.
+ (check_reduction): Likewise.
+
2005-01-30 Erik Edelmann <eedelman@gcc.gnu.org>
PR fortran/24266
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index feb07f0..8b56d52 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -1526,6 +1526,16 @@ gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
return FAILURE;
+ if (m != NULL)
+ {
+ char buffer[80];
+ snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
+ gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
+ gfc_current_intrinsic);
+ if (gfc_check_conformance (buffer, a, m) == FAILURE)
+ return FAILURE;
+ }
+
return SUCCESS;
}
@@ -1548,8 +1558,9 @@ gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
static try
check_reduction (gfc_actual_arglist * ap)
{
- gfc_expr *m, *d;
+ gfc_expr *a, *m, *d;
+ a = ap->expr;
d = ap->next->expr;
m = ap->next->next->expr;
@@ -1571,6 +1582,16 @@ check_reduction (gfc_actual_arglist * ap)
if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
return FAILURE;
+ if (m != NULL)
+ {
+ char buffer[80];
+ snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
+ gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
+ gfc_current_intrinsic);
+ if (gfc_check_conformance (buffer, a, m) == FAILURE)
+ return FAILURE;
+ }
+
return SUCCESS;
}
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 0e699c2..92a7dc0 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -1821,7 +1821,7 @@ gfc_check_conformance (const char *optype_msgid,
if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
{
- gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
+ gfc_error ("different shape for %s at %L on dimension %d (%d/%d)",
_(optype_msgid), &op1->where, d + 1,
(int) mpz_get_si (op1_size),
(int) mpz_get_si (op2_size));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 47f6623..6b5c659 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-31 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR fortran/26039
+ maxval_maxloc_conformance_1.f90: New test.
+
2006-01-31 Richard Guenther <rguenther@suse.de>
* gcc.target/i386/sselibm-1.c: New testcase.
diff --git a/gcc/testsuite/gfortran.dg/maxval_maxloc_conformance_1.f90 b/gcc/testsuite/gfortran.dg/maxval_maxloc_conformance_1.f90
new file mode 100644
index 0000000..828655c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/maxval_maxloc_conformance_1.f90
@@ -0,0 +1,35 @@
+! { dg-do compile }
+! PR 26039: Tests for different ranks for (min|max)loc, (min|max)val, product
+! and sum were missing.
+program main
+ integer, dimension(2) :: a
+ logical, dimension(2,1) :: lo
+ logical, dimension(3) :: lo2
+ a = (/ 1, 2 /)
+ lo = .true.
+ print *,minloc(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,maxloc(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,minval(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,maxval(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,sum(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,product(a,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,minloc(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,maxloc(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,minval(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,maxval(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,sum(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+ print *,product(a,1,mask=lo) ! { dg-error "Incompatible ranks" }
+
+ print *,minloc(a,mask=lo2) ! { dg-error "different shape" }
+ print *,maxloc(a,mask=lo2) ! { dg-error "different shape" }
+ print *,minval(a,mask=lo2) ! { dg-error "different shape" }
+ print *,maxval(a,mask=lo2) ! { dg-error "different shape" }
+ print *,sum(a,mask=lo2) ! { dg-error "different shape" }
+ print *,product(a,mask=lo2) ! { dg-error "different shape" }
+ print *,minloc(a,1,mask=lo2) ! { dg-error "different shape" }
+ print *,maxloc(a,1,mask=lo2) ! { dg-error "different shape" }
+ print *,minval(a,1,mask=lo2) ! { dg-error "different shape" }
+ print *,maxval(a,1,mask=lo2) ! { dg-error "different shape" }
+ print *,sum(a,1,mask=lo2) ! { dg-error "different shape" }
+ print *,product(a,1,mask=lo2) ! { dg-error "different shape" }
+end program main