re PR fortran/58001 (Make it possible to silence "Extension: Tab character in format...
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 17 Nov 2016 00:18:18 +0000 (00:18 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 17 Nov 2016 00:18:18 +0000 (00:18 +0000)
2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/58001
* io.c (next_char_not_space): Update handling of a 'tab' in a FORMAT.
  (format_lex): Adjust invocations of next_char_not_space().

2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/58001
* gfortran.dg/fmt_tab_1.f90: Adjust testcase.
* gfortran.dg/fmt_tab_2.f90: Ditto.

From-SVN: r242530

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/fmt_tab_1.f90
gcc/testsuite/gfortran.dg/fmt_tab_2.f90

index 4dad588c3d2e84266ceb1d0f3b8416d8260623c4..428ebdaeede73bc3f86c21d31b8138151db1a111 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/58001
+       * io.c (next_char_not_space): Update handling of a 'tab' in a FORMAT.
+       (format_lex): Adjust invocations of next_char_not_space().
+
 2016-11-16  Andre Vehreschild  <vehre@gcc.gnu.org>
 
        PR fortran/78356
index 04cc1a253581f67bfcde39099b6be01ce6ac8b43..d35437aeb23e88c3b65ba2edb8273a22069ade7d 100644 (file)
@@ -200,23 +200,14 @@ unget_char (void)
 /* Eat up the spaces and return a character.  */
 
 static char
-next_char_not_space (bool *error)
+next_char_not_space ()
 {
   char c;
   do
     {
       error_element = c = next_char (NONSTRING);
       if (c == '\t')
-       {
-         if (gfc_option.allow_std & GFC_STD_GNU)
-           gfc_warning (0, "Extension: Tab character in format at %C");
-         else
-           {
-             gfc_error ("Extension: Tab character in format at %C");
-             *error = true;
-             return c;
-           }
-       }
+       gfc_warning (OPT_Wtabs, "Nonconforming tab character in format at %C");
     }
   while (gfc_is_whitespace (c));
   return c;
@@ -234,7 +225,6 @@ format_lex (void)
   char c, delim;
   int zflag;
   int negative_flag;
-  bool error = false;
 
   if (saved_token != FMT_NONE)
     {
@@ -243,7 +233,7 @@ format_lex (void)
       return token;
     }
 
-  c = next_char_not_space (&error);
+  c = next_char_not_space ();
   
   negative_flag = 0;
   switch (c)
@@ -253,7 +243,7 @@ format_lex (void)
       /* Falls through.  */
 
     case '+':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       if (!ISDIGIT (c))
        {
          token = FMT_UNKNOWN;
@@ -264,7 +254,7 @@ format_lex (void)
 
       do
        {
-         c = next_char_not_space (&error);
+         c = next_char_not_space ();
          if (ISDIGIT (c))
            value = 10 * value + c - '0';
        }
@@ -294,7 +284,7 @@ format_lex (void)
 
       do
        {
-         c = next_char_not_space (&error);
+         c = next_char_not_space ();
          if (ISDIGIT (c))
            {
              value = 10 * value + c - '0';
@@ -329,7 +319,7 @@ format_lex (void)
       break;
 
     case 'T':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       switch (c)
        {
        case 'L':
@@ -357,7 +347,7 @@ format_lex (void)
       break;
 
     case 'S':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       if (c != 'P' && c != 'S')
        unget_char ();
 
@@ -365,7 +355,7 @@ format_lex (void)
       break;
 
     case 'B':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       if (c == 'N' || c == 'Z')
        token = FMT_BLANK;
       else
@@ -427,7 +417,7 @@ format_lex (void)
       break;
 
     case 'E':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       if (c == 'N' )
        token = FMT_EN;
       else if (c == 'S')
@@ -457,7 +447,7 @@ format_lex (void)
       break;
 
     case 'D':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       if (c == 'P')
        {
          if (!gfc_notify_std (GFC_STD_F2003, "DP format "
@@ -478,7 +468,7 @@ format_lex (void)
              "specifier not allowed at %C"))
            return FMT_ERROR;
          token = FMT_DT;
-         c = next_char_not_space (&error);
+         c = next_char_not_space ();
          if (c == '\'' || c == '"')
            {
              delim = c;
@@ -518,7 +508,7 @@ format_lex (void)
       break;
 
     case 'R':
-      c = next_char_not_space (&error);
+      c = next_char_not_space ();
       switch (c)
        {
        case 'C':
@@ -559,9 +549,6 @@ format_lex (void)
       break;
     }
 
-  if (error)
-    return FMT_ERROR;
-
   return token;
 }
 
index 20fcf383322f5bee178e0775eeaff08722792d18..9b616e6d7a441ad47fe8cc1412b6dff08a5d86a9 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-16  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/58001
+       * gfortran.dg/fmt_tab_1.f90: Adjust testcase.
+       * gfortran.dg/fmt_tab_2.f90: Ditto.
+
 2016-11-16  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/78378
index f58e388c2f7943fd4514f5b0f0975aed182f0bea..a763714881b41340adf5486f283742343bd17b0d 100644 (file)
@@ -1,7 +1,12 @@
 ! { dg-do compile }
-! { dg-options -Wno-error=tabs }
+! { dg-options -Wtabs }
 ! PR fortran/32987
+! PR fortran/58001
       program TestFormat
         write (*, 10)
- 10     format ('Hello ',      'bug!') ! { dg-warning "Extension: Tab character in format" }
+        ! There is a tab character before 'bug!'.  This is accepted without
+        ! the -Wno-tabs option or a -std= option.
+ 10     format ('Hello ',      'bug!') ! { dg-warning "tab character in format" }
+
       end
+! { dg-excess-errors "tab character in format" }
index 560d8865aa76fc09925a3a4be64d2d0868f373b1..bfff7ce924f4b6728daee14ec77fb2f4addec01e 100644 (file)
@@ -1,7 +1,9 @@
 ! { dg-do compile }
 ! { dg-options "-std=f2003" }
 ! PR fortran/32987
+! PR fortran/58001
       program TestFormat
-        write (*, 10) ! { dg-error "FORMAT label 10 at .1. not defined" }
- 10     format ('Hello ',      'bug!') ! { dg-error "Extension: Tab character in format|Nonconforming tab character" }
+        write (*, 10)
+ 10     format ('Hello ',      'bug!') ! { dg-warning "tab character in format" }
       end
+! { dg-excess-errors "tab character in FORMAT" }