From: Mikael Morin <mikael@gcc.gnu.org>
To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org
Subject: [PATCH v2 8/9] fortran: Support clobbering of allocatables and pointers [PR41453]
Date: Sun, 18 Sep 2022 22:15:44 +0200 [thread overview]
Message-ID: <20220918201545.453296-9-mikael@gcc.gnu.org> (raw)
In-Reply-To: <20220918201545.453296-1-mikael@gcc.gnu.org>
This adds support for clobbering of allocatable and pointer scalar
variables passed as actual argument to a subroutine when the associated
dummy has the INTENT(OUT) attribute.
Support was explicitly disabled, but the clobber generation code seems
to support it well, as demonstrated by the newly added testcase.
PR fortran/41453
gcc/fortran/ChangeLog:
* trans-expr.cc (gfc_conv_procedure_call): Remove conditions
on ALLOCATABLE and POINTER attributes guarding clobber
generation.
gcc/testsuite/ChangeLog:
* gfortran.dg/intent_optimize_7.f90: New test.
---
gcc/fortran/trans-expr.cc | 2 -
.../gfortran.dg/intent_optimize_7.f90 | 42 +++++++++++++++++++
2 files changed, 42 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_7.f90
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 4491465c4d6..ae685157e22 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -6525,8 +6525,6 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
&& e->symtree
&& e->symtree->n.sym
&& !e->symtree->n.sym->attr.dimension
- && !e->symtree->n.sym->attr.pointer
- && !e->symtree->n.sym->attr.allocatable
&& e->ts.type != BT_CHARACTER
&& e->ts.type != BT_DERIVED
&& e->ts.type != BT_CLASS
diff --git a/gcc/testsuite/gfortran.dg/intent_optimize_7.f90 b/gcc/testsuite/gfortran.dg/intent_optimize_7.f90
new file mode 100644
index 00000000000..0146dff4e20
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intent_optimize_7.f90
@@ -0,0 +1,42 @@
+! { dg-do run }
+! { dg-additional-options "-fno-inline -fno-ipa-modref -fdump-tree-optimized -fdump-tree-original" }
+!
+! PR fortran/41453
+! Check that the INTENT(OUT) attribute causes one clobber to be emitted in
+! the caller before each call to FOO in the *.original dump, and the
+! initialization constants to be optimized away in the *.optimized dump,
+! in the case of scalar allocatables and pointers.
+
+module x
+implicit none
+contains
+ subroutine foo(a)
+ integer, intent(out) :: a
+ a = 42
+ end subroutine foo
+end module x
+
+program main
+ use x
+ implicit none
+ integer, allocatable :: ca
+ integer, target :: ct
+ integer, pointer :: cp
+
+ allocate(ca)
+ ca = 123456789
+ call foo(ca)
+ if (ca /= 42) stop 1
+ deallocate(ca)
+
+ ct = 987654321
+ cp => ct
+ call foo(cp)
+ if (ct /= 42) stop 2
+end program main
+
+! { dg-final { scan-tree-dump-times "CLOBBER" 2 "original" } }
+! { dg-final { scan-tree-dump "\\*ca = {CLOBBER};" "original" } }
+! { dg-final { scan-tree-dump "\\*cp = {CLOBBER};" "original" } }
+! { dg-final { scan-tree-dump-not "123456789" "optimized" { target __OPTIMIZE__ } } }
+! { dg-final { scan-tree-dump-not "987654321" "optimized" { target __OPTIMIZE__ } } }
--
2.35.1
next prev parent reply other threads:[~2022-09-18 20:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-18 20:15 [PATCH v2 0/9] fortran: clobber fixes [PR41453] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 1/9] fortran: Move the clobber generation code Mikael Morin
2022-09-18 20:15 ` [PATCH v2 2/9] fortran: Fix invalid function decl clobber ICE [PR105012] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 3/9] fortran: Move clobbers after evaluation of all arguments [PR106817] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 4/9] fortran: Support clobbering with implicit interfaces [PR105012] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 5/9] fortran: Support clobbering of reference variables [PR41453] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 6/9] fortran: Support clobbering of SAVE variables [PR87395] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 7/9] fortran: Support clobbering of ASSOCIATE variables [PR87397] Mikael Morin
2022-09-18 20:15 ` Mikael Morin [this message]
2022-09-18 20:15 ` [PATCH v2 9/9] fortran: Support clobbering of derived types [PR41453] Mikael Morin
[not found] ` <tgihce$hvi$1@ciao.gmane.io>
2022-09-23 7:54 ` [PATCH v2 0/9] fortran: clobber fixes [PR41453] Mikael Morin
2022-09-25 12:53 ` Mikael Morin
2022-10-10 18:58 ` Mikael Morin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220918201545.453296-9-mikael@gcc.gnu.org \
--to=mikael@gcc.gnu.org \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).