aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2015-08-19 14:47:23 +0000
committerMikael Morin <mikael@gcc.gnu.org>2015-08-19 14:47:23 +0000
commitea0daf5f374f765891ab8ab9e6652bdf9746d34c (patch)
tree3bd9db911a089ea5d56f779017090e9c11973927
parent255520e020ed9a5178b04ec006bfbf0915148315 (diff)
downloadgcc-ea0daf5f374f765891ab8ab9e6652bdf9746d34c.zip
gcc-ea0daf5f374f765891ab8ab9e6652bdf9746d34c.tar.gz
gcc-ea0daf5f374f765891ab8ab9e6652bdf9746d34c.tar.bz2
Forward-port test generic_31.f90 from the 5 branch.
gcc/testsuite/ PR fortran/66929 * gfortran.dg/generic_31.f90: New. From-SVN: r227010
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/generic_31.f9035
2 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e04bb1b..e162dd2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..2c0d029
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/generic_31.f90
@@ -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