This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch, fortran] [4.6 Regression] wrong results with MATMUL(..., TRANSPOSE (func ())) -- 465.tonto test run
- From: Jerry DeLisle <jvdelisle at frontier dot com>
- To: gfortran <fortran at gcc dot gnu dot org>
- Cc: gcc patches <gcc-patches at gcc dot gnu dot org>
- Date: Sat, 11 Dec 2010 12:14:50 -0800
- Subject: [patch, fortran] [4.6 Regression] wrong results with MATMUL(..., TRANSPOSE (func ())) -- 465.tonto test run
Fixed after review and approval by Tobias on IRC.
$ svn commit ChangeLog trans-array.c
Sending ChangeLog
Sending trans-array.c
Transmitting file data ..
Committed revision 167713.
Best regards,
Jerry
2010-12-11 Mikael Morin <mikael@gcc.gnu.org>
Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/46842
* trans-array.c (dim_ok): New helper function.
(gfc_conv_expr_descriptor): Use new helper function to check
function array is full.
Index: trans-array.c
===================================================================
--- trans-array.c (revision 167711)
+++ trans-array.c (working copy)
@@ -5293,6 +5293,16 @@
}
}
+/* Helper function to check dimensions. */
+static bool
+dim_ok (gfc_ss_info *info)
+{
+ int n;
+ for (n = 0; n < info->dimen; n++)
+ if (info->dim[n] != n)
+ return false;
+ return true;
+}
/* Convert an array for passing as an actual argument. Expressions and
vector subscripts are evaluated and stored in a temporary, which is then
@@ -5378,15 +5388,7 @@
else
full = gfc_full_array_ref_p (info->ref, NULL);
- if (full)
- for (n = 0; n < info->dimen; n++)
- if (info->dim[n] != n)
- {
- full = 0;
- break;
- }
-
- if (full)
+ if (full && dim_ok (info))
{
if (se->direct_byref && !se->byref_noassign)
{
@@ -5588,7 +5590,7 @@
desc = loop.temp_ss->data.info.descriptor;
}
- else if (expr->expr_type == EXPR_FUNCTION)
+ else if (expr->expr_type == EXPR_FUNCTION && dim_ok (info))
{
desc = info->descriptor;
se->string_length = ss->string_length;