diff options
author | Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de> | 2004-07-11 17:06:42 +0200 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2004-07-11 17:06:42 +0200 |
commit | 88199e7c89aa0f9b1c055c2330a0c57945e884e2 (patch) | |
tree | 8486dc903d8c31078bde04fd506d2b5fa0f2d848 /gcc/fortran/primary.c | |
parent | 6fd21094e5a9d8517b00bffa08f132759baefbbc (diff) | |
download | gcc-88199e7c89aa0f9b1c055c2330a0c57945e884e2.zip gcc-88199e7c89aa0f9b1c055c2330a0c57945e884e2.tar.gz gcc-88199e7c89aa0f9b1c055c2330a0c57945e884e2.tar.bz2 |
re PR fortran/16433 (wrong hexadecimal constant warning)
PR fortran/16433
* primary.c (match_boz_constant): Call gfc_notify_std only if
we actually have a non-standard boz-literal-constant.
From-SVN: r84514
Diffstat (limited to 'gcc/fortran/primary.c')
-rw-r--r-- | gcc/fortran/primary.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 3593155..d054bfd 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -235,7 +235,7 @@ match_integer_constant (gfc_expr ** result, int signflag) static match match_boz_constant (gfc_expr ** result) { - int radix, delim, length; + int radix, delim, length, x_hex; locus old_loc; char *buffer; gfc_expr *e; @@ -244,6 +244,7 @@ match_boz_constant (gfc_expr ** result) old_loc = gfc_current_locus; gfc_gobble_whitespace (); + x_hex = 0; switch (gfc_next_char ()) { case 'b': @@ -255,12 +256,7 @@ match_boz_constant (gfc_expr ** result) rname = "octal"; break; case 'x': - if (pedantic - && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal " - "constant at %C uses non-standard syntax.") - == FAILURE)) - goto backup; - + x_hex = 1; /* Fall through. */ case 'z': radix = 16; @@ -310,6 +306,16 @@ match_boz_constant (gfc_expr ** result) return MATCH_ERROR; } + if (x_hex + && pedantic + && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal " + "constant at %C uses non-standard syntax.") + == FAILURE)) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + *result = e; return MATCH_YES; |