public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352]
@ 2023-05-17 18:52 Harald Anlauf
  2023-05-17 19:39 ` Mikael Morin
  2023-05-18  1:29 ` Jerry D
  0 siblings, 2 replies; 3+ messages in thread
From: Harald Anlauf @ 2023-05-17 18:52 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 475 bytes --]

Dear all,

the attached patch is neat, because it fixes a bug by removing code ;-)

When generating the initializer for a parameter array, we excepted
the case of size 0, which however prevented the detection of array
bounds violations and lead to ICEs in various places.  The solution
which removes the comparison for size > 0 also has the bonus that
it fixes a minor memory leak for the size==0 case...

Regtested on x86_64-pc-linux-gnu.  OK for mainline?

Thanks,
Harald


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: pr95374.diff --]
[-- Type: text/x-patch, Size: 2984 bytes --]

From 9d2995d2c1cf5708e3297fc7cffb5184d45a65cb Mon Sep 17 00:00:00 2001
From: Harald Anlauf <anlauf@gmx.de>
Date: Wed, 17 May 2023 20:39:18 +0200
Subject: [PATCH] Fortran: set shape of initializers of zero-sized arrays
 [PR95374,PR104352]

gcc/fortran/ChangeLog:

	PR fortran/95374
	PR fortran/104352
	* decl.cc (add_init_expr_to_sym): Set shape of initializer also for
	zero-sized arrays, so that bounds violations can be detected later.

gcc/testsuite/ChangeLog:

	PR fortran/95374
	PR fortran/104352
	* gfortran.dg/zero_sized_13.f90: New test.
---
 gcc/fortran/decl.cc                         |  3 +--
 gcc/testsuite/gfortran.dg/zero_sized_13.f90 | 28 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/zero_sized_13.f90

diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
index 9c4b40d4ac4..4c578d01ad4 100644
--- a/gcc/fortran/decl.cc
+++ b/gcc/fortran/decl.cc
@@ -2239,8 +2239,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
 	      && gfc_is_constant_expr (init)
 	      && (init->expr_type == EXPR_CONSTANT
 		  || init->expr_type == EXPR_STRUCTURE)
-	      && spec_size (sym->as, &size)
-	      && mpz_cmp_si (size, 0) > 0)
+	      && spec_size (sym->as, &size))
 	    {
 	      array = gfc_get_array_expr (init->ts.type, init->ts.kind,
 					  &init->where);
diff --git a/gcc/testsuite/gfortran.dg/zero_sized_13.f90 b/gcc/testsuite/gfortran.dg/zero_sized_13.f90
new file mode 100644
index 00000000000..4035d458b32
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/zero_sized_13.f90
@@ -0,0 +1,28 @@
+! { dg-do compile }
+! { dg-options "-w" }
+!
+! PR fortran/95374
+! PR fortran/104352 - Various ICEs for bounds violation with zero-sized arrays
+!
+! Contributed by G. Steinmetz
+
+program p
+  implicit none
+  integer :: i
+  integer, parameter :: a(0)    = 0
+  integer, parameter :: b(0:-5) = 0
+  integer, parameter :: c(*) = [(a(i:i), i=0,0)] ! { dg-error "out of bounds" }
+  integer, parameter :: d(*) = [(b(i:i), i=1,1)] ! { dg-error "out of bounds" }
+  integer, parameter :: e(1) = [(a(i)  , i=1,1)] ! { dg-error "out of bounds" }
+  integer, parameter :: f(1) = [(a(i:i), i=1,1)] ! { dg-error "out of bounds" }
+  integer            :: g(1) = [(a(i:i), i=0,0)] ! { dg-error "out of bounds" }
+  integer            :: h(1) = [(a(i:i), i=1,1)] ! { dg-error "out of bounds" }
+  print *, [(a(i:i), i=0,0)] ! { dg-error "out of bounds" }
+  print *, [(a(i:i), i=1,1)] ! { dg-error "out of bounds" }
+  print *, any (a(1:1) == 1) ! { dg-error "out of bounds" }
+  print *, all (a(0:0) == 1) ! { dg-error "out of bounds" }
+  print *, sum (a(1:1))      ! { dg-error "out of bounds" }
+  print *, iall (a(0:0))     ! { dg-error "out of bounds" }
+  print *, minloc (a(0:0),1) ! { dg-error "out of bounds" }
+  print *, dot_product(a(1:1),a(1:1)) ! { dg-error "out of bounds" }
+end
--
2.35.3


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352]
  2023-05-17 18:52 [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] Harald Anlauf
@ 2023-05-17 19:39 ` Mikael Morin
  2023-05-18  1:29 ` Jerry D
  1 sibling, 0 replies; 3+ messages in thread
From: Mikael Morin @ 2023-05-17 19:39 UTC (permalink / raw)
  To: Harald Anlauf, fortran, gcc-patches

Le 17/05/2023 à 20:52, Harald Anlauf via Fortran a écrit :
> Dear all,
> 
> the attached patch is neat, because it fixes a bug by removing code ;-)
> 
> When generating the initializer for a parameter array, we excepted
> the case of size 0, which however prevented the detection of array
> bounds violations and lead to ICEs in various places.  The solution
> which removes the comparison for size > 0 also has the bonus that
> it fixes a minor memory leak for the size==0 case...
> 
> Regtested on x86_64-pc-linux-gnu.  OK for mainline?
> 
Sure.

Thanks

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352]
  2023-05-17 18:52 [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] Harald Anlauf
  2023-05-17 19:39 ` Mikael Morin
@ 2023-05-18  1:29 ` Jerry D
  1 sibling, 0 replies; 3+ messages in thread
From: Jerry D @ 2023-05-18  1:29 UTC (permalink / raw)
  To: Harald Anlauf, fortran, gcc-patches

On 5/17/23 11:52 AM, Harald Anlauf via Fortran wrote:
> Dear all,
> 
> the attached patch is neat, because it fixes a bug by removing code ;-)
> 
> When generating the initializer for a parameter array, we excepted
> the case of size 0, which however prevented the detection of array
> bounds violations and lead to ICEs in various places.  The solution
> which removes the comparison for size > 0 also has the bonus that
> it fixes a minor memory leak for the size==0 case...
> 
> Regtested on x86_64-pc-linux-gnu.  OK for mainline?
> 
> Thanks,
> Harald
> 
Looks Good To Me.

OK,

Jerry

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-05-18  1:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-17 18:52 [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] Harald Anlauf
2023-05-17 19:39 ` Mikael Morin
2023-05-18  1:29 ` Jerry D

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).