Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218758/?format=api
{ "id": 2218758, "url": "http://patchwork.ozlabs.org/api/patches/2218758/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/8b01456d-c676-4171-af31-d29c04c88b83@gmx.de/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<8b01456d-c676-4171-af31-d29c04c88b83@gmx.de>", "list_archive_url": null, "date": "2026-04-01T20:38:49", "name": "Fortran: fix passing a procedure pointer to c_funloc [PR124652]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "a414f62e31995923f181fd330326296f04400284", "submitter": { "id": 21263, "url": "http://patchwork.ozlabs.org/api/people/21263/?format=api", "name": "Harald Anlauf", "email": "anlauf@gmx.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/8b01456d-c676-4171-af31-d29c04c88b83@gmx.de/mbox/", "series": [ { "id": 498390, "url": "http://patchwork.ozlabs.org/api/series/498390/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=498390", "date": "2026-04-01T20:38:49", "name": "Fortran: fix passing a procedure pointer to c_funloc [PR124652]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498390/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218758/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218758/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=gmx.de header.i=anlauf@gmx.de header.a=rsa-sha256\n header.s=s31663417 header.b=QooA6OyE;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (2048-bit key,\n secure) header.d=gmx.de header.i=anlauf@gmx.de header.a=rsa-sha256\n header.s=s31663417 header.b=QooA6OyE", "sourceware.org;\n dmarc=pass (p=quarantine dis=none) header.from=gmx.de", "sourceware.org; spf=pass smtp.mailfrom=gmx.de", "server2.sourceware.org;\n arc=none smtp.remote-ip=212.227.17.21" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmH2201zcz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 07:40:58 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 018DE4BA23DA\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 1 Apr 2026 20:40:56 +0000 (GMT)", "from mout.gmx.net (mout.gmx.net [212.227.17.21])\n by sourceware.org (Postfix) with ESMTPS id 0B8D84BA23EB;\n Wed, 1 Apr 2026 20:38:51 +0000 (GMT)", "from client.hidden.invalid by mail.gmx.net (mrgmx104\n [212.227.17.168]) with ESMTPSA (Nemesis) id 1MYNJq-1w4Ixs2aaw-00RpC2; Wed, 01\n Apr 2026 22:38:50 +0200" ], "DKIM-Filter": "OpenDKIM Filter v2.11.0 sourceware.org 018DE4BA23DA", "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 0B8D84BA23EB", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 0B8D84BA23EB", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775075932; cv=none;\n b=ZRAxdGhZ482C+COSyvWd4MiAk7VMrATXwYKp8bWOsbwsS8AMNij1dhnRadDXfzWQJn78qi6Krxiatx7JoX7q75erqa1g8DPOiIRm6UY0JEXTHRjUd1O9zJdflBdffnBI9hxEBgxktwX6ypXYthsurZf4z5k2KVAW0rWrdNbju7w=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775075932; c=relaxed/simple;\n bh=9nWS9L5h/84C1mfLwFO3hd5JBWS6IrGJhwtQp9rJFsc=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject;\n b=MWXdM6/xGOng9mXr6NwdJRngt7dq9BmDCTdg4DfBtdT8dKF6R/FG7rP8Ut0m//fy2mX0e4YngZIwlHPUYJTa3kx64Y0iuwkJsfPvfBS6Loh/OQtsNhKSKwVkW62RRAOalR1NJCXNF2ePD4oMN1NRrik4BLorQDR+n0/dXlJ8zZ0=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;\n s=s31663417; t=1775075930; x=1775680730; i=anlauf@gmx.de;\n bh=eot/zg1YX22emyleD20IR1p791AB5pMDsF/eKWXaGKA=;\n h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version:Cc:\n From:Subject:cc:content-transfer-encoding:content-type:date:from:\n message-id:mime-version:reply-to:subject:to;\n b=QooA6OyEEW3XL+Q61nEOvKNPZfXGDJEY/+TGmlXvDUehut1gH2DmMSp4L6SWblor\n CAYWsxOcvKHTqsSm6/E09uMo/TEaczVT6PjsIXz9Qu1HPHSpsImWVkWUdBfOnREGj\n hp/VwC176TQTlRZcNCrTysSUNKU7FgNZxSJ00Q8YA1R730cwM9FDfaVl531NZH+qJ\n U4fW69adghZ3h/tIcRGHG0PajFjxVDK1F09RXbvRSQMD78oFwSoMxg1f0CZQrlJFe\n RL34kWn+09XY1t5MumKe+F+/sba9s6cirmalVOwxVqvxplAF1AqEPTre2abtnfHmx\n ARtosIsogTCt6xV3OA==", "X-UI-Sender-Class": "724b4f7f-cbec-4199-ad4e-598c01a50d3a", "Content-Type": "multipart/mixed; boundary=\"------------ze5403003BO0jwICe5jqxM7y\"", "Message-ID": "<8b01456d-c676-4171-af31-d29c04c88b83@gmx.de>", "Date": "Wed, 1 Apr 2026 22:38:49 +0200", "MIME-Version": "1.0", "User-Agent": "Mozilla Thunderbird", "Newsgroups": "gmane.comp.gcc.fortran,gmane.comp.gcc.patches", "Content-Language": "en-US", "Cc": "fortran <fortran@gcc.gnu.org>, gcc-patches <gcc-patches@gcc.gnu.org>", "From": "Harald Anlauf <anlauf@gmx.de>", "Subject": "[PATCH] Fortran: fix passing a procedure pointer to c_funloc\n [PR124652]", "X-Provags-ID": "V03:K1:udzbpt9gVSWy8FkQYm9iwToJy/wFrTIX+Ni4dvAaP23bCVJr9XW\n adhWdIk1SNPfp9bqNSuJOL9a8U59JTHMD2BuxU1VvCzleeU8KTbKGFfCnR0V+NXtepwuGAZ\n JSSP+VksFJVriUAV493pgYHinxTbrrQwXiV4OP/fQ5w+w+yj+5m6CdDti5kank5F3qoiQ9t\n r1mXhAsZVluqppMMDT3IA==", "UI-OutboundReport": "notjunk:1;M01:P0:h9Ko7y7B5hU=;T6eftkffKMHrIO6qczImF8tQlgT\n SkQCvf+ZyWtmW0Ip/TC7iMUW1LFDCL8nCii9Yyno8+PATT3WKTqJo/18arBo2cSqUfFu2sNNJ\n G5rPDltY9AzHHcX6/Br+TlvXPeCpLEVhbB6f7jBUlNcwp60sTEmaqxVZMVOqE8zmi+3UrmumF\n ct6YDIZwVoPDAdzZxmt9h7OqPeRP4E/taECFhJ9T3efSCCXmgl03aC6E2poq2cAUUyqKsbPND\n gzUwD7hz1OB4shjmGkUkiQI1TBKijX+ulFA40mTVUQhedFsEtixlvIdgUzfD/JmCulsrFwDPC\n omISuF88sd2CGNgs6V2LOTtV4EpiDymIGOECDu96qA3UB4qz9FUwgM1eBjvhIqQoxKHndLG3d\n aGZSsjDY2rPqIXLr0y19ldIIH9T1LG/rEPUrkKA/SjDfRglmZF/EaL54PxL9NjHnLsIT3MdyK\n skTihHkEblfBc+0nzElmRERVBMI8+auKqCrg5pQF0g2+QvL4kIYqZMFwsQoFoZcsRcg2xyOvg\n VUmIfvioLlPehQjOZr9UDuvXTH5iEbE6M+Nv7nN1dEpokSU+wPOw/BNYdxzZv492FGONr/fhN\n flUDZWBgjVjKZNLelsdz7HJtd/uN9afaAcEKgoeEJ2RfcZqYhHjkkevclOyCyitfcgGhHz+wm\n zEkfSzje2Bhf99Q8eZgwwYto0vu+XGp8iqrOsF7dbKJf3Q42bM47EZFNkoPJR+AC9hrqpE9kg\n KsOJEyw0NEVaMBRirSJxBSi35WYXAcxNtA4YliiRw79E7ygoLgPtuUXJDbOnA4Cab1kFbutwX\n 8bIdvheJAeEu2A4dRCtHM7mlJs6mrrrF+VRMJl4nhN97RtwjEBh3CztLHGl4fV2wUBSI6srgp\n RDde5x9ZeuS36FWKT2l1x+vBvqBAFofi/BaZcB9LO054wulGnf5rjweQrIDGQ4nZjGA69hqUp\n 6flHXm8XGQS7t0JFRV0XRmHJYpVm5GM065KDZIEQ6/ErlTRkxPC6S05s3c90SXTLoXWhYzR7E\n NrkZyb+o2lYejyLV3Vuan7HJV8h7GXhqQhouMt4TY0LqUXPNcmtpNSdEN/l3g1Rxmc908sgu/\n NVWlFMuFPPTaBJARPetnnCNnWmf70l30c/e+kES4slEHDcQYFd/nM0Y6mZ3osIIP4TlEbRsU+\n G1VXdjvIebap58twGphaAOIDkaAWnW6nqDoNDFvGvrZQxfGrlpZ7zd/f6R1rH9sZyCkemAODu\n jmG3jRP5P6Mq6kBK4D/szt+FfqTKTFCRDLfqXzI01wL0mIilDzEDGgFB6G4bWU54ycrxlRYLn\n I/weP+PkstEonhM9zZIILd3GU+Cqo7u8keUINnQFD8lgrRyXvX+2yh37jNuy0PlCoC8YKxbrs\n RCqjFn9ttovA+RbPBbiDtCAlbxJhhqECg6cHc1S1Jcz56dUTWUS5fHTCTr8bPxh2FSXJxKC08\n wXFdQACJ2y97Sq0lMe0a8lYkZJm6YJJEBKPxwXuiyvIM7x3zthMoTRT+NdTKNPo4LlYu22qAy\n s15cn7UXn3QVmpyLNLrpVLlPQzcsUQb/tYrEhHgyvvsKq61QxDRJeUBWCBbGfMAedFp/7eIFc\n H3uN4ys9FIHSKkTnoNLJ0pMKMvMskEKtAo7tHktZxL+d/dJYirm0bdKlavz2DVxhBXXO3bnjq\n ihSfFW/ihnTbpXmMWBbI3jf0zNlv1IqerDdCYWGfVm5ZDnvP7yANLiXLBFpPeXaaRBd/7ZXec\n Lji7XoB53LWGme+YglPtsT9bgVkLHTzhC5E9o4Gat6OchNvo+SMaktXrtonZVI+4iX9nFyrE+\n dkM8Ttl6rGO+Dxu+nBvN8Wec4Js9JHjJANsp52CLsl+9Pd4BMhubDVz6NIxQ2bpu/if05ta9y\n ywxD+cBqIPV5luxtMIDuoMC1aecpL9lCvq+ZJJQnDlGW5Tdteg5PDC2LwUCUfcAi2rjLjpZ3j\n xm05aCco49lnr0PKjt2pr6Xlp+KvxngJOq7CmdBazKGIvfF501hX/rX7lSso0cMquZxxk4PQq\n FgH9kdEDb8xYP3Q4NWxPWiVEAsl+6XhZFBG2F+0mdcLYp1Ooh4dslyD/ZHLCbRGo31baksFf8\n SpQr588Sa9TUR0knJQS+h+MFtjFPcCAydB3Vr3oWL71thbR/n+jrjuH59k9doPKWv1lFPMiES\n Ex0CiT9UpelaGBpcszzvi0NTMyEeOC/E7NPKXxCRC/dABLI42Hz7Gbatzmp1Lkt+YmO4wqdRP\n hFgbqWcso21lDJAVOZIbAl8qDa/+zR+uqNOEq7Pp/EdrWTv/l1bfwA0ZhOsF2aVxL29EeVwLL\n Js7DxyPAKr70MVQrhZle+FETvnW6DE97p+F9juLRYBItjy08qLCDRCt8NkKePlqYq59XzXADW\n BmrgFD7bt5537AuPAq6Q6gYozvoMLTk3VAe2zU+vlgdd8Q6I5Tsf6JmLDaH2afhswjHHlE93c\n eMHbWyXMne8hP0GbrMF6D6BS9R1WoI8ZxTyxEYkDlk3c5NMd8KtS+elr5U2ANZ1392mw9HBUe\n +It2/GcLiZMb1Ag2GA82kTstKKbjuigkw4uEewDanrEc4V4UQTxFEBBsVmkedr+PhMtJDw2dw\n KBgGcETDRVZRjccCwdLp4KVV2l5jTWrHA09+vC2hFSiLfDz/cD70tL+ScbxYEFFB1sgmVEpma\n /YFihOo+uX6dVCCq1/aP8otPdzYlDOb8VSNAux0Wgku9lAHnJGcFtcXc0oYKevb5Rx/QnUMvy\n UbAWNjGx3CVE90wcS1UEYjnGBiTxf2sKXssHY5XPHiI3inutuZUtjFKiy8/tcIRvH/wqCeixo\n OSdoTUW2EBEZ9Gn3eABxbbrB9QoV1XtHUcq4LNM2aBgYs49jPhHKNG+nPVTeqtD15IwwQduF4\n XfmbaicfX/WcHLG4AkGKJCBAYqbSHNBTuJPg7Bb0HVpChzgF7pk2B0Gul/caAnu9+tzdRqsUB\n 81uYTYFYy1FA8TgroySFq1fEYo7N3wkqhlLRpfU11VS/xEDbnaZSODURcplHOpwwzWIIkOEtR\n th6Zkeqx9D6td7PSv9an9MvTpP00v/YVQ4SUygyf8/Whedgoyg0GEe3CTUoll4Eo/pBCNtTeA\n yJskyk3q3YFeBpABqzTukMWnhjJWg4vfr2ujSCuYPfK1q+pER7mOizEKIaFX5NYWM7SzTusru\n LxDPEFwKMvOn/+9G1/prRi/TurNA7rnT5IJbCfJS6DEVnwxN0gMjX+Gjr3eCE989VnrnjxbOL\n dzUmhLPMpvm3JMrj4Cbh7ZZpm/BJuJtOfIrWJvWre3vrcR3VfD+4Sg04fAKm4reAmeVF495/x\n /TG8Ynk3FBVPvscSUN9y7EiLr3iXWrurifh21sV9oawGA9L/V2lUFT2GHy5C4G2IS45GpqYzz\n NXriDcYASEWy45xIsfX8QnZsxrfizH4awjsVXhwjB4JltE01DWExXJ68O1mPZlOgjq8ZZ75lN\n dpp8fec7ynRInFCYdW5JF3dXGrNjr6A39DSom2C6wrraPSnEAWUOgFSA/cZjbRtBCtsqQf4UZ\n Uk0xPD2He3DfIAUU4BQX+OAQwS1D7EWwdDQ8FZRGLt9JYhFBk+U3Lq6dLrYjRJAdWul0OctJ6\n Z8l9VXVRes2zCg/DZ413kzuKivbrRt1i3U5w9DpB/qk5vcZsDQHG9TdmXmQQoJXYj5cjRcgaX\n lT5u1EIjmQEXxD7w81VdNgNQXe9GgY/PMqar8dKuQp/BlJsI1AERmR+ZGP06/4RBmueuTwXJh\n bgynyEYIBH08dTuN/wXnogCz1CSOSNDsnIqj/0MbGDEN1+/Yf2oO6MznUqsA8y+7RWWse3vzQ\n UYH4nwKjN/syaA2LlUOFS5PZUxnsa0I5ZnXc0vHFm5frUofS3qGbmcXP54vEIJraKD8q3Y3ui\n cTZK4qFSJj+LoI1r10m9wnZhICgszaqcfIdDK4siiyargPR4yI9XH98+MJ7N2AiL4irsfGGnr\n LhCsooGK+Ka3zTXYcsVJcH4IBubrCuKuEhAXowymi2OmrMqIUkh5XKjLRsdyPHoYB8uy0S3ap\n 2+aL/opUgDYYiuM6CRiDYAd4s9n6+85xaxzt5DipscL67uToVrLdoYgOGD5+yL5O9r16iPcpE\n vaS8iar0hzP+ezBcbom89wumy0Q0ZOMQVs16II24/9VGdgnjlTpFrvckO8N7QMhE/f7wRAFgj\n 6MnLAWUpKnXfq5H6TdYICbZ2txClM/H0YC8euViUS+ZnPE4V5JrMIEMFO5j1+WIpE3HB1QbWD\n q5mkU7V8QtCl0Sak3vJay99mYeXK1GB/Wy4sBNtQX/qTHckZ3Vqdw78WcvgvagpXMtS4ryFv7\n WTdAQWRYjGoRe1F5hUBhZkseYj1HPdF+/lnRK2mEV+4ho6X+m/8tkMFgPm0aTtcQG/wm3TxE4\n YdJbzhZCQTJx3qZY77ZuAvVkKEjSMOErPWtd5zSijImWZpTABUO5Y7gVPwNLjflEtpZY+KnL5\n tIWy8VSROVKwjM+Ku7+qwuhk8RQr3E6x1a0l9YVi6tdGEpRsD/ee+Vp7sZ0GPaOLBL3DX6uRu\n 7zLH5tBnn71kZMGkwmWWdd1kx19JZVKYG9qacPWZV8m7JHp31SD+0lH2s12jBo6irBlhRAC0a\n Hk2APPFvPrDrpUzoxmg+RQpTAqvRvrALyFaxBu1Prb/diCVNKkdMpEQRyeNt6tAjfy493PmiF\n sMCE/eXI/eh0l51NEUN9uqnOyY25Gp4VC/zZCM+7SUNEEZU6JosF4eCm7Wv3xGE80PDomHjz5\n Vl5IA9EfiyALwZ0YjeTPx7gWGFXzfjpRTo/r7k712zU7eADqKjmDbnwXqWmgvVHd6ZSNh0IYY\n bhbfQexTp1UMRMVvBlQZcDRQa49+pSPq39fxYjI4UQ9SwabrdU33T/FOOJgciHx8C5smh1kFw\n Dm3rWv3GTu+VuBTXHu0cgB3GwyXx7c0kRcqKz3pvfoIN2tGecdYjHY6r64OFelLaFnM/wK+mB\n r/W74JLUdCUR4xWTm3qr069VwiXOrDT+IGNjNwlfRIMdxAg65eEZdsN8i5eT0XRi4/l3LlBAt\n 8u79xYd7xMm/EXiSf+Bg/d8z8ELtWIKRh+TEqsy6ixYa52YAbutqoveEXIKcl7Cf8D3Cm6NoT\n vwAH1A0gCTHh9jYIc5XC7GiYxTF2dpFMbZaHh0GfrrdEjLf3DHlOfw8P01i8BLzWpGx9S/O8b\n YeKE5yfpJD7n+diRFh085lFhwfW1RygBGFdPr2ZW9mu/mRWNXXj2pkZT3SciYlyqfKsU1FARc\n ezIJQQBlRltTjmwEG9/6IHSZFjgMmek0CiFcTz6L6zIEGg3Om0X7+MMdIg5VLA2jVtGaQCPSS\n UnF1UaTbT9ZU3yWnVDUOJ0/QOvTUl6w2z52K5mCFZAlwf5EYY5GIN8=", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "Dear all,\n\nthe attached almost obvious patch fixes actually two issues:\n- when C_FUNLOC is applied to a procedure pointer instead of\n a procedure, and the procedure pointer is a dummy, we need\n to dereference it;\n- a procedure pointer dummy with intent(out) was clobbered,\n but the clobber was using the dereferenced pointer, which\n did fail in gimple at -O1 and higher (and is actually\n detecting wrong code).\n The solution is to not clobber (and we have a couple of\n similar exceptions).\n\nRegtested on x86_64-pc-linux-gnu. OK for mainline?\n\nAs the above issues can be naughty, is it OK to backport to 15-branch?\n\nThanks,\nHarald", "diff": "From b76f5b9108d8ac1dfaa54817d42fae292451ff02 Mon Sep 17 00:00:00 2001\nFrom: Harald Anlauf <anlauf@gmx.de>\nDate: Wed, 1 Apr 2026 22:28:02 +0200\nSubject: [PATCH] Fortran: fix passing a procedure pointer to c_funloc\n [PR124652]\n\n\tPR fortran/124652\n\ngcc/fortran/ChangeLog:\n\n\t* trans-expr.cc (gfc_conv_procedure_call): Do not clobber a\n\tprocedure pointer intent(out) argument.\n\t* trans-intrinsic.cc (conv_isocbinding_function): When passing to\n\tC_FUNLOC a procedure pointer that is a dummy, dereference it.\n\ngcc/testsuite/ChangeLog:\n\n\t* gfortran.dg/c_funloc_tests_10.f90: New test.\n---\n gcc/fortran/trans-expr.cc | 1 +\n gcc/fortran/trans-intrinsic.cc | 3 +\n .../gfortran.dg/c_funloc_tests_10.f90 | 86 +++++++++++++++++++\n 3 files changed, 90 insertions(+)\n create mode 100644 gcc/testsuite/gfortran.dg/c_funloc_tests_10.f90\n\ndiff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc\nindex 52918961584..3945d9eaa67 100644\n--- a/gcc/fortran/trans-expr.cc\n+++ b/gcc/fortran/trans-expr.cc\n@@ -7549,6 +7549,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,\n \t\t\t\t && !e->ts.u.derived->attr.alloc_comp\n \t\t\t\t && !e->ts.u.derived->attr.pdt_type\n \t\t\t\t && !gfc_is_finalizable (e->ts.u.derived, NULL)))\n+\t\t\t && e->ts.type != BT_PROCEDURE\n \t\t\t && !sym->attr.elemental)\n \t\t\t{\n \t\t\t tree var;\ndiff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc\nindex 578851e1b0b..dbf645886f5 100644\n--- a/gcc/fortran/trans-intrinsic.cc\n+++ b/gcc/fortran/trans-intrinsic.cc\n@@ -9901,6 +9901,9 @@ conv_isocbinding_function (gfc_se *se, gfc_expr *expr)\n else if (expr->value.function.isym->id == GFC_ISYM_C_FUNLOC)\n {\n gfc_conv_expr_reference (se, arg->expr);\n+ if (arg->expr->symtree->n.sym->attr.proc_pointer\n+\t && arg->expr->symtree->n.sym->attr.dummy)\n+\tse->expr = build_fold_indirect_ref_loc (input_location, se->expr);\n /* The code below is necessary to create a reference from the calling\n \t subprogram to the argument of C_FUNLOC() in the call graph.\n \t Please see PR 117303 for more details. */\ndiff --git a/gcc/testsuite/gfortran.dg/c_funloc_tests_10.f90 b/gcc/testsuite/gfortran.dg/c_funloc_tests_10.f90\nnew file mode 100644\nindex 00000000000..f320c8e3aea\n--- /dev/null\n+++ b/gcc/testsuite/gfortran.dg/c_funloc_tests_10.f90\n@@ -0,0 +1,86 @@\n+! { dg-do run }\n+!\n+! PR fortran/124652 - passing a procedure pointer to c_funloc\n+!\n+! Contributed by Damian Rouson\n+\n+program proc_ptr_demo\n+ use iso_c_binding\n+ implicit none\n+\n+ ! Define an interface for the type of procedure we are pointing to\n+ abstract interface\n+ function compute_interface(x) result(res) bind(c)\n+ use iso_c_binding\n+ real(c_float), intent(in), value :: x\n+ real(c_float) :: res\n+ end function compute_interface\n+ end interface\n+\n+ ! Procedure pointers\n+ procedure(compute_interface), pointer :: original_ptr => null()\n+ procedure(compute_interface), pointer :: restored_ptr => null()\n+ type(c_funptr) :: c_address\n+ real(c_float) :: expect\n+\n+ expect = square_it (5.0)\n+ ! Point to our actual function\n+ original_ptr => square_it\n+ if (original_ptr (5.0) /= expect) stop 1\n+\n+ ! Convert pointers \"inline\"\n+ c_address = c_funloc (square_it)\n+ call c_f_procpointer(c_address, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 2\n+ if (restored_ptr (5.0) /= expect) stop 3\n+\n+ c_address = c_funloc (original_ptr)\n+ call c_f_procpointer (c_address, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 4\n+ if (restored_ptr (5.0) /= expect) stop 5\n+\n+ ! Call contained subroutines to perform the C conversion logic\n+ call round_trip_conversion_proc (square_it, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 6\n+ if (restored_ptr (5.0) /= expect) stop 7\n+\n+ call round_trip_conversion_proc (original_ptr, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 8\n+ if (restored_ptr (5.0) /= expect) stop 9\n+\n+ ! The following used to fail\n+ call round_trip_conversion_ptr (square_it, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 10\n+ if (restored_ptr (5.0) /= expect) stop 11\n+\n+ call round_trip_conversion_ptr (original_ptr, restored_ptr)\n+ if (.not. associated (original_ptr, restored_ptr)) stop 12\n+ if (restored_ptr (5.0) /= expect) stop 13\n+\n+contains\n+\n+ subroutine round_trip_conversion_proc (proc_in, fptr_out)\n+ procedure(compute_interface) :: proc_in\n+ procedure(compute_interface), pointer, intent(out) :: fptr_out\n+ type(c_funptr) :: c_address\n+! print *, proc_in(1.0)\n+ c_address = c_funloc (proc_in)\n+ call c_f_procpointer (c_address, fptr_out)\n+ end subroutine round_trip_conversion_proc\n+\n+ subroutine round_trip_conversion_ptr (fptr_in, fptr_out)\n+ procedure(compute_interface), pointer, intent(in) :: fptr_in\n+ procedure(compute_interface), pointer, intent(out) :: fptr_out\n+ type(c_funptr) :: c_address_s\n+! print *, fptr_in(2.0)\n+ c_address_s = c_funloc (fptr_in)\n+ call c_f_procpointer (c_address_s, fptr_out)\n+ end subroutine round_trip_conversion_ptr\n+\n+ function square_it (x) result(res) bind(c)\n+ real(c_float), intent(in), value :: x\n+ real(c_float) :: res\n+ res = x * x\n+ end function square_it\n+\n+end program\n-- \n2.51.0\n\n", "prefixes": [] }