aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/intrinsic.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2019-08-10 18:26:13 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2019-08-10 18:26:13 +0000
commit878f88b7d14a33b031aaf0ae797bb39d21f74676 (patch)
treea46d0e4c5948327c1c6686fd1403fc7756bd9259 /gcc/fortran/intrinsic.c
parent884efbd523b7191edd7763ae8bba8afc96e3c238 (diff)
downloadgcc-878f88b7d14a33b031aaf0ae797bb39d21f74676.zip
gcc-878f88b7d14a33b031aaf0ae797bb39d21f74676.tar.gz
gcc-878f88b7d14a33b031aaf0ae797bb39d21f74676.tar.bz2
decl.c (match_old_style_init): Use a clearer error message.
2019-08-10 Steven G. Kargl <kargl@gcc.gnu.org> * decl.c (match_old_style_init): Use a clearer error message. * expr.c (gfc_check_assign): Update BOZ checking to provide a stricter adherence to the Fortran standard. Use gfc_invalid_boz () to relax errors into warnings. * gfortran.h (gfc_isym_id): Add new ids GFC_ISYM_DFLOAT, GFC_ISYM_FLOAT, GFC_ISYM_REALPART, and GFC_ISYM_SNGL * intrinsic.c (add_functions): Use new ids to split REAL generic into REAL, FLOAT, DFLOAT, SNGL, and REALPART generics. (gfc_intrinsic_func_interface): Allow new intrinsics in an initialization expression * resolve.c (resolve_operator): Deal with BOZ as operands. Use gfc_invalid_boz to allow for errors or warnings via the -fallow-invalid-boz option. A BOZ cannot be an operand to an unary operator. Both operands of a binary operator cannot be BOZ. For binary operators, convert a BOZ operand into the type and kind of the other operand for REAL or INTEGER operand. * trans-intrinsic.c: Use new ids to cause conversions to happen. 2019-08-10 Steven G. Kargl <kargl@gcc.gnu.org> * gfortran.dg/boz_8.f90: Adjust error messages. * gfortran.dg/nan_4.f90: Ditto. * gfortran.dg/boz_1.f90: Add -fallow-invalid-boz to dg-options, and test for warnings. * gfortran.dg/boz_3.f90: Ditto. * gfortran.dg/boz_4.f90: Ditto. * gfortran.dg/dec_structure_6.f90: Ditto. * gfortran.dg/ibits.f90: Ditto. From-SVN: r274257
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r--gcc/fortran/intrinsic.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index d0f7c10..c35ea73 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -2786,12 +2786,16 @@ add_functions (void)
gfc_check_real, gfc_simplify_real, gfc_resolve_real,
a, BT_UNKNOWN, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
+ make_generic ("real", GFC_ISYM_REAL, GFC_STD_F77);
+
/* This provides compatibility with g77. */
- add_sym_1 ("realpart", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
+ add_sym_1 ("realpart", GFC_ISYM_REALPART, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
gfc_check_fn_c, gfc_simplify_realpart, gfc_resolve_realpart,
a, BT_UNKNOWN, dr, REQUIRED);
- add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
+ make_generic ("realpart", GFC_ISYM_REALPART, GFC_STD_F77);
+
+ add_sym_1 ("float", GFC_ISYM_FLOAT, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
gfc_check_float, gfc_simplify_float, NULL,
a, BT_INTEGER, di, REQUIRED);
@@ -2802,15 +2806,19 @@ add_functions (void)
make_alias ("floatk", GFC_STD_GNU);
}
- add_sym_1 ("dfloat", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
+ make_generic ("float", GFC_ISYM_FLOAT, GFC_STD_F77);
+
+ add_sym_1 ("dfloat", GFC_ISYM_DFLOAT, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
gfc_check_float, gfc_simplify_dble, gfc_resolve_dble,
a, BT_REAL, dr, REQUIRED);
- add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
+ make_generic ("dfloat", GFC_ISYM_DFLOAT, GFC_STD_F77);
+
+ add_sym_1 ("sngl", GFC_ISYM_SNGL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
gfc_check_sngl, gfc_simplify_sngl, NULL,
a, BT_REAL, dd, REQUIRED);
- make_generic ("real", GFC_ISYM_REAL, GFC_STD_F77);
+ make_generic ("sngl", GFC_ISYM_SNGL, GFC_STD_F77);
add_sym_2 ("rename", GFC_ISYM_RENAME, CLASS_IMPURE, ACTUAL_NO, BT_INTEGER, di,
GFC_STD_GNU, gfc_check_rename, NULL, gfc_resolve_rename,
@@ -4833,7 +4841,8 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag)
}
if ((isym->id == GFC_ISYM_REAL || isym->id == GFC_ISYM_DBLE
- || isym->id == GFC_ISYM_CMPLX)
+ || isym->id == GFC_ISYM_CMPLX || isym->id == GFC_ISYM_FLOAT
+ || isym->id == GFC_ISYM_SNGL || isym->id == GFC_ISYM_DFLOAT)
&& gfc_init_expr_flag
&& !gfc_notify_std (GFC_STD_F2003, "Function %qs as initialization "
"expression at %L", name, &expr->where))