From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by sourceware.org (Postfix) with ESMTPS id 69F9A385841F; Fri, 22 Mar 2024 17:32:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 69F9A385841F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 69F9A385841F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711128733; cv=none; b=KGwGZUljUDqZXpKgp+YzJ8HkTaWJakw9byVvPw3BgAqOw4sIkw7D6HymoCJebD55ej9UROWedZai8zdRZ/DjpxYe0c7brSIoidckAQ/YwU1VRZYOIw5EExFvE+uiMRG6G4Uaon9SzwFfZjPjcEGTE/iUFBUSa4xcu1tKuAhzbfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711128733; c=relaxed/simple; bh=C3CinmmEuJTQbCF7GQwFsbwRGGEXu8SwW9oLy1blMwE=; h=DKIM-Signature:MIME-Version:Message-ID:From:To:Subject:Date; b=LtK6DI69sPNFhLwRfAD0ox1CKS78IOPXlTpKk00fpY1SpYqgsYqtD5YFIF1qWkQgrFQMQm1TCbQElV1kHmY9znHeAKqVK0H5fNwXjXdu6UgQOLpGBhNtOQrHA5Vc/GZ3QXBySq8xHTX4o1ebhledlHOT2MpZzj04kUdDlpK3+WU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1711128723; x=1711733523; i=anlauf@gmx.de; bh=i852szYEV2I1AY+pLFZtp3kXh3wNfA7un0HU37zx8hg=; h=X-UI-Sender-Class:From:To:Subject:Date; b=B3u3GZizqZkF+30STiFRcUSQ23cQwClpUM9x4vjOHRuiXTN9zZgXOZ1OgupaMtYM iCqaVaV4wu1azXFueUc53vaumSm5S6saTzdE3Ow5pUqcWcBoQgXQ59hYXwzUqovG5 jY4noG4hWJ0olLPqanYlfD4QFrYMueW9TclE115uWysdC95FItBwG/4D1KQuGhO92 SUuSbPL5OPv2BQGYkPGC5NasLuDFHA3FwXMHtpgXsCdaN6pGJ5tu8fsLJyJhUf0wV b4VZmLY/yi9mbCfcou61OZqNmd2ry+BA7kd6jqtzNLKnFeKiKw68ccQZxqcoHK6Bl lb6y+TyqtqifTYH8AQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.91.204] ([93.207.91.204]) by web-mail.gmx.net (3c-app-gmx-bs02.server.lan [172.19.170.51]) (via HTTP); Fri, 22 Mar 2024 18:32:03 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: no size check passing NULL() without MOLD argument [PR55978] Content-Type: multipart/mixed; boundary=rekceb-dfaa8104-f641-4591-bde9-3dbe98bf0832 Date: Fri, 22 Mar 2024 18:32:03 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:DDGNSURm6acciXwTLv7Xxsmdij/bO5/glf0kVdyWqun5ha+vbLvrNSptnow8Ej9rGk2qV KaX9ORvc6pu5iJMKX9DpyR74mUMgePHS/+zxemKTNzMCSZdfyDGl43NBSsJZdGT9MM44WPZbnCkD U/YzpKv/dUnLvASJRzAQHFXe3l8ACO74F2L7e10lCMGnnwaJZU2VncBlNkOCy7T3i7P33Zlivlqt TSEuDl2nX2UDqJNy5G1JkyeA73txPZ8gfbs2qjrFtxQ57MHtcrDvD6tYaPJLy4fOExZ8+1nZKAnl D0= UI-OutboundReport: notjunk:1;M01:P0:oZebPWxhBN8=;PUrheNQcuaixCLeQLsGzHDX6zCQ C+Cuil8zlokTtS9VKIHJomItskWouF/8nmvPNX7qZg368wrmzpYwk7hpK+PMEhUw8haJ923rW 5pd6iH94HLjUDkz5bARe7/zRmCY5uionfizOXmVTwvMqEdnIHlgd65YVYpbIE0AdodhbLLsI/ OQ7P+rIpeZbhsUCRG/h4EmRBGYwPBx3ELnh/zz7AVajdjF51PZqs68w2bt2r1R+Qf71NzzaCq 44fSiVcSUajJCjE9rMeIZB8pTH1Y2ZGX0mm2F/kSg5mik4AWlFR5LWVOF3S5rUW1+3TYFsJ6y Qlb+nuWKdm38RFJ7LTwT+9/toND5jg2TNMNgaCwQLfdr6R9jwo64ZlYwN+z+T80/kY3OXc8wD O8EnOdEWh+0Qopog3nhU037m9pQvMntYya4RuOJNgIazwUnbJ1d79nIQRR2LtvXr7j35TueL/ hD6mw6ttpBePOzzWfNRbX+72otq6BOS/Cq7ArVktDCTcoGNtk55MU81UMJJ5ekWQ3dsRKp/c9 9n5RPjrJCJEkEQrj907nEqGMw/g16oD4uEJQLiK36QKdpN0HhQTtwdC2l6QI/ghlzIc+T4hwY cuOR85KmTM/nTeTGrhEyOhFb4/DqPemAv3ejoNTiXrxf2PpU66T/NVqOLvX+qTeaQK5LbvYDU V4FxsN/13IRa2aNAIXibxiPFMAdI+qpxsQydZxfIxUl/7/vNmBUYqqdRedePoU8= X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --rekceb-dfaa8104-f641-4591-bde9-3dbe98bf0832 Content-Type: text/plain; charset=UTF-8 Dear all, here's a simple and obvious patch for a rejects-valid case when we pass a NULL() actual to an optional dummy for variants where there is no MOLD argument and it is also not required. The testcase is an extended version of PR55978 comment#16 and cross-checked with Intel and NAG. Regtested on x86_64-pc-linux-gnu. I intend to commit soon unless there are objections. Thanks, Harald --rekceb-dfaa8104-f641-4591-bde9-3dbe98bf0832 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr55978-null-actual.diff Content-Transfer-Encoding: quoted-printable =46rom e92244c5539a537cff338b781d15acd58d4c86f1 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Fri, 22 Mar 2024 18:17:15 +0100 Subject: [PATCH] Fortran: no size check passing NULL() without MOLD argume= nt [PR55978] gcc/fortran/ChangeLog: PR fortran/55978 * interface.cc (gfc_compare_actual_formal): Skip size check for NULL() actual without MOLD argument. gcc/testsuite/ChangeLog: PR fortran/55978 * gfortran.dg/null_actual_5.f90: New test. =2D-- gcc/fortran/interface.cc | 4 ++ gcc/testsuite/gfortran.dg/null_actual_5.f90 | 76 +++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/null_actual_5.f90 diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc index 64b90550be2..7b86a338bc1 100644 =2D-- a/gcc/fortran/interface.cc +++ b/gcc/fortran/interface.cc @@ -3439,6 +3439,10 @@ gfc_compare_actual_formal (gfc_actual_arglist **ap,= gfc_formal_arglist *formal, if (f->sym->ts.type =3D=3D BT_CLASS) goto skip_size_check; + /* Skip size check for NULL() actual without MOLD argument. */ + if (a->expr->expr_type =3D=3D EXPR_NULL && a->expr->ts.type =3D=3D = BT_UNKNOWN) + goto skip_size_check; + actual_size =3D get_expr_storage_size (a->expr); formal_size =3D get_sym_storage_size (f->sym); if (actual_size !=3D 0 && actual_size < formal_size diff --git a/gcc/testsuite/gfortran.dg/null_actual_5.f90 b/gcc/testsuite/g= fortran.dg/null_actual_5.f90 new file mode 100644 index 00000000000..1198715b7c8 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/null_actual_5.f90 @@ -0,0 +1,76 @@ +! { dg-do compile } +! PR fortran/55978 +! +! Passing of NULL() with and without MOLD as actual argument +! +! Testcase derived from pr55978 comment#16 + +program pr55978_c16 + implicit none + + integer, pointer :: p(:) + integer, allocatable :: a(:) + character(10), pointer :: c + character(10), pointer :: cp(:) + + type t + integer, pointer :: p(:) + integer, allocatable :: a(:) + end type + + type(t) :: d + + ! (1) pointer + p =3D> null() + call sub (p) + + ! (2) allocatable + call sub (a) + call sub (d%a) + + ! (3) pointer component + d%p =3D> null () + call sub (d%p) + + ! (4) NULL + call sub (null (a)) ! OK + call sub (null (p)) ! OK + call sub (null (d%a)) ! OK + call sub (null (d%p)) ! OK + call sub (null ()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/4= ) + + call bla (null(c)) + call bla (null()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/1= 0) + + call foo (null(cp)) + call foo (null()) + + call bar (null(cp)) + call bar (null()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/7= 0) + +contains + + subroutine sub(x) + integer, intent(in), optional :: x(4) + if (present (x)) stop 1 + end + + subroutine bla(x) + character(len=3D10), intent(in), optional :: x + if (present (x)) stop 2 + end + + subroutine foo(x) + character(len=3D10), intent(in), optional :: x(:) + if (present (x)) stop 3 + end + + subroutine bar(x) + character(len=3D10), intent(in), optional :: x(7) + if (present (x)) stop 4 + end + +end =2D- 2.35.3 --rekceb-dfaa8104-f641-4591-bde9-3dbe98bf0832--