public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mikael Morin <mikael@gcc.gnu.org>
To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org
Subject: [PATCH v2 2/9] fortran: Fix invalid function decl clobber ICE [PR105012]
Date: Sun, 18 Sep 2022 22:15:38 +0200	[thread overview]
Message-ID: <20220918201545.453296-3-mikael@gcc.gnu.org> (raw)
In-Reply-To: <20220918201545.453296-1-mikael@gcc.gnu.org>

The fortran frontend, as result symbol for a function without
declared result symbol, uses the function symbol itself.  This caused
an invalid clobber of a function decl to be emitted, leading to an
ICE, whereas the intended behaviour was to clobber the function result
variable.  This change fixes the problem by getting the decl from the
just-retrieved variable reference after the call to
gfc_conv_expr_reference, instead of copying it from the frontend symbol.

	PR fortran/105012

gcc/fortran/ChangeLog:

	* trans-expr.cc (gfc_conv_procedure_call): Retrieve variable
	from the just calculated variable reference.

gcc/testsuite/ChangeLog:

	* gfortran.dg/intent_out_15.f90: New test.
---
 gcc/fortran/trans-expr.cc                   |  3 ++-
 gcc/testsuite/gfortran.dg/intent_out_15.f90 | 27 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_15.f90

diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 7902b941c2d..76c587e3d9f 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -6528,7 +6528,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
 			  tree var;
 			  /* FIXME: This fails if var is passed by reference, see PR
 			     41453.  */
-			  var = e->symtree->n.sym->backend_decl;
+			  var = build_fold_indirect_ref_loc (input_location,
+							     parmse.expr);
 			  tree clobber = build_clobber (TREE_TYPE (var));
 			  gfc_add_modify (&se->pre, var, clobber);
 			}
diff --git a/gcc/testsuite/gfortran.dg/intent_out_15.f90 b/gcc/testsuite/gfortran.dg/intent_out_15.f90
new file mode 100644
index 00000000000..64334e6f038
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intent_out_15.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original" }
+!
+! PR fortran/105012
+! The following case was triggering an ICE because of a clobber
+! on the DERFC function decl instead of its result.
+
+module error_function
+integer, parameter :: r8 = selected_real_kind(12) ! 8 byte real
+contains
+SUBROUTINE CALERF_r8(ARG, RESULT, JINT)
+   integer, parameter :: rk = r8
+   real(rk), intent(in)  :: arg
+   real(rk), intent(out) :: result
+   IF (Y .LE. THRESH) THEN
+   END IF
+end SUBROUTINE CALERF_r8
+FUNCTION DERFC(X)
+   integer, parameter :: rk = r8 ! 8 byte real
+   real(rk), intent(in) :: X
+   real(rk) :: DERFC
+   CALL CALERF_r8(X, DERFC, JINT)
+END FUNCTION DERFC
+end module error_function
+
+! { dg-final { scan-tree-dump-times "CLOBBER" 1 "original" } }
+! { dg-final { scan-tree-dump "__result_derfc = {CLOBBER};" "original" } }
-- 
2.35.1


  parent reply	other threads:[~2022-09-18 20:15 UTC|newest]

Thread overview: 14+ 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 ` Mikael Morin [this message]
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 ` [PATCH v2 8/9] fortran: Support clobbering of allocatables and pointers [PR41453] Mikael Morin
2022-09-18 20:15 ` [PATCH v2 9/9] fortran: Support clobbering of derived types [PR41453] Mikael Morin
2022-09-22 20:42 ` [PATCH v2 0/9] fortran: clobber fixes [PR41453] Harald Anlauf
2022-09-23  7:54   ` 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-3-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).