re PR fortran/15511 (Warning about truncated lines does not follow the standard gcc...
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
Mon, 21 Jun 2004 22:22:32 +0000 (00:22 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Mon, 21 Jun 2004 22:22:32 +0000 (00:22 +0200)
PR fortran/15511
* scanner.c (load_line): Don't truncate preprocessor lines.
Reformat error message.
(preprocessor_line): Issue warning in case of malformed
preprocessor line.

From-SVN: r83455

gcc/fortran/ChangeLog
gcc/fortran/scanner.c

index 4677f3921bf54951b6d5e0f144adeb1ba2a9e0ad..41c9a90a78086d50078bd019e4b884f408af6290 100644 (file)
@@ -1,3 +1,11 @@
+2004-06-21  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de
+
+       PR fortran/15511
+       * scanner.c (load_line): Don't truncate preprocessor lines.
+       Reformat error message.
+       (preprocessor_line): Issue warning in case of malformed
+       preprocessor line. 
+
 2004-06-21  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
        * resolve.c (resolve_symbol): Add comment in function body.
index b280e1417ba0a43b2c73a95e35512b7a14b26664..8b8f0b0295e1138fdbf40108ad63d5558a3277a1 100644 (file)
@@ -679,7 +679,7 @@ gfc_gobble_whitespace (void)
 static void
 load_line (FILE * input, char *buffer, char *filename, int linenum)
 {
-  int c, maxlen, i, trunc_flag;
+  int c, maxlen, i, trunc_flag, preprocessor_flag;
 
   maxlen = (gfc_current_form == FORM_FREE) 
     ? 132 
@@ -687,6 +687,13 @@ load_line (FILE * input, char *buffer, char *filename, int linenum)
 
   i = 0;
 
+  preprocessor_flag = 0;
+  c = fgetc (input);
+  if (c == '#')
+    /* Don't truncate preprocessor lines.  */
+    preprocessor_flag = 1;
+  ungetc (c, input);
+
   for (;;)
     {
       c = fgetc (input);
@@ -722,7 +729,7 @@ load_line (FILE * input, char *buffer, char *filename, int linenum)
       *buffer++ = c;
       i++;
 
-      if (i >= maxlen)
+      if (i >= maxlen && !preprocessor_flag)
        {                       /* Truncate the rest of the line.  */
          trunc_flag = 1;
 
@@ -736,8 +743,8 @@ load_line (FILE * input, char *buffer, char *filename, int linenum)
                  && trunc_flag
                  && !gfc_is_whitespace (c))
                {
-                 gfc_warning_now ("Line %d of %s is being truncated",
-                                  linenum, filename);
+                 gfc_warning_now ("%s:%d: Line is being truncated",
+                                  filename, linenum);
                  trunc_flag = 0;
                }
            }
@@ -789,19 +796,21 @@ preprocessor_line (char *c)
     c++;
 
   if (*c < '0' || *c > '9')
-    {
-      gfc_warning_now ("%s:%d Unknown preprocessor directive", 
-                      current_file->filename, current_file->line);
-      current_file->line++;
-      return;
-    }
+    goto bad_cpp_line;
 
   line = atoi (c);
 
-  c = strchr (c, ' ') + 2; /* Skip space and quote.  */
+  c = strchr (c, ' '); 
+  if (c == NULL)
+    /* Something we don't understand has happened.  */
+    goto bad_cpp_line;
+  c += 2;     /* Skip space and quote.  */
   filename = c;
 
   c = strchr (c, '"'); /* Make filename end at quote.  */
+  if (c == NULL)
+    /* Preprocessor line has no closing quote.  */
+    goto bad_cpp_line;
   *c++ = '\0';
 
   /* Get flags.  */
@@ -846,6 +855,13 @@ preprocessor_line (char *c)
       current_file->filename = gfc_getmem (strlen (filename) + 1);
       strcpy (current_file->filename, filename);
     }
+
+  return;
+
+ bad_cpp_line:
+  gfc_warning_now ("%s:%d: Unknown preprocessor directive", 
+                  current_file->filename, current_file->line);
+  current_file->line++;
 }