aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/expr.c
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2019-01-26 20:45:55 +0000
committerHarald Anlauf <anlauf@gcc.gnu.org>2019-01-26 20:45:55 +0000
commit3a55c8e248e82f0d64ed8acb85183fefe53cfc0a (patch)
tree145fc1e32ff23706a5373d253e338f8d4da0aaf4 /gcc/fortran/expr.c
parentfac29445acaf19d58717927e6ee7e6624d2b3cce (diff)
downloadgcc-3a55c8e248e82f0d64ed8acb85183fefe53cfc0a.zip
gcc-3a55c8e248e82f0d64ed8acb85183fefe53cfc0a.tar.gz
gcc-3a55c8e248e82f0d64ed8acb85183fefe53cfc0a.tar.bz2
re PR fortran/57553 ([F08] Valid use of STORAGE_SIZE rejected, bad error message for invalid use)
2019-01-26 Harald Anlauf <anlauf@gmx.de> PR fortran/57553 * expr.c (check_inquiry): Add list of inquiry functions allowed in constant expressions for F2008+. 2019-01-26 Harald Anlauf <anlauf@gmx.de> PR fortran/57553 * gfortran.dg/pr57553.f90: New test. From-SVN: r268303
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r--gcc/fortran/expr.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 965214b..a9e7f36 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -2515,7 +2515,8 @@ check_init_expr_arguments (gfc_expr *e)
static bool check_restricted (gfc_expr *);
/* F95, 7.1.6.1, Initialization expressions, (7)
- F2003, 7.1.7 Initialization expression, (8) */
+ F2003, 7.1.7 Initialization expression, (8)
+ F2008, 7.1.12 Constant expression, (4) */
static match
check_inquiry (gfc_expr *e, int not_restricted)
@@ -2539,6 +2540,15 @@ check_inquiry (gfc_expr *e, int not_restricted)
"new_line", NULL
};
+ /* std=f2008+ or -std=gnu */
+ static const char *const inquiry_func_gnu[] = {
+ "lbound", "shape", "size", "ubound",
+ "bit_size", "len", "kind",
+ "digits", "epsilon", "huge", "maxexponent", "minexponent",
+ "precision", "radix", "range", "tiny",
+ "new_line", "storage_size", NULL
+ };
+
int i = 0;
gfc_actual_arglist *ap;
@@ -2565,8 +2575,11 @@ check_inquiry (gfc_expr *e, int not_restricted)
{
name = e->symtree->n.sym->name;
- functions = (gfc_option.warn_std & GFC_STD_F2003)
- ? inquiry_func_f2003 : inquiry_func_f95;
+ functions = inquiry_func_gnu;
+ if (gfc_option.warn_std & GFC_STD_F2003)
+ functions = inquiry_func_f2003;
+ if (gfc_option.warn_std & GFC_STD_F95)
+ functions = inquiry_func_f95;
for (i = 0; functions[i]; i++)
if (strcmp (functions[i], name) == 0)