aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2010-09-09 18:52:11 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2010-09-09 18:52:11 +0000
commit26865ab4e8a09b607fae1c338137a4ac65c476cc (patch)
treea432bf98d9ee2e60655380588d94eed4e8d7d7f5 /gcc
parentb1012ca4be23e00404c49f8520196af908110a10 (diff)
downloadgcc-26865ab4e8a09b607fae1c338137a4ac65c476cc.zip
gcc-26865ab4e8a09b607fae1c338137a4ac65c476cc.tar.gz
gcc-26865ab4e8a09b607fae1c338137a4ac65c476cc.tar.bz2
dummy_optional_arg.f90: New test.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/expr.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/dummy_optional_arg.f9018
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5e3def2..29b8a26 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 9595466..76ceec9 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2f0acf7..fbbbd56 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..4c0417b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dummy_optional_arg.f90
@@ -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