aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2012-01-09 19:01:34 +0000
committerMikael Morin <mikael@gcc.gnu.org>2012-01-09 19:01:34 +0000
commit80508c4992478622752098e1ac43cef6a30b07b1 (patch)
tree3327a8741158384ab6c5c31079ddd16a8b490e2b /gcc
parent3d137660a5e34ba65d4b2c1e13c887796b43378b (diff)
downloadgcc-80508c4992478622752098e1ac43cef6a30b07b1.zip
gcc-80508c4992478622752098e1ac43cef6a30b07b1.tar.gz
gcc-80508c4992478622752098e1ac43cef6a30b07b1.tar.bz2
[multiple changes]
2012-01-09 Mikael Morin <mikael@gcc.gnu.org> PR fortran/51758 * trans-array.c (gfc_walk_elemental_function_args): Skip over NULL() actual arguments. 2012-01-09 Tobias Burnus <burnus@net-b.de> PR fortran/51758 * gfortran.dg/optional_absent_2.f90: New. From-SVN: r183024
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/optional_absent_2.f9053
4 files changed, 65 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 29e8cab..755e11e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-09 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/51758
+ * trans-array.c (gfc_walk_elemental_function_args):
+ Skip over NULL() actual arguments.
+
2012-01-09 Tobias Burnus <burnus@net-b.de>
* gfortran.texi: Bump copyright year.
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index b9902b9..1fd8dcb 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -8369,7 +8369,7 @@ gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg,
scalar = 1;
for (; arg; arg = arg->next)
{
- if (!arg->expr)
+ if (!arg->expr || arg->expr->expr_type == EXPR_NULL)
continue;
newss = gfc_walk_subexpr (head, arg->expr);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bab4f89..565aec5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2012-01-09 Tobias Burnus <burnus@net-b.de>
+ PR fortran/51758
+ * gfortran.dg/optional_absent_2.f90: New.
+
+2012-01-09 Tobias Burnus <burnus@net-b.de>
+
PR fortran/51578
* gfortran.dg/use_17.f90: New.
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 0000000..717bab7
--- /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