http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50407

--- Comment #10 from Steve Kargl <sgk at troutmask dot apl.washington.edu> 
2011-09-15 23:05:25 UTC ---
On Thu, Sep 15, 2011 at 10:53:17PM +0000, sgk at troutmask dot
apl.washington.edu wrote:
> 
> putting a fairly ugly hack into match_dt_format to 
> skip statement lable matching, I can get gfortran
> to give 
> 
> troutmask:sgk[266] gfc4x -o z b.f && ./z
> ok 16
> ok 6
> ok 12
> 

It's not pretty, but it appears to work.

Index: io.c
===================================================================
--- io.c    (revision 178782)
+++ io.c    (working copy)
@@ -2548,17 +2554,24 @@ match_dt_format (gfc_dt *dt)

   if ((m = gfc_match_st_label (&label)) == MATCH_YES)
     {
-      if (dt->format_expr != NULL || dt->format_label != NULL)
+      gfc_gobble_whitespace ();
+      if (gfc_peek_ascii_char () != '.')
     {
-      gfc_free_st_label (label);
-      goto conflict;
-    }

-      if (gfc_reference_st_label (label, ST_LABEL_FORMAT) == FAILURE)
-    return MATCH_ERROR;
+      if (dt->format_expr != NULL || dt->format_label != NULL)
+        {
+          gfc_free_st_label (label);
+          goto conflict;
+        }

-      dt->format_label = label;
-      return MATCH_YES;
+      if (gfc_reference_st_label (label, ST_LABEL_FORMAT) == FAILURE)
+        return MATCH_ERROR;
+
+      dt->format_label = label;
+      return MATCH_YES;
+    }
+      else
+    gfc_current_locus = where;
     }
   else if (m == MATCH_ERROR)
     /* The label was zero or too large.  Emit the correct diagnosis.  */

Reply via email to