Bug 34566 - [4.3 Regression] Matmul of logical values
[4.3 Regression] Matmul of logical values
Status: RESOLVED FIXED
Product: gcc
Classification: Unclassified
Component: fortran
4.3.0
: P3 critical
: 4.3.0
Assigned To: Thomas Koenig
: wrong-code
Depends on:
Blocks: 32834
  Show dependency treegraph
 
Reported: 2007-12-23 11:40 UTC by Tobias Burnus
Modified: 2007-12-25 10:13 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-12-23 13:25:54


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2007-12-23 11:40:41 UTC
And another bug found via the test suite. It works with 4.1.3 and 4.2.2, but with gfortran the result array is .FALSE.; however, result(1,3) shall be .TRUE.

program m
implicit none
logical, dimension (3, 3) :: &
   p = &
      reshape ( (/.false.,.false.,.false., &
                  .true., .false.,.false., &
                  .false.,.true., .false. /), &
                (/ 3, 3/) )
logical, dimension(3,3) :: result
result = matmul(p,p)
write(*,*) matmul(p,p)
if(any(result(2:3,:))) stop 'ERROR 1'
if(any(result(1,1:2))) stop 'ERROR 2'
if(.not.result(1,3))   stop 'ERROR 3'
end program m
Comment 1 Thomas Koenig 2007-12-23 13:25:54 UTC
I probably broke this, and I think I know how to
put this right.
Comment 2 Andrew Pinski 2007-12-23 17:56:21 UTC
Only the RM can change the priority.
Comment 3 Thomas Koenig 2007-12-23 21:48:25 UTC
Here's a patch.

$ svn diff
Index: matmull.m4
===================================================================
--- matmull.m4	(revision 131146)
+++ matmull.m4	(working copy)
@@ -154,7 +154,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dn
     {
       astride = a->dim[1].stride * a_kind;
       count = a->dim[1].ubound + 1 - a->dim[1].lbound;
-      xstride = a->dim[0].stride;
+      xstride = a->dim[0].stride * a_kind;
       xcount = a->dim[0].ubound + 1 - a->dim[0].lbound;
     }
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -169,7 +169,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dn
     {
       bstride = b->dim[0].stride * b_kind;
       assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound);
-      ystride = b->dim[1].stride;
+      ystride = b->dim[1].stride * b_kind;
       ycount = b->dim[1].ubound + 1 - b->dim[1].lbound;
     }
Comment 4 Thomas Koenig 2007-12-25 10:13:06 UTC
Subject: Bug 34566

Author: tkoenig
Date: Tue Dec 25 10:12:41 2007
New Revision: 131167

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131167
Log:
2007-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/34566
	* m4/matmull.m4:  Multiply xstride and ystride by correct kind.
	* generated/matmul_l4.c:  Regenerated.
	* generated/matmul_l8.c:  Regenerated.
	* generated/matmul_l16.c:  Regenerated.

2007-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/34566
	* gfortran.dg/matmul_6.f90:  New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/matmul_6.f90
Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/generated/matmul_l16.c
    trunk/libgfortran/generated/matmul_l4.c
    trunk/libgfortran/generated/matmul_l8.c
    trunk/libgfortran/m4/matmull.m4

Comment 5 Thomas Koenig 2007-12-25 10:13:53 UTC
Fixed.