From 8f9c06ca82a4d5b10fd2b88e3267036c4f12c779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Schl=C3=BCter?= <tobias.schlueter@physik.uni-muenchen.de> Date: Sun, 13 Mar 2005 19:37:17 +0100 Subject: [PATCH] re PR fortran/20323 (optional arguments incorrectly accepted in specification expressions) fortran/ PR fortran/20323 * resolve.c (gfc_resolve): Check if character lengths are specification expressions. testsuite/ PR fortran/20323 * gfortran.dg/spec_expr_1.f90: New test. From-SVN: r96382 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 9 +++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/spec_expr_1.f90 | 12 ++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 510789120e40..d4823b3e153c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-03-13 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> + + PR fortran/20323 + * resolve.c (gfc_resolve): Check if character lengths are + specification expressions. + 2005-03-12 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> PR fortran/20361 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 126f21fd5918..b51206f91b74 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4749,10 +4749,11 @@ gfc_resolve (gfc_namespace * ns) if (cl->length == NULL || gfc_resolve_expr (cl->length) == FAILURE) continue; - if (cl->length->ts.type != BT_INTEGER) - gfc_error - ("Character length specification at %L must be of type INTEGER", - &cl->length->where); + if (gfc_simplify_expr (cl->length, 0) == FAILURE) + continue; + + if (gfc_specification_expr (cl->length) == FAILURE) + continue; } gfc_traverse_ns (ns, resolve_values); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f2b16c433864..d3b3eb591cca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-03-13 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> + + PR fortran/20323 + * gfortran.dg/spec_expr_1.f90: New test. + 2005-03-13 Joseph S. Myers <joseph@codesourcery.com> PR c/20402 diff --git a/gcc/testsuite/gfortran.dg/spec_expr_1.f90 b/gcc/testsuite/gfortran.dg/spec_expr_1.f90 new file mode 100644 index 000000000000..61591c3113c1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/spec_expr_1.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR 20323 +! We didn't verify that character length expressions are specification +! expressions. +function testpresent(arg) + integer, intent(in), optional :: arg + character(len=arg) :: s ! { dg-error "OPTIONAL" } + logical :: testpresent + + testpresent=.true. + +end function testpresent -- GitLab