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