OSDN Git Service

2010-01-24 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 Jan 2010 08:10:47 +0000 (08:10 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 24 Jan 2010 08:10:47 +0000 (08:10 +0000)
        PR fortran/39304
        * array.c (gfc_array_dimen_size): Use correct specific
        function in the check.

2010-01-24  Tobias Burnus  <burnus@net-b.de>

        PR fortran/39304
        * gfortran.dg/generic_20.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156195 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/array.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/generic_20.f90 [new file with mode: 0644]

index 84dcaae..ae4fa51 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-24  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/39304
+       * array.c (gfc_array_dimen_size): Use correct specific
+       function in the check.
+
 2010-01-21  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/42736
index 7bb5100..139609c 100644 (file)
@@ -2053,7 +2053,15 @@ gfc_array_dimen_size (gfc_expr *array, int dimen, mpz_t *result)
          return SUCCESS;
        }
 
-      if (spec_dimen_size (array->symtree->n.sym->as, dimen, result) == FAILURE)
+      if (array->symtree->n.sym->attr.generic
+         && !array->symtree->n.sym->attr.intrinsic)
+       {
+         if (spec_dimen_size (array->value.function.esym->as, dimen, result)
+             == FAILURE)
+           return FAILURE;
+       }
+      else if (spec_dimen_size (array->symtree->n.sym->as, dimen, result)
+              == FAILURE)
        return FAILURE;
 
       break;
index e321412..c9a6fdc 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-24  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/39304
+       * gfortran.dg/generic_20.f90: New test.
+
 2010-01-22  Michael Matz  <matz@suse.de>
 
        * gfortran.dg/vect/fast-math-mgrid-resid.f: Limit to x86, add
diff --git a/gcc/testsuite/gfortran.dg/generic_20.f90 b/gcc/testsuite/gfortran.dg/generic_20.f90
new file mode 100644 (file)
index 0000000..04a57b0
--- /dev/null
@@ -0,0 +1,31 @@
+! { dg-do run }
+!
+! PR fortran/39304
+!
+! matmul checking was checking the wrong specific function
+! ("one" instead of "two")
+!
+module m
+  implicit none
+  interface one
+    module procedure one, two
+  end interface one
+contains
+  function one()
+    real :: one(1)
+    one = 0.0
+  end function one
+  function two(x)
+    real :: x
+    real :: two(1,1)
+    two = reshape ( (/ x /), (/ 1, 1 /) )
+  end function two
+end module m
+
+use m
+real :: res(1)
+res = matmul (one(2.0), (/ 2.0/))
+if (abs (res(1)-4.0) > epsilon (res)) call abort ()
+end
+
+! { dg-final { cleanup-modules "m" } }