diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-01-16 08:50:57 +0100 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-01-16 08:50:57 +0100 |
commit | c35a3046247c495509610b50c7a85683d540811a (patch) | |
tree | 330563b37abe5109f2834b61a9593807f05c231e | |
parent | 03647d2e26176bb874460b67deab0c30aa715d59 (diff) | |
download | gcc-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/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/fortran/check.c | 7 | ||||
-rw-r--r-- | gcc/fortran/gfortran.texi | 7 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 2 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/boz_7.f90 | 2 |
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 |