public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mikael Morin <morin-mikael@orange.fr>
To: Harald Anlauf <anlauf@gmx.de>, fortran <fortran@gcc.gnu.org>,
	gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, v2] Fortran: fix for absent array argument passed to optional dummy [PR101135]
Date: Sun, 17 Mar 2024 22:04:21 +0100	[thread overview]
Message-ID: <2b9052c6-43b2-4c7e-b905-e1ceaa52cb94@orange.fr> (raw)
In-Reply-To: <a63d9ea1-aa49-482c-b858-bfb31a7598a6@gmx.de>

Le 15/03/2024 à 20:32, Harald Anlauf a écrit :
> Dear all,
> 
> as there has been some good progress in the handling of optional dummy
> arguments, I looked again at this PR and a patch for it that I withdrew
> as it turned out incomplete.
> 
> It turned out that it now needs only a minor adjustment for optional
> dummy arguments of procedures with bind(c) attribute so that ubsan
> checking does not trigger.
> 
> Along this way I extended the previous testcase to exercise to some
> extent combinations of bind(c) and non-bind(c) procedures and found
> one failure (since at least gcc-9) that is genuine: passing a missing
> optional from a bind(c) procedure to an assumed-rank dummy, see
> PR114355.  The corresponding test is commented in the testcase.
> 
> Regtested on x86_64-pc-linux-gnu.  OK for mainline?
> 
> Thanks,
> Harald
> 
(...)
> 
> From b3079a82a220477704f8156207239e4af4103ea9 Mon Sep 17 00:00:00 2001
> From: Harald Anlauf <anlauf@gmx.de>
> Date: Fri, 15 Mar 2024 20:14:07 +0100
> Subject: [PATCH] Fortran: fix for absent array argument passed to optional
>  dummy [PR101135]
> 
> gcc/fortran/ChangeLog:
> 
> 	PR fortran/101135
> 	* trans-array.cc (gfc_get_dataptr_offset): Check for optional
> 	arguments being present before dereferencing data pointer.
> 
> gcc/testsuite/ChangeLog:
> 
> 	PR fortran/101135
> 	* gfortran.dg/missing_optional_dummy_6a.f90: Adjust diagnostic pattern.
> 	* gfortran.dg/ubsan/missing_optional_dummy_8.f90: New test.
> ---
>  gcc/fortran/trans-array.cc                    |  11 ++
>  .../gfortran.dg/missing_optional_dummy_6a.f90 |   2 +-
>  .../ubsan/missing_optional_dummy_8.f90        | 108 ++++++++++++++++++
>  3 files changed, 120 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_8.f90
> 
> diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
> index 3673fa40720..a7717a8107e 100644
> --- a/gcc/fortran/trans-array.cc
> +++ b/gcc/fortran/trans-array.cc
> @@ -7526,6 +7526,17 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, tree desc, tree offset,
>  
>    /* Set the target data pointer.  */
>    offset = gfc_build_addr_expr (gfc_array_dataptr_type (desc), tmp);
> +
> +  /* Check for optional dummy argument being present.  Arguments of BIND(C)
> +     procedures are excepted here since they are handled differently.  */
> +  if (expr->expr_type == EXPR_VARIABLE
> +      && expr->symtree->n.sym->attr.dummy
> +      && expr->symtree->n.sym->attr.optional
> +      && !is_CFI_desc (NULL, expr))

I think the condition could additionally check the lack of subreferences.
But it's maybe not worth the trouble, and the patch is conservatively 
correct as is, so OK.

Thanks for the patch.

> +    offset = build3_loc (input_location, COND_EXPR, TREE_TYPE (offset),
> +			 gfc_conv_expr_present (expr->symtree->n.sym), offset,
> +			 fold_convert (TREE_TYPE (offset), gfc_index_zero_node));
> +
>    gfc_conv_descriptor_data_set (block, parm, offset);
>  }
>  


  reply	other threads:[~2024-03-17 21:04 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-29 21:41 [PATCH] PR/101135 - Load of null pointer when passing absent assumed-shape array argument for an optional dummy argument Harald Anlauf
2022-02-04 10:45 ` Mikael Morin
2022-02-06 21:04   ` Harald Anlauf
2024-03-15 19:32     ` [PATCH, v2] Fortran: fix for absent array argument passed to optional dummy [PR101135] Harald Anlauf
2024-03-17 21:04       ` Mikael Morin [this message]
2024-03-17 22:10         ` Harald Anlauf
2024-03-18 18:47           ` 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=2b9052c6-43b2-4c7e-b905-e1ceaa52cb94@orange.fr \
    --to=morin-mikael@orange.fr \
    --cc=anlauf@gmx.de \
    --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).