get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2229522,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2229522/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260428115915.3659996-1-ppalka@redhat.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.1/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
    },
    "msgid": "<20260428115915.3659996-1-ppalka@redhat.com>",
    "date": "2026-04-28T11:59:15",
    "name": "c++/modules: memfn merging wrt to obj-ness [PR125035]",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d164b2012cde24056398b63432f5a7ff2f5c0edb",
    "submitter": {
        "id": 78319,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/78319/?format=api",
        "name": "Patrick Palka",
        "email": "ppalka@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260428115915.3659996-1-ppalka@redhat.com/mbox/",
    "series": [
        {
            "id": 501833,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501833/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=501833",
            "date": "2026-04-28T11:59:15",
            "name": "c++/modules: memfn merging wrt to obj-ness [PR125035]",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501833/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2229522/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2229522/checks/",
    "tags": {},
    "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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=abFmsUhu;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::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 (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=abFmsUhu",
            "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "sourceware.org; spf=pass smtp.mailfrom=redhat.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::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 4g4fBP6LHyz1xrS\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 21:59:56 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id B4FA84B9209A\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 11:59:54 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 805C54BA23EB\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 11:59:26 +0000 (GMT)",
            "from mail-qk1-f200.google.com (mail-qk1-f200.google.com\n [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-513-3b9YdkMlMXGIG4zcfpCDXA-1; Tue, 28 Apr 2026 07:59:20 -0400",
            "by mail-qk1-f200.google.com with SMTP id\n af79cd13be357-8eec753a7bdso197270285a.3\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 04:59:19 -0700 (PDT)",
            "from idea ([2600:4040:aa66:bf00:9e8e:99ff:fed1:71f])\n by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8f7c49c4953sm164457585a.3.2026.04.28.04.59.16\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 28 Apr 2026 04:59:17 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org B4FA84B9209A",
            "OpenDKIM Filter v2.11.0 sourceware.org 805C54BA23EB"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 805C54BA23EB",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 805C54BA23EB",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777377566; cv=none;\n b=RJ7JAsK21cn0ckn93ajUC+Vn9SNuzJ89G1Lz8CfpUp1JHHJdgg8lBMCK3MtLKoQ12ST0IUTVLdKowNkKpC64yuPPhXAuSEXjQB6JscMsqP+873c3dUwd3nMDkRbMASR01Mc4yORNs73PCeVY6KVD+9/u/9T2/tyvL+TNJ3JMnAw=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777377566; c=relaxed/simple;\n bh=D3eGBJK/FKNSn3DlXXWbO1SZRPF/SS7qGDCIJeU2ii0=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=taUvAgZT5OsLddZIqPoSP6Xflx3lcNkP7rZ0xyfSZwzhpD98dl/1VhLYh9vOtV/zKd236zjEAn6Qw7r5fRbM0snMfsQmg22IHZf4/R+aweZnLIduJkPEMbIdjNxAJvj1b0Zh6q3QIpN0vTRTeG5wh0v5TlYtYiPa9j4hzF+jWZo=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777377566;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=2UcHXGLBR7wIEGy5mo6w0Sy5BMbHEMhkB1lwAeaG5Ro=;\n b=abFmsUhuIZU4UJ+A6umWS/+4X543Fl1Adxbb8DBVPr5WrgdfYMGBhnRTalQPVwDAZ7UcjK\n tIdGHiV+EYWZcbmV5kCJswGM6lau49ol50EqWkFLDhDpNeL4OXoPGLV3LPDa7AT1oAFBQv\n CMofDKP6SpNOfNo30yUee5e0i/Z9bCw=",
        "X-MC-Unique": "3b9YdkMlMXGIG4zcfpCDXA-1",
        "X-Mimecast-MFC-AGG-ID": "3b9YdkMlMXGIG4zcfpCDXA_1777377559",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777377559; x=1777982359;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=2UcHXGLBR7wIEGy5mo6w0Sy5BMbHEMhkB1lwAeaG5Ro=;\n b=RFsisQzZDFSZPj6XUyOfZD1bDve5h7oUng5OMVVipQ8h/zKsswy+HFL8bAEhMgttlh\n Rl3Cj7mS+AtWi7ifVMx58p/ViCnZg0syhK5rxLD4OS0VCKWbhv3j6SBp2eAPUMKWdWUH\n MtO0ralRdJp9DWvDhpA0dB1qmfI5Kt2NZ4XTLtzO0d1G6F+nOJMN7/O7Rqs7n5DYd08b\n 4jgr8g06yDYDW+Vzoh8+CjthL4XIgsdtwGOUz3MLtmmkbsdIC63EHzq8w3QZ0M3zEIPY\n xi73OrJxU7NUUoPEwUHY9YQNW18FPXZ0+/FhlIheaSdFHZQtsGg7ZuJrhcZhBDWrxsg0\n eq+Q==",
        "X-Gm-Message-State": "AOJu0YybbAUWSJxQdEOyf7t5dR8BeiWGViaPcY9Tcxv6c6TC+0AwKVjs\n N5ANSgTWEc7eQnO7LE1gV6/ADDL6z83z2majaki5WiRdswwfdc9BFDpIGzec18dDyVefU25sZcB\n eEQmNC7a+usAkW4TIvzpwNEUJsrksdhsrlmLwXul2T7yuz1uXr0dmVJ1yBp7j0+1mB4wKgzhriL\n dBm7E6kEB8riIirRrHAueL/9+7261Q5rfNJXvFYNx5",
        "X-Gm-Gg": "AeBDiesNnCjlxg34EqweZk8Bzbxk0poor2UxpAZtcKqyTYxqNq2nnxuNVpcJ0iTmYGP\n cHNtiI7tcWxXqAV3SFPYkIMKG7tklWSYH65d5w0teg/OtNx4Yqsipb+XKflwpoSTQ8Inn19SZ8d\n 1YLA2Bf4ZYT7jeUxV1p7y9K9F6j6hivBvZ+veCZ1Tk4E2VvoWMrjP0j8rjFyKv26/HO1/c6eHyb\n V2fj2X08yEgvJs8ZgRSJs0NQYiILe1fIJ0n3iq6VjkSIUCfOFxO6o9UtR6lnze4OwDjclypUKGG\n 3mlj8coj6IM1/2eTwdLcbtTKSzS6il2GiOz1M8XYlWuVO+wjP3r4Td6Z0W8suPYWcETooKB1CPG\n dMKYnNV2worrfBrd3qArF9kM=",
        "X-Received": [
            "by 2002:a05:620a:450a:b0:8ea:c7a8:5065 with SMTP id\n af79cd13be357-8f7b2123053mr286898985a.2.1777377558522;\n Tue, 28 Apr 2026 04:59:18 -0700 (PDT)",
            "by 2002:a05:620a:450a:b0:8ea:c7a8:5065 with SMTP id\n af79cd13be357-8f7b2123053mr286896085a.2.1777377557942;\n Tue, 28 Apr 2026 04:59:17 -0700 (PDT)"
        ],
        "From": "Patrick Palka <ppalka@redhat.com>",
        "To": "gcc-patches@gcc.gnu.org",
        "Cc": "jason@redhat.com,\n\tPatrick Palka <ppalka@redhat.com>",
        "Subject": "[PATCH] c++/modules: memfn merging wrt to obj-ness [PR125035]",
        "Date": "Tue, 28 Apr 2026 07:59:15 -0400",
        "Message-ID": "<20260428115915.3659996-1-ppalka@redhat.com>",
        "X-Mailer": "git-send-email 2.54.0.rc1.54.g60f07c4f5c",
        "MIME-Version": "1.0",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "kmcWI4SHquSO5SaKrTgXAEiYckanMe3yjKrY3PYv7Es_1777377559",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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": "Tested on x86_64-pc-linux-gnu, does this look OK for trunk/16.2?\n\n-- >8 --\n\nHere we ICE from during declaration merging because when streaming in\nthe static A::f, we incorrectly deduplicate it with the in-TU iobj A::f\ninstead of the in-TU static A::f because the merge key doesn't have enough\ninformation to discern between the two otherwise equivalent overloads.\n\nThis patch adds iobj_p and xobj_p bits to merge_key since they are\napparently needed to properly deduplicate such overload sets.\n\n\tPR c++/125035\n\ngcc/cp/ChangeLog:\n\n\t* module.cc (merge_key): Add iobj_p and xobj_p bits.\n\t(trees_out::key_mergeable) <case MK_named>: Set and stream\n\tmerge_key's iobj_p and xobj_p bits.\n\t(check_mergeable_decl) <case FUNCTION_DECL>: Compare merge_key's\n\tiobj_p and xobj_p bits with that of the given function.\n\t(trees_in::key_mergeable): Stream merge_key's iobj_p and xobj_p\n\tbits.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.dg/modules/merge-22.h: New test.\n\t* g++.dg/modules/merge-22_a.H: New test.\n\t* g++.dg/modules/merge-22_b.C: New test.\n---\n gcc/cp/module.cc                          | 22 ++++++++++++++++------\n gcc/testsuite/g++.dg/modules/merge-22.h   | 20 ++++++++++++++++++++\n gcc/testsuite/g++.dg/modules/merge-22_a.H |  4 ++++\n gcc/testsuite/g++.dg/modules/merge-22_b.C |  5 +++++\n 4 files changed, 45 insertions(+), 6 deletions(-)\n create mode 100644 gcc/testsuite/g++.dg/modules/merge-22.h\n create mode 100644 gcc/testsuite/g++.dg/modules/merge-22_a.H\n create mode 100644 gcc/testsuite/g++.dg/modules/merge-22_b.C",
    "diff": "diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc\nindex bd4b919133bc..dd58903fd4a1 100644\n--- a/gcc/cp/module.cc\n+++ b/gcc/cp/module.cc\n@@ -2970,6 +2970,8 @@ static char const *const merge_kind_name[MK_hwm] =\n struct merge_key {\n   cp_ref_qualifier ref_q : 2;\n   unsigned coro_disc : 2;  /* Discriminator for coroutine transforms.  */\n+  unsigned iobj_p : 1;\n+  unsigned xobj_p : 1;\n   unsigned index;\n \n   tree ret;  /* Return type, if appropriate.  */\n@@ -2978,7 +2980,7 @@ struct merge_key {\n   tree constraints;  /* Constraints.  */\n \n   merge_key ()\n-    :ref_q (REF_QUAL_NONE), coro_disc (0), index (0),\n+    :ref_q (REF_QUAL_NONE), coro_disc (0), iobj_p (0), xobj_p (0), index (0),\n      ret (NULL_TREE), args (NULL_TREE),\n      constraints (NULL_TREE)\n   {\n@@ -11898,6 +11900,8 @@ trees_out::key_mergeable (int tag, merge_kind mk, tree decl, tree inner,\n \n \t      key.ref_q = type_memfn_rqual (fn_type);\n \t      key.coro_disc = get_coroutine_discriminator (inner);\n+\t      key.iobj_p = DECL_IOBJ_MEMBER_FUNCTION_P (inner);\n+\t      key.xobj_p = DECL_XOBJ_MEMBER_FUNCTION_P (inner);\n \t      key.args = TYPE_ARG_TYPES (fn_type);\n \n \t      if (tree reqs = get_constraints (inner))\n@@ -12035,11 +12039,13 @@ trees_out::key_mergeable (int tag, merge_kind mk, tree decl, tree inner,\n       if (streaming_p ())\n \t{\n \t  /* Check we have enough bits for the index.  */\n-\t  gcc_checking_assert (key.index < (1u << (sizeof (unsigned) * 8 - 4)));\n+\t  gcc_checking_assert (key.index < (1u << (sizeof (unsigned) * 8 - 6)));\n \n \t  unsigned code = ((key.ref_q << 0)\n \t\t\t   | (key.coro_disc << 2)\n-\t\t\t   | (key.index << 4));\n+\t\t\t   | (key.iobj_p << 4)\n+\t\t\t   | (key.xobj_p << 5)\n+\t\t\t   | (key.index << 6));\n \t  u (code);\n \t}\n \n@@ -12115,8 +12121,10 @@ check_mergeable_decl (merge_kind mk, tree decl, tree ovl, merge_key const &key)\n \n \tcase FUNCTION_DECL:\n \t  if (tree m_type = TREE_TYPE (m_inner))\n-\t    if ((!key.ret\n-\t\t || same_type_p (key.ret, fndecl_declared_return_type (m_inner)))\n+\t    if (key.iobj_p == DECL_IOBJ_MEMBER_FUNCTION_P (m_inner)\n+\t\t&& key.xobj_p == DECL_XOBJ_MEMBER_FUNCTION_P (m_inner)\n+\t\t&& (!key.ret\n+\t\t    || same_type_p (key.ret, fndecl_declared_return_type (m_inner)))\n \t\t&& type_memfn_rqual (m_type) == key.ref_q\n \t\t&& compparms (key.args, TYPE_ARG_TYPES (m_type))\n \t\t&& get_coroutine_discriminator (m_inner) == key.coro_disc\n@@ -12243,7 +12251,9 @@ trees_in::key_mergeable (int tag, merge_kind mk, tree decl, tree inner,\n       unsigned code = u ();\n       key.ref_q = cp_ref_qualifier ((code >> 0) & 3);\n       key.coro_disc = (code >> 2) & 3;\n-      key.index = code >> 4;\n+      key.iobj_p = (code >> 4) & 1;\n+      key.xobj_p = (code >> 5) & 1;\n+      key.index = code >> 6;\n \n       if (mk == MK_enum)\n \tkey.ret = tree_node ();\ndiff --git a/gcc/testsuite/g++.dg/modules/merge-22.h b/gcc/testsuite/g++.dg/modules/merge-22.h\nnew file mode 100644\nindex 000000000000..3039f14d350a\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/modules/merge-22.h\n@@ -0,0 +1,20 @@\n+struct A {\n+  void f(int);\n+  static void f(A*, int);\n+\n+#if __cpp_explicit_this_parameter\n+  void g(int) const;\n+  void g(this const A*, int);\n+#endif\n+};\n+\n+template<class T>\n+struct B {\n+  void f(int);\n+  static void f(B*, int);\n+\n+#if __cpp_explicit_this_parameter\n+  void g(int) const;\n+  void g(this const B*, int);\n+#endif\n+};\ndiff --git a/gcc/testsuite/g++.dg/modules/merge-22_a.H b/gcc/testsuite/g++.dg/modules/merge-22_a.H\nnew file mode 100644\nindex 000000000000..11e21008efcb\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/modules/merge-22_a.H\n@@ -0,0 +1,4 @@\n+// PR c++/125035\n+// { dg-additional-options \"-fmodule-header\" }\n+\n+#include \"merge-22.h\"\ndiff --git a/gcc/testsuite/g++.dg/modules/merge-22_b.C b/gcc/testsuite/g++.dg/modules/merge-22_b.C\nnew file mode 100644\nindex 000000000000..839cf62c9202\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/modules/merge-22_b.C\n@@ -0,0 +1,5 @@\n+// PR c++/125035\n+// { dg-additional-options \"-fmodules -fno-module-lazy\" }\n+\n+#include \"merge-22.h\"\n+import \"merge-22_a.H\";\n",
    "prefixes": []
}