get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2218758/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "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 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",
        "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": []
}