$> cat matmul.f90
  REAL, DIMENSION(2,2) :: a
  character(1) :: b

  print *, MATMUL(a, b)      ! line 4: argument matrix_b is wrong
  print *, MATMUL(b, a)      ! line 5: argument matrix_a is wrong
end

$> gfortran-svn matmul.f90
matmul.f90:4.18:

  print *, MATMUL(a, b)
                 1
Error: 'matrix_a' argument of 'matmul' intrinsic at (1) must be numeric or
LOGICAL
matmul.f90:5.20:

  print *, MATMUL(b, a)
                   1
Error: 'matrix_b' argument of 'matmul' intrinsic at (1) must be numeric or
LOGICAL


Proposed change (untested):
Index: check.c
===================================================================
--- check.c     (revision 136058)
+++ check.c     (working copy)
@@ -1761,7 +1761,7 @@ gfc_check_malloc (gfc_expr *size)
 try
 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
 {
-  if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
+  if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
     {
       gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
                 "or LOGICAL", gfc_current_intrinsic_arg[0],
@@ -1769,7 +1769,7 @@ gfc_check_matmul (gfc_expr *matrix_a, gf
       return FAILURE;
     }

-  if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
+  if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
     {
       gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
                 "or LOGICAL", gfc_current_intrinsic_arg[1],


-- 
           Summary: matmul argument-check: wrong error messages
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dfranke at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36355

Reply via email to