aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-01-16 08:50:57 +0100
committerTobias Burnus <tobias@codesourcery.com>2020-01-16 08:50:57 +0100
commitc35a3046247c495509610b50c7a85683d540811a (patch)
tree330563b37abe5109f2834b61a9593807f05c231e
parent03647d2e26176bb874460b67deab0c30aa715d59 (diff)
downloadgcc-c35a3046247c495509610b50c7a85683d540811a.zip
gcc-c35a3046247c495509610b50c7a85683d540811a.tar.gz
gcc-c35a3046247c495509610b50c7a85683d540811a.tar.bz2
PR93253 – Document BOZ changes, make it friendlier in legacy code
PR fortran/93253 * check.c (gfc_invalid_boz): Mention -fallow-invalid-boz in the error message. * gfortran.texi (BOZ literal constants): List another missing extension and refer to -fallow-invalid-boz. * lang.opt (fallow-invalid-boz): Also mention 'X' in the help text as it is not covered by the previous wording. * primary.c (match_boz_constant): Tweak wording such that it is clear how to fix the nonstandard use. PR fortran/93253 * fortran.dg/boz_7.f90: Updated dg-error.
-rw-r--r--gcc/fortran/ChangeLog12
-rw-r--r--gcc/fortran/check.c7
-rw-r--r--gcc/fortran/gfortran.texi7
-rw-r--r--gcc/fortran/lang.opt2
-rw-r--r--gcc/fortran/primary.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/boz_7.f902
7 files changed, 31 insertions, 6 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c3ca3de..889f01b 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,15 @@
+2020-01-16 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/93253
+ * check.c (gfc_invalid_boz): Mention -fallow-invalid-boz
+ in the error message.
+ * gfortran.texi (BOZ literal constants): List another missing
+ extension and refer to -fallow-invalid-boz.
+ * lang.opt (fallow-invalid-boz): Also mention 'X' in the help text
+ as it is not covered by the previous wording.
+ * primary.c (match_boz_constant): Tweak wording such that it is
+ clear how to fix the nonstandard use.
+
2020-01-09 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/65428
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index c7f0187..519aa8b 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -67,7 +67,12 @@ gfc_invalid_boz (const char *msg, locus *loc)
return false;
}
- gfc_error (msg, loc);
+ const char hint[] = " [see %<-fno-allow-invalid-boz%>]";
+ size_t len = strlen (msg) + strlen (hint) + 1;
+ char *msg2 = (char *) alloca (len);
+ strcpy (msg2, msg);
+ strcat (msg2, hint);
+ gfc_error (msg2, loc);
return true;
}
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 4cf8b3a..a50634a 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -1863,9 +1863,12 @@ Fortran standard states that the treatment of the sign bit is processor
dependent. Gfortran interprets the sign bit as a user would expect.
As a deprecated extension, GNU Fortran allows hexadecimal BOZ literal
-constants to be specified using the @code{X} prefix. The BOZ literal
+constants to be specified using the @code{X} prefix. That the BOZ literal
constant can also be specified by adding a suffix to the string, for
-example, @code{Z'ABC'} and @code{'ABC'X} are equivalent.
+example, @code{Z'ABC'} and @code{'ABC'X} are equivalent. Additionally,
+as extension, BOZ literals are permitted in some contexts outside of
+@code{DATA} and the intrinsic functions listed in the Fortran standard.
+Use @option{-fallow-invalid-boz} to enable the extension.
@node Real array indices
@subsection Real array indices
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 3858331..59523f7 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -387,7 +387,7 @@ All intrinsics procedures are available regardless of selected standard.
fallow-invalid-boz
Fortran RejectNegative Var(flag_allow_invalid_boz)
-Allow a BOZ literal constant to appear in an invalid context.
+Allow a BOZ literal constant to appear in an invalid context and with X instead of Z.
fallow-leading-underscore
Fortran Undocumented Var(flag_allow_leading_underscore)
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index e2b6fcb..07b8ac0 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -433,7 +433,7 @@ match_boz_constant (gfc_expr **result)
if (x_hex
&& gfc_invalid_boz ("Hexadecimal constant at %L uses "
- "nonstandard syntax", &gfc_current_locus))
+ "nonstandard X instead of Z", &gfc_current_locus))
return MATCH_ERROR;
old_loc = gfc_current_locus;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 143fda9..d6ba8d6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-16 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/93253
+ * fortran.dg/boz_7.f90: Updated dg-error.
+
2020-01-15 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/91073
diff --git a/gcc/testsuite/gfortran.dg/boz_7.f90 b/gcc/testsuite/gfortran.dg/boz_7.f90
index 45fa7a7..d2a51ac 100644
--- a/gcc/testsuite/gfortran.dg/boz_7.f90
+++ b/gcc/testsuite/gfortran.dg/boz_7.f90
@@ -7,6 +7,6 @@
!
integer :: k, m
integer :: j = z'000abc' ! { dg-error "BOZ used outside a DATA statement" }
-data k/x'0003'/ ! { dg-error "nonstandard syntax" }
+data k/x'0003'/ ! { dg-error "nonstandard X instead of Z" }
data m/'0003'z/ ! { dg-error "nonstandard postfix" }
end