get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2175879,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2175879/?format=api",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.0/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": "<20251219094630.3435-3-yury.khrustalev@arm.com>",
    "date": "2025-12-19T09:46:30",
    "name": "[2/2] dwarf: Save bit stride information for array type entry [PR121964]",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "73a995e92c951dfef3f9104812ed09efc882ba1b",
    "submitter": {
        "id": 88214,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/88214/?format=api",
        "name": "Yury Khrustalev",
        "email": "yury.khrustalev@arm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20251219094630.3435-3-yury.khrustalev@arm.com/mbox/",
    "series": [
        {
            "id": 485971,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/485971/?format=api",
            "date": "2025-12-19T09:46:30",
            "name": "GCC-13: Save bit stride information for svbool_t",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/485971/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2175879/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 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 dmarc=pass (p=none dis=none) header.from=arm.com",
            "sourceware.org; spf=pass smtp.mailfrom=arm.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=217.140.110.172"
        ],
        "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 4dXjRF1gW5z1y2r\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 20:48:57 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 20AE14BA2E27\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 09:48:55 +0000 (GMT)",
            "from foss.arm.com (foss.arm.com [217.140.110.172])\n by sourceware.org (Postfix) with ESMTP id EDCB94BA2E2A\n for <gcc-patches@gcc.gnu.org>; Fri, 19 Dec 2025 09:46:45 +0000 (GMT)",
            "from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])\n by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7B67E1595;\n Fri, 19 Dec 2025 01:46:38 -0800 (PST)",
            "from fdebian.localdomain (unknown [10.1.35.24])\n by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2C3783F73F;\n Fri, 19 Dec 2025 01:46:45 -0800 (PST)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 20AE14BA2E27",
            "OpenDKIM Filter v2.11.0 sourceware.org EDCB94BA2E2A"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org EDCB94BA2E2A",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org EDCB94BA2E2A",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1766137606; cv=none;\n b=G26VM0bS0cjJQ9S0G3I5S3a/jH2GCJT+cXxPK0Z74cQbS8AUKKQJ/QGKMRvOIGdAoD6d7GJRfnILyPlnxPNp096s2MQTiohdDMeLC+/DI8VRQu22fQX6ungpfffp9YlCrVUmfPXZj2EW1EsTM8vUoNfyKxyKDNGj82pIx5kkEvc=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1766137606; c=relaxed/simple;\n bh=+/bFdy8ciPZ6HZ8KsfIABVnBlg9btfsZpQYBUJrZqJ8=;\n h=From:To:Subject:Date:Message-ID:MIME-Version;\n b=s8Z3nsdFdmUl73hHkqr18X4IkyDCmmK2BhVZ8VQy0/kJRLdy1GLu+ELo7l0GwM4F40t12dP8jLSYN4EGs+lowuRpC5++KsNy69xxEZLgUb9wj4GVuzq/Z1XM3qQucfVfKaWCTuzd/1JH9CA1k8WSRNWloGGTb1ZT8aTWtgZMheY=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "From": "Yury Khrustalev <yury.khrustalev@arm.com>",
        "To": "gcc-patches@gcc.gnu.org",
        "Cc": "tamar.christina@arm.com,\n\tjakub@redhat.com",
        "Subject": "[PATCH 2/2] dwarf: Save bit stride information for array type entry\n [PR121964]",
        "Date": "Fri, 19 Dec 2025 09:46:30 +0000",
        "Message-ID": "<20251219094630.3435-3-yury.khrustalev@arm.com>",
        "X-Mailer": "git-send-email 2.47.3",
        "In-Reply-To": "<20251219094630.3435-1-yury.khrustalev@arm.com>",
        "References": "<20251219094630.3435-1-yury.khrustalev@arm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "Lack of DW_AT_bit_stride in a DW_TAG_array_type entry causes GDB to infer\nincorrect element size for vector types. The causes incorrect display of\nSVE predicate variables as well as out of bounds memory access when reading\ncontents of SVE predicates from memory in GDB.\n\nWe also locate DIE referenced by DW_AT_type and set DW_AT_bit_size 1 in it.\n\nAmended target flags and removed sme from the tests compared to the GCC 14\nversion.\n\n\tPR debug/121964\n\ngcc/\n\t* dwarf2out.cc (gen_array_type_die): Add DW_AT_bit_stride attribute\n\tfor array types based on element type bit precision for integer and\n\tboolean element types.\n\ngcc/testsuite/\n\t* g++.target/aarch64/dwarf-bit-stride-func.C: New test.\n\t* g++.target/aarch64/dwarf-bit-stride-pragma.C: New test.\n\t* g++.target/aarch64/dwarf-bit-stride-pragma-sme.C: New test.\n\t* g++.target/aarch64/sve/dwarf-bit-stride.C: New test.\n\t* gcc.target/aarch64/dwarf-bit-stride-func.c: New test.\n\t* gcc.target/aarch64/dwarf-bit-stride-pragma.c: New test.\n\t* gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c: New test.\n\t* gcc.target/aarch64/sve/dwarf-bit-stride.c: New test.\n\n(cherry picked from commit 5a8746df980e3532bf6f293f086db21758e90a9e)\n(cherry picked from commit e3ce8d6b5b0deba0b6ccaab8a79b6fd477e96986)\n(cherry picked from commit 7fe34624d1c47b56b08d4e13495cfa3a3a25cd19)\n---\n gcc/dwarf2out.cc                              | 22 +++++++++++++++++++\n .../aarch64/dwarf-bit-stride-func.C           | 16 ++++++++++++++\n .../aarch64/dwarf-bit-stride-pragma-sme.C     | 14 ++++++++++++\n .../aarch64/dwarf-bit-stride-pragma.C         | 17 ++++++++++++++\n .../g++.target/aarch64/sve/dwarf-bit-stride.C | 15 +++++++++++++\n .../aarch64/dwarf-bit-stride-func.c           | 16 ++++++++++++++\n .../aarch64/dwarf-bit-stride-pragma-sme.c     | 12 ++++++++++\n .../aarch64/dwarf-bit-stride-pragma.c         | 17 ++++++++++++++\n .../gcc.target/aarch64/sve/dwarf-bit-stride.c | 15 +++++++++++++\n 9 files changed, 144 insertions(+)\n create mode 100644 gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C\n create mode 100644 gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C\n create mode 100644 gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C\n create mode 100644 gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C\n create mode 100644 gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c",
    "diff": "diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc\nindex 5d1f75c6d0f..061f34aaab8 100644\n--- a/gcc/dwarf2out.cc\n+++ b/gcc/dwarf2out.cc\n@@ -22584,6 +22584,28 @@ gen_array_type_die (tree type, dw_die_ref context_die)\n \t\t      && TYPE_REVERSE_STORAGE_ORDER (type),\n \t\t      context_die);\n \n+  /* Add bit stride information to boolean vectors of single bits so that\n+     elements can be correctly read and displayed by a debugger.  */\n+  if (VECTOR_BOOLEAN_TYPE_P (type))\n+    {\n+      enum machine_mode tmode = TYPE_MODE_RAW (type);\n+      if (GET_MODE_CLASS (tmode) == MODE_VECTOR_BOOL)\n+\t{\n+\t  /* Calculate bit-size of element based on mnode.  */\n+\t  poly_uint16 bit_size = exact_div (GET_MODE_BITSIZE (tmode),\n+\t\t\t\t\t    GET_MODE_NUNITS (tmode));\n+\t  /* Set bit stride in the array type DIE.  */\n+\t  add_AT_unsigned (array_die, DW_AT_bit_stride, bit_size.coeffs[0]);\n+\t  /* Find DIE corresponding to the element type so that we could\n+\t     add DW_AT_bit_size to it.  */\n+\t  dw_die_ref elem_die = get_AT_ref (array_die, DW_AT_type);\n+\t  /* Avoid adding DW_AT_bit_size twice.  */\n+\t  if (get_AT (elem_die, DW_AT_bit_size) == NULL)\n+\t    add_AT_unsigned (elem_die, DW_AT_bit_size,\n+\t\t\t     TYPE_PRECISION (element_type));\n+\t}\n+    }\n+\n   add_gnat_descriptive_type_attribute (array_die, type, context_die);\n   if (TYPE_ARTIFICIAL (type))\n     add_AT_flag (array_die, DW_AT_artificial, 1);\ndiff --git a/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C\nnew file mode 100644\nindex 00000000000..1917d9116b0\n--- /dev/null\n+++ b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C\n@@ -0,0 +1,16 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"svbool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+[[gnu::target (\"arch=armv9-a+sve\")]]\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\ndiff --git a/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C\nnew file mode 100644\nindex 00000000000..058cb8e36e0\n--- /dev/null\n+++ b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C\n@@ -0,0 +1,14 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"svbool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+#pragma GCC target \"+sve2\"\n+\n+void fun ()\n+{\n+  volatile svbool_t pred;\n+}\ndiff --git a/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C\nnew file mode 100644\nindex 00000000000..64b02cc8927\n--- /dev/null\n+++ b/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C\n@@ -0,0 +1,17 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"svbool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+#pragma GCC target \"+sve\"\n+\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\ndiff --git a/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C b/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C\nnew file mode 100644\nindex 00000000000..80224d45f78\n--- /dev/null\n+++ b/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C\n@@ -0,0 +1,15 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"svbool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c\nnew file mode 100644\nindex 00000000000..654bae54e5f\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c\n@@ -0,0 +1,16 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"__SVBool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+__attribute__((target(\"arch=armv9-a+sve\")))\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c\nnew file mode 100644\nindex 00000000000..c70168e57bb\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c\n@@ -0,0 +1,12 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"__SVBool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#pragma GCC target \"+sve2\"\n+\n+void fun ()\n+{\n+  volatile __SVBool_t pred;\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c\nnew file mode 100644\nindex 00000000000..77a0d801876\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c\n@@ -0,0 +1,17 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"__SVBool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+#pragma GCC target \"+sve\"\n+\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c b/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c\nnew file mode 100644\nindex 00000000000..3f34348ff91\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c\n@@ -0,0 +1,15 @@\n+/* { dg-do compile } */\n+// { dg-options \"-g -dA\" }\n+// { dg-final { scan-assembler-times \"DW_AT_name: \\\"__SVBool_t\\\"\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_stride\" 1 } }\n+// { dg-final { scan-assembler-times \".byte\t0x1\t// DW_AT_bit_size\" 1 } }\n+\n+#include <arm_sve.h>\n+\n+void fun ()\n+{\n+  volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);\n+  volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);\n+  volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);\n+  volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);\n+}\n",
    "prefixes": [
        "2/2"
    ]
}