Hi Thomas,
one small nit:
diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc
index dd79a49a0c9..afab66a901f 100644
--- a/gcc/fortran/check.cc
+++ b/gcc/fortran/check.cc
@@ -637,6 +637,38 @@ int_or_real_or_char_check_f2003 (gfc_expr *e, int n)
return true;
}
+/* Check that an expression is integer or real or unsigned; allow character for
+ F2003 or later. */
+
+static bool
+int_or_real_or_char_or_unsigned_check_f2003 (gfc_expr *e, int n)
+{
+ if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL
+ && e->ts.type != BT_UNSIGNED)
+ {
+ if (e->ts.type == BT_CHARACTER)
+ return gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Character for "
+ "%qs argument of %qs intrinsic at %L",
+ gfc_current_intrinsic_arg[n]->name,
+ gfc_current_intrinsic, &e->where);
+ else
+ {
+ if (gfc_option.allow_std & GFC_STD_F2003)
+ gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
+ "or REAL or CHARACTER",
I had expected UNSIGNED in this enumeration, too.
+ gfc_current_intrinsic_arg[n]->name,
+ gfc_current_intrinsic, &e->where);
+ else
+ gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
+ "or REAL", gfc_current_intrinsic_arg[n]->name,
Same.
+ gfc_current_intrinsic, &e->where);
+ }
+ return false;
+ }
+
+ return true;
+}
+
/* Check that an expression is an intrinsic type. */
static bool
intrinsic_type_check (gfc_expr *e, int n)
Ok for mainline with me.
Thanks for the patch,
Andre
On Sun, 29 Sep 2024 16:22:57 +0200
Thomas Koenig <[email protected]> wrote:
> Hello world,
>
> here's the implementation for MAXVAL and MINVAL for UNSIGNED.
>
> I found https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116886
> while working on the test case (something to be fixed later).
>
> (@Mikael: This actually touches trans-intrinsic.cc, but I don't
> think there will be collisions with what you're working on, it
> is only the part where the minimum/maximum is set).
>
> Regression-tested. OK for trunk?
>
> Best regards
>
> Thomas
>
> gcc/fortran/ChangeLog:
>
> * check.cc (int_or_real_or_char_or_unsigned_check_f2003): New
> function. (gfc_check_minval_maxval): Use it.
> * trans-intrinsic.cc (gfc_conv_intrinsic_minmaxval): Handle
> initial values for UNSIGNED.
> * gfortran.texi: Document MINVAL and MAXVAL for unsigned.
>
> libgfortran/ChangeLog:
>
> * Makefile.am: Add minval and maxval files.
> * Makefile.in: Regenerated.
> * gfortran.map: Add new functions.
> * generated/maxval_m1.c: New file.
> * generated/maxval_m16.c: New file.
> * generated/maxval_m2.c: New file.
> * generated/maxval_m4.c: New file.
> * generated/maxval_m8.c: New file.
> * generated/minval_m1.c: New file.
> * generated/minval_m16.c: New file.
> * generated/minval_m2.c: New file.
> * generated/minval_m4.c: New file.
> * generated/minval_m8.c: New file.
>
> gcc/testsuite/ChangeLog:
>
> * gfortran.dg/unsigned_34.f90: New test.
--
Andre Vehreschild * Email: vehre ad gmx dot de