aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/primary.c
diff options
context:
space:
mode:
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>2004-07-11 17:06:42 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2004-07-11 17:06:42 +0200
commit88199e7c89aa0f9b1c055c2330a0c57945e884e2 (patch)
tree8486dc903d8c31078bde04fd506d2b5fa0f2d848 /gcc/fortran/primary.c
parent6fd21094e5a9d8517b00bffa08f132759baefbbc (diff)
downloadgcc-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.c20
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;