From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id 1D9183858D35; Sat, 24 Jun 2023 19:05:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1D9183858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1687633555; x=1688238355; i=anlauf@gmx.de; bh=ZGr/sj76PCb8fD+JdSkxbx4dLT8IzQG9QoE+IQ5sRno=; h=X-UI-Sender-Class:From:To:Subject:Date; b=VPZJUAmEvdK769GvGdjvbA7wYSrI5pg80geF5LyOD7VFHo8NsIWyiLuP975CiyNGbuk5n3m ajTi0UyLEUWjR/B0wUH/vXLtswGfI9q39xoqOB1GrC0kcK+UdL4gEP9mgh4joDH2CmE8bxY/Z ZAchPZ7xrcnF5aCLUup3B0bkllzjvtxfWCp1NR6QEMvPChRZfOnAed7iIaydcp3RxYdSJev/I 6hqOXgkY0/Fmd7dI7VWhs7YRW9cui647Rdw6NtC1/hrIAZtnQU7PiyP4+jdzajN1bRJUCUQm3 T7sZ3gxcFKAwevqFurumDWH7WcIOmSksuh6Bt5rr1exkP/uUE0Ew== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.80.32] ([93.207.80.32]) by web-mail.gmx.net (3c-app-gmx-bap37.server.lan [172.19.172.107]) (via HTTP); Sat, 24 Jun 2023 21:05:55 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH, part2, committed] Fortran: ABI for scalar CHARACTER(LEN=1),VALUE dummy argument [PR110360] Content-Type: multipart/mixed; boundary=rehcsed-77951545-cea3-4c75-985a-65dbdb621201 Date: Sat, 24 Jun 2023 21:05:55 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:1Hmni/fN0Cl17d00Prqa8OB8SvAoYqp7xomN306HaeptDgk41/FtofcSCkScjlOsGOU1z +9VA3LfKvCvilKo935wdihTw0fTkWkN/i3grOVxOTtNpLsbt+m2BhRLtu2K96E7C9vDT1FRcndW/ 02gfb6bUYFnZcKxbFbYQjf6gHUZkVTiukvAiwiV9QkWXDuV5gDDtkUwgASygcp4LEUoQJYIojKAx 4eTfgLeHXgfJesBOtxAbV4qCBq49mQVRRn0OX/u1vI5qailycnFAmU8nqdKeVekWupxlCwo8oW3d U8= UI-OutboundReport: notjunk:1;M01:P0:TarbTExqecg=;Io7/DHA3r7i+bV7qtJpq3y0Unyp qdZrUbnR+O/fxr9qtIpIphEJWhzKuP2ykTf+T+coyEmNEoiC23YUDffDcr9enzzqm/b7qYnts dj5xNg7gKMZRciDS0NUD/hsGCRXrg3EWt/4pnC7Uq/A4onEppc6vt0PVRObf/jiVTZNQQ7tLb Rjq8GBJlLke4h8f40SHmAooimMFbz/294sx6M7Bn2Grk1+Bk24MDIgMZUjDYC5vaxKeT2Arkj LzsZmVV7nSnO8/c/gRvEPw+7HoHzW21IYsydzHBta/c1E0IaBiOuiwmbd7oqro3EJUc2NHNQs wvXFx1zW+43du1bOeLFgxgsYvN8HiLDkRDtvtYU0LYRIZ+ihh1pKBpW3rpOvxJcVckSQAKBU3 m/H2LV/n/QBBhjfgx74UiYnGTNYt8bPCXrthXm5FkLz15weFOcT7rnorKf7H0s0WfgOVL3fuj rxjTRNfkVvN5x22Y1RxTNElkNmzuHn4/pBVbvpin1vj3pxJVtOzMWJmgry/MIbRxUXoYBvblf PAjZyVbCoMvc84m+fKJw85cVPsrL8nBaNLZOe/vHef9exGZPFhY+Wjkzvu01gAeD8hFTD+9Qw t3WBNedp/4QGLcsqVHTFHUyPwpXxmHUP5n0q/GZ/NNAfEXJbNiGmdZz9dlX4rIU0nnwBZfC17 /ZIR1kMOIX1R81bTsQxh5CaRMvcrnfDs5kUTJaHY7YnM2KslPNVDiadQpXLsxiM2Lbs4tNsIt O4J8Q7HnkcdjiNX9OQhahmJKdsydTivaYZxc+SWJpbIRyF83Jqqc3Pn+P4MhMmgbtTi9duRcf r+tq+4/8sFw8AXlsvVRqDQVw== X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --rehcsed-77951545-cea3-4c75-985a-65dbdb621201 Content-Type: text/plain; charset=UTF-8 Dear all, the first part of the patch came with a testcase that also exercised code for constant string arguments, which was not touched by that patch but seems to have caused runtime failures on big-endian platforms (e.g. Power-* BE) for all optimization levels, and on x86 / -m32 at -O1 and higher (not at -O0). I did not see any issues on x86 / -m64 and any optimization level, but could reproduce a problem with x86 / -m32 at -O1, which appears to be related how arguments that are to be passed by value are handled when there is a mismatch between the function prototype and the passed argument. The solution is to truncate too long constant string arguments, fixed by the attached patch, pushed as: https://gcc.gnu.org/g:3f97d10aa1ff5984d6fd657f246d3f251b254ff1 and see attached. * * * I found gcc-testresults quite helpful in checking whether my patch caused trouble on architectures different from the one I'm working on. The value (pun intended) would have been even greater if output of runtime failures would also be made available. Many (Fortran) tests provide either a stop code, or some hopefully helpful diagnostic output on stdout intended for locating errors on platforms where one has no direct access to, or is less familiar with. Far better than a plain FAIL: gfortran.dg/value_9.f90 -O1 execution test * * * Thanks, Harald --rehcsed-77951545-cea3-4c75-985a-65dbdb621201 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr110360-part2.diff Content-Transfer-Encoding: quoted-printable =46rom 3f97d10aa1ff5984d6fd657f246d3f251b254ff1 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sat, 24 Jun 2023 20:36:53 +0200 Subject: [PATCH] Fortran: ABI for scalar CHARACTER(LEN=3D1),VALUE dummy ar= gument [PR110360] gcc/fortran/ChangeLog: PR fortran/110360 * trans-expr.cc (gfc_conv_procedure_call): Truncate constant string argument of length > 1 passed to scalar CHARACTER(1),VALUE dummy. =2D-- gcc/fortran/trans-expr.cc | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index c92fccd0be2..63e3cf9681e 100644 =2D-- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -6395,20 +6395,25 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol *= sym, /* ABI: actual arguments to CHARACTER(len=3D1),VALUE dummy arguments are actually passed by value. - The BIND(C) case is handled elsewhere. - TODO: truncate constant strings to length 1. */ + Constant strings are truncated to length 1. + The BIND(C) case is handled elsewhere. */ if (fsym->ts.type =3D=3D BT_CHARACTER && !fsym->ts.is_c_interop && fsym->ts.u.cl->length->expr_type =3D=3D EXPR_CONSTANT && fsym->ts.u.cl->length->ts.type =3D=3D BT_INTEGER && (mpz_cmp_ui - (fsym->ts.u.cl->length->value.integer, 1) =3D=3D 0) - && e->expr_type !=3D EXPR_CONSTANT) + (fsym->ts.u.cl->length->value.integer, 1) =3D=3D 0)) { - parmse.expr =3D gfc_string_to_single_character - (build_int_cst (gfc_charlen_type_node, 1), - parmse.expr, - e->ts.kind); + if (e->expr_type !=3D EXPR_CONSTANT) + parmse.expr =3D gfc_string_to_single_character + (build_int_cst (gfc_charlen_type_node, 1), + parmse.expr, + e->ts.kind); + else if (e->value.character.length > 1) + { + e->value.character.length =3D 1; + gfc_conv_expr (&parmse, e); + } } if (fsym->attr.optional =2D- 2.35.3 --rehcsed-77951545-cea3-4c75-985a-65dbdb621201--