aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog11
-rw-r--r--gcc/fortran/gfortran.h2
-rw-r--r--gcc/fortran/parse.c8
-rw-r--r--gcc/fortran/scanner.c32
4 files changed, 32 insertions, 21 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e1b1097..b3f0b1c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,14 @@
+2005-04-15 Richard Guenther <rguenth@gcc.gnu.org>
+
+ PR fortran/14569
+ * gfortran.h (gfc_linebuf): Add truncated field.
+ * parse.c (next_statement): Handle warning for truncated
+ lines.
+ * scanner.c (load_line): Return if line was truncated.
+ No longer warn for truncated lines. Remove unused parameters.
+ (load_file): Store load_line return value to linebuf.
+ (gfc_error_recovery): Do not advance line at the end.
+
2005-04-14 Steven G. Kargl <kargls@comcast.net>
* gfortran.h (gfc_real_info): Add subnormal struct member.
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 330ceda..c266d58 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -481,6 +481,8 @@ typedef struct gfc_linebuf
struct gfc_file *file;
struct gfc_linebuf *next;
+ int truncated;
+
char line[1];
} gfc_linebuf;
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index a3f0ac1..94bf6d0 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -479,7 +479,13 @@ next_statement (void)
gfc_buffer_error (1);
if (gfc_at_eol ())
- gfc_advance_line ();
+ {
+ if (gfc_option.warn_line_truncation
+ && gfc_current_locus.lb->truncated)
+ gfc_warning_now ("Line truncated at %C");
+
+ gfc_advance_line ();
+ }
gfc_skip_comments ();
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index cab85f4..5748ef3 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -631,21 +631,17 @@ gfc_error_recovery (void)
if (c == delim)
break;
if (c == '\n')
- goto done;
+ return;
if (c == '\\')
{
c = next_char ();
if (c == '\n')
- goto done;
+ return;
}
}
if (gfc_at_eof ())
break;
}
-
-done:
- if (c == '\n')
- gfc_advance_line ();
}
@@ -677,12 +673,14 @@ gfc_gobble_whitespace (void)
need be.
In fixed mode, we expand a tab that occurs within the statement
label region to expand to spaces that leave the next character in
- the source region. */
+ the source region.
+ load_line returns wether the line was truncated. */
-static void
-load_line (FILE * input, char **pbuf, char *filename, int linenum)
+static int
+load_line (FILE * input, char **pbuf)
{
- int c, maxlen, i, trunc_flag, preprocessor_flag;
+ int c, maxlen, i, preprocessor_flag;
+ int trunc_flag = 0;
static int buflen = 0;
char *buffer;
@@ -767,15 +765,6 @@ load_line (FILE * input, char **pbuf, char *filename, int linenum)
c = fgetc (input);
if (c == '\n' || c == EOF)
break;
-
- if (gfc_option.warn_line_truncation
- && trunc_flag
- && !gfc_is_whitespace (c))
- {
- gfc_warning_now ("%s:%d: Line is being truncated",
- filename, linenum);
- trunc_flag = 0;
- }
}
ungetc ('\n', input);
@@ -791,6 +780,8 @@ load_line (FILE * input, char **pbuf, char *filename, int linenum)
*buffer++ = ' ';
*buffer = '\0';
+
+ return trunc_flag;
}
@@ -1034,7 +1025,7 @@ load_file (char *filename, bool initial)
for (;;)
{
- load_line (input, &line, filename, current_file->line);
+ int trunc = load_line (input, &line);
len = strlen (line);
if (feof (input) && len == 0)
@@ -1066,6 +1057,7 @@ load_file (char *filename, bool initial)
b->linenum = current_file->line++;
#endif
b->file = current_file;
+ b->truncated = trunc;
strcpy (b->line, line);
if (line_head == NULL)