Forward-port test generic_31.f90 from the 5 branch.
authorMikael Morin <mikael@gcc.gnu.org>
Wed, 19 Aug 2015 14:47:23 +0000 (14:47 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Wed, 19 Aug 2015 14:47:23 +0000 (14:47 +0000)
gcc/testsuite/
PR fortran/66929
* gfortran.dg/generic_31.f90: New.

From-SVN: r227010

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/generic_31.f90 [new file with mode: 0644]

index e04bb1bc62d47d5a4e5fdf4b3481c28a00de54c6..e162dd26d782188dd4ef3016a037458c129902b5 100644 (file)
@@ -1,3 +1,8 @@
+2015-08-19  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/66929
+       * gfortran.dg/generic_31.f90: New.
+
 2015-08-19  Marek Polacek  <polacek@redhat.com>
 
        PR middle-end/67133
diff --git a/gcc/testsuite/gfortran.dg/generic_31.f90 b/gcc/testsuite/gfortran.dg/generic_31.f90
new file mode 100644 (file)
index 0000000..2c0d029
--- /dev/null
@@ -0,0 +1,35 @@
+! { dg-do run }
+!
+! PR fortran/66929
+! Check that the specific FIRST symbol is used for the call to FOO,
+! so that the J argument is not assumed to be present
+
+module m
+  interface foo
+    module procedure first
+  end interface foo
+contains
+  elemental function bar(j) result(r)
+    integer, intent(in), optional :: j
+    integer :: r, s(2)
+    ! We used to have NULL dereference here, in case of a missing J argument
+    s = foo(j, [3, 7])
+    r = sum(s)
+  end function bar
+  elemental function first(i, j) result(r)
+    integer, intent(in), optional :: i
+    integer, intent(in) :: j
+    integer :: r
+    if (present(i)) then
+      r = i
+    else
+      r = -5
+    end if
+  end function first
+end module m
+program p
+  use m
+  integer :: i
+  i = bar()
+  if (i /= -10) call abort
+end program p