Patchwork [Fortran] PR52101 Fix obsolescent warning

login
register
mail settings
Submitter Tobias Burnus
Date July 17, 2012, 8:14 a.m.
Message ID <50051ED0.30407@net-b.de>
Download mbox | patch
Permalink /patch/171356/
State New
Headers show

Comments

Tobias Burnus - July 17, 2012, 8:14 a.m.
gfortran warns (with -std=) for the obsolescence of
   character*5 ...
which is correct. However, it also warns when using
   character name*5
which is not (yet) obsolescent.

Fixed by the attached patch. In comment 5 you find Steve's version of 
the patch, which I only saw after writing my patch. The only difference 
seems to be the name of the parameter. Steve uses "entity_decl".

Build and regtested on x86-64-gnu-linux.
OK for the trunk?

Tobias
Janus Weil - July 17, 2012, 9:04 a.m.
Hi,

> gfortran warns (with -std=) for the obsolescence of
>   character*5 ...
> which is correct. However, it also warns when using
>   character name*5
> which is not (yet) obsolescent.
>
> Fixed by the attached patch. In comment 5 you find Steve's version of the
> patch, which I only saw after writing my patch. The only difference seems to
> be the name of the parameter. Steve uses "entity_decl".
>
> Build and regtested on x86-64-gnu-linux.
> OK for the trunk?

I think this is also ok (and close to obvious). Thanks!

Btw, I am about to commit a cleanup patch regarding gfc_notify_std
(any minute now) ...

Cheers,
Janus

Patch

2012-07-17  Tobias Burnus  <burnus@net-b.de>

	PR fortran/52101
	* decl.c (match_char_length): Extra argument, show obsolenscent
	warning only if *length is used after the typename.
	(variable_decl, gfc_match_char_spec): Update call

2012-07-17  Tobias Burnus  <burnus@net-b.de>

	PR fortran/52101
	* gfortran.dg/oldstyle_4.f90: New.

diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index c3644b6..c6ba43e 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -723,7 +727,7 @@  syntax:
    char_len_param_value in parenthesis.  */
 
 static match
-match_char_length (gfc_expr **expr, bool *deferred)
+match_char_length (gfc_expr **expr, bool *deferred, bool obsolenscent_check)
 {
   int length;
   match m;
@@ -739,8 +743,9 @@  match_char_length (gfc_expr **expr, bool *deferred)
 
   if (m == MATCH_YES)
     {
-      if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent feature: "
-			  "Old-style character length at %C") == FAILURE)
+      if (obsolenscent_check
+	  && gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent feature: "
+			     "Old-style character length at %C") == FAILURE)
 	return MATCH_ERROR;
       *expr = gfc_get_int_expr (gfc_default_integer_kind, NULL, length);
       return m;
@@ -1849,7 +1854,7 @@  variable_decl (int elem)
 
   if (current_ts.type == BT_CHARACTER)
     {
-      switch (match_char_length (&char_len, &cl_deferred))
+      switch (match_char_length (&char_len, &cl_deferred, false))
 	{
 	case MATCH_YES:
 	  cl = gfc_new_charlen (gfc_current_ns, NULL);
@@ -2411,7 +2416,7 @@  gfc_match_char_spec (gfc_typespec *ts)
   /* Try the old-style specification first.  */
   old_char_selector = 0;
 
-  m = match_char_length (&len, &deferred);
+  m = match_char_length (&len, &deferred, true);
   if (m != MATCH_NO)
     {
       if (m == MATCH_YES)
--- /dev/null	2012-07-17 07:28:04.995717470 +0200
+++ gcc/gcc/testsuite/gfortran.dg/oldstyle_4.f90	2012-07-17 08:49:00.000000000 +0200
@@ -0,0 +1,13 @@ 
+! { dg-do compile }
+! { dg-options "-std=f95" }
+!
+! PR fortran/52101
+!
+! Contributed by John Harper
+!
+program foo
+   character*10 s    ! { dg-warning "Obsolescent feature: Old-style character length" }
+   character    t*10 ! Still okay
+   s = 'foo'
+   t = 'bar'
+end program foo