aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2016-11-17 00:18:18 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-11-17 00:18:18 +0000
commit99c72130970cb106f4791b2dff7cda1ac3cfea31 (patch)
tree9649680187c334e798f76d404930176731428bf3 /gcc
parent243255c0983c8c1e9ea79a0296fd41a13c052b27 (diff)
downloadgcc-99c72130970cb106f4791b2dff7cda1ac3cfea31.zip
gcc-99c72130970cb106f4791b2dff7cda1ac3cfea31.tar.gz
gcc-99c72130970cb106f4791b2dff7cda1ac3cfea31.tar.bz2
re PR fortran/58001 (Make it possible to silence "Extension: Tab character in format" warning)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/io.c39
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_tab_1.f909
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_tab_2.f906
5 files changed, 36 insertions, 30 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 4dad588..428ebda 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 04cc1a2..d35437a 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 20fcf38..9b616e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/fmt_tab_1.f90 b/gcc/testsuite/gfortran.dg/fmt_tab_1.f90
index f58e388..a763714 100644
--- a/gcc/testsuite/gfortran.dg/fmt_tab_1.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_tab_1.f90
@@ -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" }
diff --git a/gcc/testsuite/gfortran.dg/fmt_tab_2.f90 b/gcc/testsuite/gfortran.dg/fmt_tab_2.f90
index 560d886..bfff7ce 100644
--- a/gcc/testsuite/gfortran.dg/fmt_tab_2.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_tab_2.f90
@@ -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" }