diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2010-09-09 18:52:11 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2010-09-09 18:52:11 +0000 |
commit | 26865ab4e8a09b607fae1c338137a4ac65c476cc (patch) | |
tree | a432bf98d9ee2e60655380588d94eed4e8d7d7f5 /gcc | |
parent | b1012ca4be23e00404c49f8520196af908110a10 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/expr.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dummy_optional_arg.f90 | 18 |
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 |