public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] fortran: Fix specification expression check in submodules [PR114475]
@ 2024-03-27 15:30 Mikael Morin
  2024-03-27 16:43 ` Steve Kargl
  0 siblings, 1 reply; 2+ messages in thread
From: Mikael Morin @ 2024-03-27 15:30 UTC (permalink / raw)
  To: fortran, gcc-patches

Hell(o),

it didn't take long for my recent patch for PR111781 to show a regression.
The fix proposed here is actually the one Harald posted in the PR.
I can't imagine a case where it wouldn't do the right thing.
Regression tested on x86_64-pc-linux-gnu.
OK for master?

-- >8 --

The patch fixing PR111781 made the check of specification expressions more
restrictive, disallowing local variables in specification expressions of
dummy arguments.  PR114475 showed an example where that change regressed,
disallowing in submodules expressions that had been allowed in the parent
module.  In submodules indeed, the hierarchy of namespaces inherited from
the parent module is not reproduced so the host-association of symbols
can't be recognized by checking the nesting of namespaces.

This change fixes the problem by allowing in specification expressions
all the symbols in a submodule that are inherited from the parent module.

	PR fortran/111781
	PR fortran/114475

gcc/fortran/ChangeLog:

	* expr.cc (check_restricted): In submodules, allow variables host-
	associated from the parent module.

gcc/testsuite/ChangeLog:

	* gfortran.dg/spec_expr_10.f90: New test.

Co-authored-by: Harald Anlauf <anlauf@gmx.de>
---
 gcc/fortran/expr.cc                        |  1 +
 gcc/testsuite/gfortran.dg/spec_expr_10.f90 | 46 ++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_10.f90

diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc
index 9a042cd7040..09d1ebd95d2 100644
--- a/gcc/fortran/expr.cc
+++ b/gcc/fortran/expr.cc
@@ -3517,6 +3517,7 @@ check_restricted (gfc_expr *e)
       if (e->error
 	    || sym->attr.in_common
 	    || sym->attr.use_assoc
+	    || sym->attr.used_in_submodule
 	    || sym->attr.dummy
 	    || sym->attr.implied_index
 	    || sym->attr.flavor == FL_PARAMETER
diff --git a/gcc/testsuite/gfortran.dg/spec_expr_10.f90 b/gcc/testsuite/gfortran.dg/spec_expr_10.f90
new file mode 100644
index 00000000000..287b5a8d6cc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/spec_expr_10.f90
@@ -0,0 +1,46 @@
+! { dg-do compile }
+!
+! PR fortran/114475
+! The array specification of PP in OL_EVAL used to be rejected in the submodule
+! because the compiler was not able to see the host-association of N_EXTERNAL
+! there.
+!
+! Contributed by Jürgen Reuter <juergen.reuter@desy.de>.
+
+module t1
+  use, intrinsic :: iso_c_binding
+  implicit none
+  private
+  public :: t1_t
+  integer :: N_EXTERNAL = 0
+
+  type :: t1_t
+  contains
+    procedure :: set_n_external => t1_set_n_external
+  end type t1_t
+
+  abstract interface
+     subroutine ol_eval (id, pp, emitter) bind(C)
+       import
+       real(kind = c_double), intent(in) :: pp(5 * N_EXTERNAL)
+     end subroutine ol_eval
+  end interface
+  interface
+    module subroutine t1_set_n_external (object, n)
+      class(t1_t), intent(inout) :: object
+      integer, intent(in) :: n
+    end subroutine t1_set_n_external
+  end interface
+
+end module t1
+
+submodule (t1) t1_s
+  implicit none
+contains
+  module subroutine t1_set_n_external (object, n)
+    class(t1_t), intent(inout) :: object
+    integer, intent(in) :: n
+    N_EXTERNAL = n
+  end subroutine t1_set_n_external
+
+end submodule t1_s
-- 
2.43.0


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

* Re: [PATCH] fortran: Fix specification expression check in submodules [PR114475]
  2024-03-27 15:30 [PATCH] fortran: Fix specification expression check in submodules [PR114475] Mikael Morin
@ 2024-03-27 16:43 ` Steve Kargl
  0 siblings, 0 replies; 2+ messages in thread
From: Steve Kargl @ 2024-03-27 16:43 UTC (permalink / raw)
  To: Mikael Morin; +Cc: fortran, gcc-patches

On Wed, Mar 27, 2024 at 04:30:42PM +0100, Mikael Morin wrote:
> Hell(o),
> 
> it didn't take long for my recent patch for PR111781 to show a regression.
> The fix proposed here is actually the one Harald posted in the PR.
> I can't imagine a case where it wouldn't do the right thing.
> Regression tested on x86_64-pc-linux-gnu.
> OK for master?
> 

Yes.  Thank you (and Harald) for the quick fix.

-- 
Steve

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

end of thread, other threads:[~2024-03-27 16:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-27 15:30 [PATCH] fortran: Fix specification expression check in submodules [PR114475] Mikael Morin
2024-03-27 16:43 ` Steve Kargl

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).