Patchwork [fortran,4.6,Regression] wrong results with MATMUL(..., TRANSPOSE (func ())) -- 465.tonto test run

login
register
mail settings
Submitter Jerry DeLisle
Date Dec. 11, 2010, 8:14 p.m.
Message ID <4D03DBBA.3050001@frontier.com>
Download mbox | patch
Permalink /patch/75208/
State New
Headers show

Comments

Jerry DeLisle - Dec. 11, 2010, 8:14 p.m.
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.

Patch

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;