[patch, Fortran] Implement maxval/minval for UNSIGNED

Andre Vehreschild vehre@gmx.de
Tue Oct 1 09:46:17 GMT 2024


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 <tkoenig@netcologne.de> 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


More information about the Fortran mailing list