[PATCH] Fortran: several small fixes in gfc_simplify_eoshift [PR124631]

Harald Anlauf <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Dear all,

the attached patch fixes a missing initialization found by an UBSAN
instrumented compiler.  It also plugs several frontend memleaks
I found running f951 under valgrind on the testcase in the PR.

Regtested on x86_64-pc-linux-gnu.  No new testcase needed.
OK for mainline?

Thanks,
Harald
pr124631.diff (text/x-patch, 1.6 KB)
From 03210ffb6aaa0e2169cfeaa244fa1a28b1360f60 Mon Sep 17 00:00:00 2001
From: Harald Anlauf <[email protected]>
Date: Thu, 26 Mar 2026 21:35:11 +0100
Subject: [PATCH] Fortran: several small fixes in gfc_simplify_eoshift
 [PR124631]

	PR fortran/124631

gcc/fortran/ChangeLog:

	* simplify.cc (gfc_simplify_eoshift): Initialize sstride[0] to
	prevent pointer arithmetic with undefined offset.  Fix several
	frontend memleaks.
---
 gcc/fortran/simplify.cc | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index c6291d7ea1d..3340a20e227 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -3004,6 +3004,7 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
   /* Shut up compiler */
   len = 1;
   rsoffset = 1;
+  sstride[0] = 0;
 
   n = 0;
   for (d=0; d < array->rank; d++)
@@ -3073,7 +3074,7 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
 	{
 	  while (n--)
 	    {
-	      *dest = gfc_copy_expr (bnd_ctor->expr);
+	      *dest = bnd_ctor->expr;
 	      dest += rsoffset;
 	    }
 	}
@@ -3081,7 +3082,7 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
 	{
 	  while (n--)
 	    {
-	      *dest = gfc_copy_expr (bnd);
+	      *dest = bnd;
 	      dest += rsoffset;
 	    }
 	}
@@ -3122,6 +3123,9 @@ gfc_simplify_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
 				   NULL);
     }
 
+  free (arrayvec);
+  free (resultvec);
+
  final:
   if (temp_boundary)
     gfc_free_expr (bnd);
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.