diff options
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r-- | gcc/fortran/check.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 7ce9da6..a63112b 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -88,6 +88,21 @@ int_or_real_check (gfc_expr * e, int n) } +/* Check that an expression is real or complex. */ + +static try +real_or_complex_check (gfc_expr * e, int n) +{ + if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX) + { + must_be (e, n, "REAL or COMPLEX"); + return FAILURE; + } + + return SUCCESS; +} + + /* Check that the expression is an optional constant integer and that it specifies a valid kind for that type. */ @@ -718,6 +733,42 @@ gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary, } +/* A single complex argument. */ + +try +gfc_check_fn_c (gfc_expr * a) +{ + if (type_check (a, 0, BT_COMPLEX) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* A single real argument. */ + +try +gfc_check_fn_r (gfc_expr * a) +{ + if (type_check (a, 0, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* A single real or complex argument. */ + +try +gfc_check_fn_rc (gfc_expr * a) +{ + if (real_or_complex_check (a, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_fnum (gfc_expr * unit) { |