From patchwork Sat Jun 24 19:05:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1799438 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=Mdgwgckg; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QpNr02Kxbz20WR for ; Sun, 25 Jun 2023 05:06:22 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 32A2B3857721 for ; Sat, 24 Jun 2023 19:06:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 32A2B3857721 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687633579; bh=V5x7+efHg+aTuiuVEauIiORvKmmELAGHvHySmuww8Kk=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Mdgwgckgm8GWEBzeSUcS3J9ledesvol9HB2qUJdVj30mvtVKHcNEsfz/3xIAEw4Iu gGcGTWTSPbiAdQxQj4Jcj3YrSirwCDglyMeVGntIBIOpJNrGkQi9Wcub1ohERhvO5e vhiT6DFfaKXd03vJ51sKIXJiyCntEVPU1dXoZWhQ= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 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: To: fortran , gcc-patches Subject: [PATCH, part2, committed] Fortran: ABI for scalar CHARACTER(LEN=1),VALUE dummy argument [PR110360] 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" 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 From 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=1),VALUE dummy argument [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. --- 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 --- 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=1),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 == BT_CHARACTER && !fsym->ts.is_c_interop && fsym->ts.u.cl->length->expr_type == EXPR_CONSTANT && fsym->ts.u.cl->length->ts.type == BT_INTEGER && (mpz_cmp_ui - (fsym->ts.u.cl->length->value.integer, 1) == 0) - && e->expr_type != EXPR_CONSTANT) + (fsym->ts.u.cl->length->value.integer, 1) == 0)) { - parmse.expr = gfc_string_to_single_character - (build_int_cst (gfc_charlen_type_node, 1), - parmse.expr, - e->ts.kind); + if (e->expr_type != EXPR_CONSTANT) + parmse.expr = 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 = 1; + gfc_conv_expr (&parmse, e); + } } if (fsym->attr.optional -- 2.35.3