dummy_optional_arg.f90: New test.
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 9 Sep 2010 18:52:11 +0000 (18:52 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 9 Sep 2010 18:52:11 +0000 (18:52 +0000)
2010-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

* gfortran.dg/dummy_optional_arg.f90: New test.

2010-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>

* fortran/expr.c (check_inquiry): OPTIONAL attribute is not allowed
for dummy argument that appears in a specification statement.

From-SVN: r164120

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

index 5e3def2..29b8a26 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       * fortran/expr.c (check_inquiry): OPTIONAL attribute is not allowed
+       for dummy argument that appears in a specification statement.
+
 2010-09-09  Mikael Morin  <mikael@gcc.gnu.org>
 
        * trans-array.c (gfc_get_array_ref_dim): New function.
index 9595466..76ceec9 100644 (file)
@@ -2305,6 +2305,12 @@ check_inquiry (gfc_expr *e, int not_restricted)
              && ap->expr->expr_type != EXPR_VARIABLE
              && check_restricted (ap->expr) == FAILURE)
          return MATCH_ERROR;
+
+       if (not_restricted == 0
+           && ap->expr->expr_type == EXPR_VARIABLE
+           && ap->expr->symtree->n.sym->attr.dummy
+           && ap->expr->symtree->n.sym->attr.optional)
+         return MATCH_NO;
     }
 
   return MATCH_YES;
index 2f0acf7..fbbbd56 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-09  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       * gfortran.dg/dummy_optional_arg.f90: New test.
+
 2010-09-08  Jan Hubicka  <jh@suse.cz>
 
        PR tree-optimization/45598
diff --git a/gcc/testsuite/gfortran.dg/dummy_optional_arg.f90 b/gcc/testsuite/gfortran.dg/dummy_optional_arg.f90
new file mode 100644 (file)
index 0000000..4c0417b
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR fortran/45495
+!
+! Code originally submitted by Philip Mason <pmason at ricardo dot com>
+!
+function jack(aa)
+   character(len=*), intent(in) :: aa
+   optional :: aa
+   character(len=len(aa)+1) :: jack ! { dg-error "cannot be OPTIONAL" }
+   jack = ''
+end function jack
+
+function diane(aa)
+   character(len=*), intent(out) :: aa
+   character(len=len(aa)+1) :: diane
+   diane = '012345678901'
+   aa = 'abcdefghijklmn'
+end function diane