https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80904

            Bug ID: 80904
           Summary: [6/7/8 Regression] Matmul result allocated to wrong
                    size
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkoenig at gcc dot gnu.org
  Target Milestone: ---

Again: Add a new feature, find an old bug...

Test case:

! { dg-do run }
program main
  real, dimension(3,2) :: a
  real, dimension(3) :: bp
  real, dimension(3) :: res1
  real, dimension(:), allocatable :: c3
  real, dimension(2) :: res2

  data a /-2., 3., -5., 7., -11., 13./
  data bp /-23., -31., -41./
  data res2 /158., -353./

  c3 = matmul(bp,a)
  if (size(c3,1) /= 2) call abort
  if (any(c3 /= res2)) call abort

end program main

One-character fix:

Index: frontend-passes.c
===================================================================
--- frontend-passes.c   (Revision 248467)
+++ frontend-passes.c   (Arbeitskopie)
@@ -2447,7 +2447,7 @@ matmul_lhs_realloc (gfc_expr *c, gfc_expr *a, gfc_
       break;

     case A1B2:
-      ar->start[0] = get_array_inq_function (GFC_ISYM_SIZE, b, 1);
+      ar->start[0] = get_array_inq_function (GFC_ISYM_SIZE, b, 2);
       cond = build_logical_expr (INTRINSIC_NE,
                                 get_array_inq_function (GFC_ISYM_SIZE, c, 1),
                                 get_array_inq_function (GFC_ISYM_SIZE, b, 2));

Reply via email to