aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/m4/matmul.m4
diff options
context:
space:
mode:
authorVictor Leikehman <lei@il.ibm.com>2004-08-09 14:34:39 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2004-08-09 14:34:39 +0000
commit883c9d4d1237863941b95b3e7b8dba71fb49a78e (patch)
treec587895dd83e037b88dc7cd3d97ecb67add9aa8f /libgfortran/m4/matmul.m4
parent705debec1e0d71c1d6c0c3e7f9346c8eed391111 (diff)
downloadgcc-883c9d4d1237863941b95b3e7b8dba71fb49a78e.zip
gcc-883c9d4d1237863941b95b3e7b8dba71fb49a78e.tar.gz
gcc-883c9d4d1237863941b95b3e7b8dba71fb49a78e.tar.bz2
matmul.m4, [...]: Allocate space if return value has NULL in its data field.
2004-09-09 Victor Leikehman <lei@il.ibm.com> * m4/matmul.m4, m4/matmull.m4, intrinsics/eoshift0.c, intrinsics/eoshift2.c, intrinsics/transpose_generic.c: Allocate space if return value has NULL in its data field. * generated/*.c: Regenerate. From-SVN: r85717
Diffstat (limited to 'libgfortran/m4/matmul.m4')
-rw-r--r--libgfortran/m4/matmul.m432
1 files changed, 31 insertions, 1 deletions
diff --git a/libgfortran/m4/matmul.m4 b/libgfortran/m4/matmul.m4
index 26b241d..7a54b05 100644
--- a/libgfortran/m4/matmul.m4
+++ b/libgfortran/m4/matmul.m4
@@ -2,7 +2,7 @@
Copyright 2002 Free Software Foundation, Inc.
Contributed by Paul Brook <paul@nowt.org>
-This file is part of the GNU Fortran 95 runtime library (libgfor).
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
Libgfortran is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -52,6 +52,36 @@ void
assert (GFC_DESCRIPTOR_RANK (a) == 2
|| GFC_DESCRIPTOR_RANK (b) == 2);
+
+ if (retarray->data == NULL)
+ {
+ if (GFC_DESCRIPTOR_RANK (a) == 1)
+ {
+ retarray->dim[0].lbound = 0;
+ retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound;
+ retarray->dim[0].stride = 1;
+ }
+ else if (GFC_DESCRIPTOR_RANK (b) == 1)
+ {
+ retarray->dim[0].lbound = 0;
+ retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound;
+ retarray->dim[0].stride = 1;
+ }
+ else
+ {
+ retarray->dim[0].lbound = 0;
+ retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound;
+ retarray->dim[0].stride = 1;
+
+ retarray->dim[1].lbound = 0;
+ retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound;
+ retarray->dim[1].stride = retarray->dim[0].ubound+1;
+ }
+
+ retarray->data = internal_malloc (sizeof (rtype_name) * size0 (retarray));
+ retarray->base = 0;
+ }
+
abase = a->data;
bbase = b->data;
dest = retarray->data;