summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/optional_absent_2.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/optional_absent_2.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/optional_absent_2.f9053
1 files changed, 53 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/optional_absent_2.f90 b/gcc/testsuite/gfortran.dg/optional_absent_2.f90
new file mode 100644
index 000000000..717bab7e7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/optional_absent_2.f90
@@ -0,0 +1,53 @@
+! { dg-do run }
+!
+! PR fortran/51758
+!
+! Contributed by Mikael Morin
+!
+! Check whether passing NULL() to an elemental procedure works,
+! where NULL() denotes an absent optional argument.
+!
+program p
+
+ integer :: a(2)
+ integer :: b
+
+ a = 0
+ a = foo((/ 1, 1 /), null())
+! print *, a
+ if (any(a /= 2)) call abort
+
+ a = 0
+ a = bar((/ 1, 1 /), null())
+! print *, a
+ if (any(a /= 2)) call abort
+
+ b = 0
+ b = bar(1, null())
+! print *, b
+ if (b /= 2) call abort
+
+contains
+
+ function foo(a, b)
+ integer :: a(:)
+ integer, optional :: b(:)
+ integer :: foo(size(a))
+
+ if (present(b)) call abort
+
+ foo = 2
+ end function foo
+
+ elemental function bar(a, b)
+ integer, intent(in) :: a
+ integer, intent(in), optional :: b
+ integer :: bar
+
+ bar = 2
+
+ if (present(b)) bar = 1
+
+ end function bar
+
+end program p