get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2225965,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2225965/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260421215426.938092-1-ibuclaw@gdcproject.org/",
    "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": "<20260421215426.938092-1-ibuclaw@gdcproject.org>",
    "date": "2026-04-21T21:54:26",
    "name": "[committed] d: Merge upstream dmd, druntime d1fbbb1a2f",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "fe6155770882e418fa3c0b5085c66b76c91b1dbe",
    "submitter": {
        "id": 46728,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/46728/?format=api",
        "name": "Iain Buclaw",
        "email": "ibuclaw@gdcproject.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260421215426.938092-1-ibuclaw@gdcproject.org/mbox/",
    "series": [
        {
            "id": 500899,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/500899/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=500899",
            "date": "2026-04-21T21:54:26",
            "name": "[committed] d: Merge upstream dmd, druntime d1fbbb1a2f",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/500899/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2225965/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2225965/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 (2048-bit key;\n unprotected) header.d=gdcproject.org header.i=@gdcproject.org\n header.a=rsa-sha256 header.s=MBO0001 header.b=NskdYkU/;\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 (2048-bit key,\n unprotected) header.d=gdcproject.org header.i=@gdcproject.org\n header.a=rsa-sha256 header.s=MBO0001 header.b=NskdYkU/",
            "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=gdcproject.org",
            "sourceware.org; spf=pass smtp.mailfrom=gdcproject.org",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=80.241.56.172"
        ],
        "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 4g0bkR3CF7z1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 07:55:10 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1DA694BA9024\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 21:55:08 +0000 (GMT)",
            "from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172])\n by sourceware.org (Postfix) with ESMTPS id 100464BA23FC\n for <gcc-patches@gcc.gnu.org>; Tue, 21 Apr 2026 21:54:34 +0000 (GMT)",
            "from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4g0bjf4VnDz9t9S;\n Tue, 21 Apr 2026 23:54:30 +0200 (CEST)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 1DA694BA9024",
            "OpenDKIM Filter v2.11.0 sourceware.org 100464BA23FC"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 100464BA23FC",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 100464BA23FC",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776808474; cv=none;\n b=ETSyMWCBeAFAMX6JEQuv/iSrnFkNdTwsKooSDYp7Kipz3bWgHdrB8dV/UQzwpGppY/98An1Xbt9JmnxuNJ8FZM7zEkQJ3HnSLxTEEBF9Bkyoy3Sv32kvzrvkPGRdhwdJZuZ0OQESg8Xy96D9ox/pIvYJUcvUOc9c+2TcTG2CqyU=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776808474; c=relaxed/simple;\n bh=dGWkz3JN5kBO1iD06p/WsT+lZvDw/TV2V5tie8CrXu4=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=Z1bw2LkYthj0Ly24YywwQaqwZ0+BT/ddeCY1WcQgyXSNlhXI8RMl0sJhSFfvTOzhGtDBt19yFd6BomEOh/fnd0CETPA6wHO3IOdFYzkpTQXZb5CAdbPINppVpGEOeW1Gt/fRb6QJYKXkRIx3zq0xQcTXL4vaItF3LOe5ox1t0x0=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gdcproject.org;\n s=MBO0001; t=1776808470;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding;\n bh=MnZ7QRz5L1ya1RTXoGZm4yfe8XRS4gLzgO2rYj65/N4=;\n b=NskdYkU/tcDtfpBdj2h7yWxzAopwMvcszekzrPk/omWU7pSZIqR3aax36BXFF/DHUV/QxW\n SsZUOpWwGlGWFT/6+lCCFgB5/pKL/WXeQJ3ZaeyFEBi2yrxlCEcoIJwovvsjnaGQsumuyI\n W695EzxRqPqDshKR6IawIDmle9tT/XfENT/rweON59DcTDJh2mVGs+T7nSqNGSxY6FKDHa\n Jwqzbq8sXI8oq7iYlmxM+VK0L6Ffrxi+AzEUkxxWponrNkcotqkfV/FiuKjqf33NM/D5mg\n HmdbIqkZwJ7fBw/BozgfsVKRle/7zkhrDBERVlZs223h/rT4DPOLdB90JhsOLg==",
        "From": "Iain Buclaw <ibuclaw@gdcproject.org>",
        "To": "gcc-patches@gcc.gnu.org",
        "Cc": "Iain Buclaw <ibuclaw@gdcproject.org>",
        "Subject": "[committed][PATCH] d: Merge upstream dmd, druntime d1fbbb1a2f",
        "Date": "Tue, 21 Apr 2026 23:54:26 +0200",
        "Message-ID": "<20260421215426.938092-1-ibuclaw@gdcproject.org>",
        "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": "Hi,\n\nThis patch merges the D front-end and D runtime library with upstream\ndmd d1fbbb1a2f.\n\nImports latest bug fixes from the v2.113.0 release branch.\n\nBootstrapped and regtested on x86_64-linux-gnu, committed to mainline.\n\nRegards,\nIain.\n\n---\ngcc/d/ChangeLog:\n\n\t* dmd/MERGE: Merge upstream dmd d1fbbb1a2f.\n\t* expr.cc (ExprVisitor::visit (StringExp *)): Don't generate a\n\tSTRING_CST for a mutable array type.\n\nlibphobos/ChangeLog:\n\n\t* libdruntime/MERGE: Merge upstream druntime d1fbbb1a2f.\n---\n gcc/d/dmd/MERGE                               |   2 +-\n gcc/d/dmd/dinterpret.d                        |   4 +-\n gcc/d/dmd/expressionsem.d                     |   2 -\n gcc/d/dmd/hdrgen.d                            |  13 +-\n gcc/d/expr.cc                                 |  48 ++++++--\n gcc/testsuite/gdc.test/compilable/diag20916.d |   3 +\n gcc/testsuite/gdc.test/compilable/test11720.d |  49 ++++++++\n gcc/testsuite/gdc.test/compilable/test21039.d |   5 +\n gcc/testsuite/gdc.test/compilable/test21073.d |  16 +++\n gcc/testsuite/gdc.test/compilable/test21543.d | 116 ++++++++++++++++++\n gcc/testsuite/gdc.test/compilable/test21637.d |  26 ++++\n gcc/testsuite/gdc.test/compilable/test21707.d |  51 ++++++++\n gcc/testsuite/gdc.test/compilable/test23857.d |  15 +++\n gcc/testsuite/gdc.test/compilable/test24055.d |  15 +++\n gcc/testsuite/gdc.test/compilable/test24061.d |  15 +++\n gcc/testsuite/gdc.test/compilable/test5973.d  |  41 +++++++\n gcc/testsuite/gdc.test/compilable/test6777.d  |  11 ++\n .../gdc.test/fail_compilation/enum_member.d   |  23 ++++\n .../gdc.test/fail_compilation/fail5851.d      |  16 +++\n .../gdc.test/fail_compilation/finalswitch.d   |  96 +++++++++++++++\n .../gdc.test/fail_compilation/mixinexpr.d     |  11 ++\n .../named_arguments_struct_literal.d          |  15 +++\n .../gdc.test/fail_compilation/test23145.d     |  49 ++++++++\n .../gdc.test/fail_compilation/test8662.d      |  38 ++++++\n gcc/testsuite/gdc.test/runnable/test22659.d   |  16 +++\n gcc/testsuite/gdc.test/runnable/testconst.d   |  34 +++++\n libphobos/libdruntime/MERGE                   |   2 +-\n .../core/internal/array/capacity.d            |  10 +-\n .../libdruntime/core/sys/posix/sys/stat.d     |   8 +-\n 29 files changed, 723 insertions(+), 27 deletions(-)\n create mode 100644 gcc/testsuite/gdc.test/compilable/test11720.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test21039.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test21073.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test21543.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test21637.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test21707.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test23857.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test24055.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test24061.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test5973.d\n create mode 100644 gcc/testsuite/gdc.test/compilable/test6777.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/enum_member.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/fail5851.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/finalswitch.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/mixinexpr.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/named_arguments_struct_literal.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/test23145.d\n create mode 100644 gcc/testsuite/gdc.test/fail_compilation/test8662.d\n create mode 100644 gcc/testsuite/gdc.test/runnable/test22659.d",
    "diff": "diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE\nindex eac1d04c8c6..5cfaee4f823 100644\n--- a/gcc/d/dmd/MERGE\n+++ b/gcc/d/dmd/MERGE\n@@ -1,4 +1,4 @@\n-e145b9124523d1fecd55e0702003ef86947eb745\n+d1fbbb1a2ff801cd414c7e18fefe6351e3b1d21c\n \n The first line of this file holds the git revision number of the last\n merge done from the dlang/dmd repository.\ndiff --git a/gcc/d/dmd/dinterpret.d b/gcc/d/dmd/dinterpret.d\nindex fb07953ace4..85665c5776e 100644\n--- a/gcc/d/dmd/dinterpret.d\n+++ b/gcc/d/dmd/dinterpret.d\n@@ -2547,7 +2547,9 @@ public:\n             }\n         }\n \n-        if (expsx !is e.elements)\n+        // Only create new ArrayLiteralExp if needed (don't forget to check basis as well!)\n+        // https://github.com/dlang/dmd/issues/21039\n+        if (expsx !is e.elements || basis !is e.basis)\n         {\n             // todo: all tuple expansions should go in semantic phase.\n             expandTuples(expsx);\ndiff --git a/gcc/d/dmd/expressionsem.d b/gcc/d/dmd/expressionsem.d\nindex 840dc0fd957..5a2fd17fdfc 100644\n--- a/gcc/d/dmd/expressionsem.d\n+++ b/gcc/d/dmd/expressionsem.d\n@@ -12632,8 +12632,6 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor\n         }\n         else if (t1.ty == Tsarray)\n         {\n-            // SliceExp cannot have static array type without context inference.\n-            assert(exp.e1.op != EXP.slice);\n             Expression e1x = exp.e1;\n             Expression e2x = exp.e2;\n \ndiff --git a/gcc/d/dmd/hdrgen.d b/gcc/d/dmd/hdrgen.d\nindex 71e94c2a90c..24ed5f3da70 100644\n--- a/gcc/d/dmd/hdrgen.d\n+++ b/gcc/d/dmd/hdrgen.d\n@@ -1752,17 +1752,16 @@ void toCBuffer(Dsymbol s, ref OutBuffer buf, ref HdrGenState hgs)\n             /*\n                 https://issues.dlang.org/show_bug.cgi?id=23223\n                 https://issues.dlang.org/show_bug.cgi?id=23222\n-                This special case (initially just for modules) avoids some segfaults\n-                and nicer -vcg-ast output.\n+                https://github.com/dlang/dmd/issues/21707\n+                For named symbols (modules, functions, templates, aggregates),\n+                print just the name to avoid segfaults, infinite recursion,\n+                and for nicer -vcg-ast output. Anonymous symbols (function\n+                literals) are printed in full.\n             */\n-            if (d.aliassym.isModule())\n-            {\n+            if (!d.aliassym.isFuncLiteralDeclaration() && d.aliassym.ident)\n                 buf.put(d.aliassym.ident.toString());\n-            }\n             else\n-            {\n                 toCBuffer(d.aliassym, buf, hgs);\n-            }\n         }\n         else if (d.type.ty == Tfunction)\n         {\ndiff --git a/gcc/d/expr.cc b/gcc/d/expr.cc\nindex 3e98fc9c51c..b24c42d9f9c 100644\n--- a/gcc/d/expr.cc\n+++ b/gcc/d/expr.cc\n@@ -2368,25 +2368,53 @@ public:\n       }\n     else\n       {\n-\t/* Copy the string contents to a null terminated STRING_CST.  */\n \tdinteger_t length = (e->len * e->sz);\n-\tchar *string = XALLOCAVEC (char, length + e->sz);\n-\tmemset (string, 0, length + e->sz);\n-\tif (length > 0)\n-\t  memcpy (string, e->string, length);\n+\ttree value;\n+\ttree value_type;\n \n-\t/* String value and type includes the null terminator.  */\n-\ttree value = build_string (length + e->sz, string);\n \tif (e->sz <= 4)\n-\t  TREE_TYPE (value) = make_array_type (tb->nextOf (), length + 1);\n+\t  value_type = make_array_type (tb->nextOf (), length + 1);\n \telse\n \t  {\n \t    /* Hexadecimal literal strings with an 8-byte character type are\n \t       just an alternative way to store an array of `ulong'.\n \t       Treat it as if it were a `uint[]' array instead.  */\n \t    dinteger_t resize = e->sz / 4;\n-\t    TREE_TYPE (value) = make_array_type (Type::tuns32,\n-\t\t\t\t\t\t (length * resize) + resize);\n+\t    value_type = make_array_type (Type::tuns32,\n+\t\t\t\t\t  (length * resize) + resize);\n+\t  }\n+\n+\tif (tb->nextOf ()->isMutable ())\n+\t  {\n+\t    /* From CTFE, a mutable `char[]' might be initialized with a\n+\t       StringExp, don't use STRING_CST then.  */\n+\t    vec <constructor_elt, va_gc> *elms = NULL;\n+\t    vec_safe_reserve (elms, e->len);\n+\t    tree etype = TREE_TYPE (value_type);\n+\n+\t    for (size_t i = 0; i < e->len; i++)\n+\t      {\n+\t\ttree value = build_integer_cst (e->getIndex (i), etype);\n+\t\tCONSTRUCTOR_APPEND_ELT (elms, size_int (i), value);\n+\t      }\n+\n+\t    value = build_padded_constructor (value_type, elms);\n+\t    value = build_artificial_decl (TREE_TYPE (value), value, \"A\");\n+\n+\t    d_pushdecl (value);\n+\t    rest_of_decl_compilation (value, 1, 0);\n+\t  }\n+\telse\n+\t  {\n+\t    /* Copy the string contents to a null terminated STRING_CST.  */\n+\t    char *string = XALLOCAVEC (char, length + e->sz);\n+\t    memset (string, 0, length + e->sz);\n+\t    if (length > 0)\n+\t      memcpy (string, e->string, length);\n+\n+\t    /* String value and type includes the null terminator.  */\n+\t    value = build_string (length + e->sz, string);\n+\t    TREE_TYPE (value) = value_type;\n \t  }\n \n \tvalue = build_address (value);\ndiff --git a/gcc/testsuite/gdc.test/compilable/diag20916.d b/gcc/testsuite/gdc.test/compilable/diag20916.d\nindex aa30c94fcf3..a8321320076 100644\n--- a/gcc/testsuite/gdc.test/compilable/diag20916.d\n+++ b/gcc/testsuite/gdc.test/compilable/diag20916.d\n@@ -6,12 +6,15 @@ compilable/diag20916.d(32): Deprecation: `alias fb this` is deprecated\n compilable/diag20916.d(37):        instantiated from here: `jump2!(Foo)`\n compilable/diag20916.d(42):        instantiated from here: `jump1!(Foo)`\n compilable/diag20916.d(32): Deprecation: function `diag20916.FooBar.toString` is deprecated\n+compilable/diag20916.d(3):        `toString` is declared here\n compilable/diag20916.d(37):        instantiated from here: `jump2!(Foo)`\n compilable/diag20916.d(42):        instantiated from here: `jump1!(Foo)`\n compilable/diag20916.d(32): Deprecation: template `diag20916.Bar.toString()() const` is deprecated\n+compilable/diag20916.d(15):        `toString()() const` is declared here\n compilable/diag20916.d(37):        instantiated from here: `jump2!(Bar)`\n compilable/diag20916.d(43):        instantiated from here: `jump1!(Bar)`\n compilable/diag20916.d(21): Deprecation: variable `diag20916.Something.something` is deprecated\n+compilable/diag20916.d(28):        `something` is declared here\n compilable/diag20916.d(24):        instantiated from here: `nestedCheck!(Something)`\n ---\n  */\ndiff --git a/gcc/testsuite/gdc.test/compilable/test11720.d b/gcc/testsuite/gdc.test/compilable/test11720.d\nnew file mode 100644\nindex 00000000000..06ea6b2d7b2\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test11720.d\n@@ -0,0 +1,49 @@\n+// https://issues.dlang.org/show_bug.cgi?id=11720\n+\n+void test11720()\n+{\n+    foo();\n+    bar();\n+}\n+\n+alias TypeTuple(T...) = T;\n+\n+void foo()()\n+{\n+    foreach (T; TypeTuple!(int, double))\n+    {\n+        static temp = T.stringof;\n+    }\n+}\n+\n+void bar()\n+{\n+    foreach (T; TypeTuple!(int, double))\n+    {\n+        static temp = T.stringof;\n+    }\n+}\n+\n+/*********************************************/\n+\n+// https://issues.dlang.org/show_bug.cgi?id=18266\n+\n+void test18266()\n+{\n+    foreach (i; 0 .. 10)\n+    {\n+        struct S\n+        {\n+            int x;\n+        }\n+        auto s = S(i);\n+    }\n+    foreach (i; 11 .. 20)\n+    {\n+        struct S\n+        {\n+            int y;\n+        }\n+        auto s = S(i);\n+    }\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test21039.d b/gcc/testsuite/gdc.test/compilable/test21039.d\nnew file mode 100644\nindex 00000000000..adc6110c751\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test21039.d\n@@ -0,0 +1,5 @@\n+// https://github.com/dlang/dmd/issues/21039\n+// Zero-length static array with scalar initializer caused ICE\n+\n+struct A { const(char)[0] b = 0; }\n+struct B { int[0] x = 5 + 5; }\ndiff --git a/gcc/testsuite/gdc.test/compilable/test21073.d b/gcc/testsuite/gdc.test/compilable/test21073.d\nnew file mode 100644\nindex 00000000000..47d788128b3\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test21073.d\n@@ -0,0 +1,16 @@\n+// https://issues.dlang.org/show_bug.cgi?id=21073\n+\n+class C\n+{\n+    auto internal() const\n+    {\n+        return 5;\n+    }\n+    alias internal this;\n+}\n+\n+void main() pure\n+{\n+    const c = new C;\n+    auto r = cast(C)c;\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test21543.d b/gcc/testsuite/gdc.test/compilable/test21543.d\nnew file mode 100644\nindex 00000000000..4914264aaf9\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test21543.d\n@@ -0,0 +1,116 @@\n+// https://issues.dlang.org/show_bug.cgi?id=21543\n+\n+class B\n+{\n+    Nullable!B data;\n+    alias data this;\n+}\n+\n+void test1()\n+{\n+    B b;\n+    Nullable!B n;\n+}\n+\n+struct Nullable(T)\n+{\n+    T payload;\n+\n+    void opAssign()(T)\n+    {\n+        move(payload);\n+    }\n+\n+    inout(T) get_() inout\n+    {\n+        return payload;\n+    }\n+\n+    alias get_ this;\n+}\n+\n+// another version with chain of 3 alias this\n+\n+struct C\n+{\n+    Nullable2 data;\n+    alias data this;\n+}\n+\n+void test2()\n+{\n+    C c;\n+    Nullable2 n2 = &c;\n+    Nullable3 n3 = &c;\n+\n+    // these are to check a sane -vcg-ast output\n+    fn1(c);\n+    fn1(n2);\n+    fn1(n3);\n+    fn2(c);\n+    fn2(n2);\n+    fn2(n3);\n+    fn3(c);\n+    fn3(n2);\n+    fn3(n3);\n+}\n+\n+void fn1(C x) {}\n+\n+void fn2(Nullable2 x) {}\n+\n+void fn3(Nullable3 x) {}\n+\n+struct Nullable2\n+{\n+    Nullable3 payload;\n+\n+    this(C* c)\n+    {\n+        payload = Nullable3(c);\n+    }\n+\n+    void opAssign()(Nullable3)\n+    {\n+        move(payload);\n+    }\n+\n+    inout(Nullable3) get_() inout\n+    {\n+        return payload;\n+    }\n+\n+    alias get_ this;\n+}\n+\n+struct Nullable3\n+{\n+    C* payload;\n+\n+    this(C* c)\n+    {\n+        payload = c;\n+    }\n+\n+    void opAssign()(C)\n+    {\n+        move(payload);\n+    }\n+\n+    inout(C) get_() inout\n+    {\n+        return *payload;\n+    }\n+\n+    alias get_ this;\n+}\n+\n+T move(T)(ref T source)\n+{\n+    return source;\n+}\n+\n+T move(T)(T source)\n+{\n+    return source;\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test21637.d b/gcc/testsuite/gdc.test/compilable/test21637.d\nnew file mode 100644\nindex 00000000000..53c0b9abe59\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test21637.d\n@@ -0,0 +1,26 @@\n+// https://github.com/dlang/dmd/issues/21637\n+// ICE in tuple comparison with conditional expression\n+\n+struct Date {\n+    short _year  = 1;\n+    ubyte _month;\n+    ubyte _day   = 1;\n+\n+    this(int day) { }\n+}\n+\n+struct Nullable(T){\n+    T t;\n+    short b;\n+}\n+\n+struct DateRange {\n+    Nullable!Date end;\n+}\n+\n+void main()\n+{\n+    auto thing = DateRange(\n+      (Date(1).tupleof == Date(2).tupleof) ? Nullable!Date() : Nullable!Date()\n+    );\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test21707.d b/gcc/testsuite/gdc.test/compilable/test21707.d\nnew file mode 100644\nindex 00000000000..c6c29e98032\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test21707.d\n@@ -0,0 +1,51 @@\n+// https://github.com/dlang/dmd/issues/21707\n+// Segfault with -vcg-ast and foreach on a tuple sequence\n+\n+/+\n+REQUIRED_ARGS: -vcg-ast -o-\n+OUTPUT_FILES: compilable/test21707.d.cg\n+TEST_OUTPUT:\n+---\n+foobar(T)\n+test()\n+=== compilable/test21707.d.cg\n+import object;\n+template TypeTuple(T...)\n+{\n+\talias TypeTuple = T;\n+}\n+enum foobar(T) = 2;\n+void test()\n+{\n+\t/*unrolled*/ {\n+\t\t{\n+\t\t\talias sym = foobar;\n+\t\t}\n+\t}\n+\t/*unrolled*/ {\n+\t\t{\n+\t\t\talias sym = test;\n+\t\t}\n+\t}\n+}\n+---\n++/\n+\n+template TypeTuple(T...)\n+{\n+    alias TypeTuple = T;\n+}\n+\n+template foobar(T)\n+{\n+    enum foobar = 2;\n+}\n+\n+void test()\n+{\n+    foreach (sym; TypeTuple!(foobar))\n+        pragma(msg, sym.stringof);\n+\n+    foreach (sym; TypeTuple!(test))\n+        pragma(msg, sym.stringof);\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test23857.d b/gcc/testsuite/gdc.test/compilable/test23857.d\nnew file mode 100644\nindex 00000000000..d1f6c033440\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test23857.d\n@@ -0,0 +1,15 @@\n+/* REQUIRED_ARGS: -O -inline -release\n+ */\n+\n+// https://issues.dlang.org/show_bug.cgi?id=23857\n+\n+int mars(int[] a, int u)\n+{\n+    return (a.ptr[u] < 0) ? u : (a.ptr[u] = mars(a, a.ptr[u]));\n+}\n+\n+void venus()\n+{\n+    mars([], 0);\n+    mars([], 0);\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test24055.d b/gcc/testsuite/gdc.test/compilable/test24055.d\nnew file mode 100644\nindex 00000000000..551a2b8f0d3\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test24055.d\n@@ -0,0 +1,15 @@\n+// REQUIRED_ARGS: -o-\n+// https://issues.dlang.org/show_bug.cgi?id=24055\n+// is(x == __parameters) does not work on function pointer/delegate types\n+\n+void function(int) fp;\n+void delegate(int) dg;\n+\n+static assert(is(typeof(fp) == __parameters));\n+static assert(is(typeof(*fp) == __parameters));\n+static assert(is(typeof(dg) == __parameters));\n+\n+static if(is(typeof(dg) FP == delegate))\n+    static assert(is(FP == __parameters)); // OK\n+else\n+    static assert(0);\ndiff --git a/gcc/testsuite/gdc.test/compilable/test24061.d b/gcc/testsuite/gdc.test/compilable/test24061.d\nnew file mode 100644\nindex 00000000000..f40a38ba8e7\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test24061.d\n@@ -0,0 +1,15 @@\n+// https://issues.dlang.org/show_bug.cgi?id=24061\n+\n+class Exception2\n+{\n+    this(string, int) {}\n+}\n+\n+class E : Exception2\n+{\n+    this(int i)\n+    {\n+        scope (success) assert(0, \"assume nothrow\");\n+        super(\"hehe\", 2);\n+    }\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test5973.d b/gcc/testsuite/gdc.test/compilable/test5973.d\nnew file mode 100644\nindex 00000000000..a54b0ae173a\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test5973.d\n@@ -0,0 +1,41 @@\n+// https://issues.dlang.org/show_bug.cgi?id=5973\n+\n+class A { int a = 1; }\n+class B { int b = 2; }\n+class C : A\n+{\n+    B obj;\n+    alias obj this;\n+    this(){ obj = new B(); }\n+}\n+class X : C {}\n+\n+class D\n+{\n+    int i;\n+}\n+\n+class E\n+{\n+    D x;\n+    alias x this;\n+}\n+\n+class F : E\n+{\n+    void test()\n+    {\n+        i = 5;\n+    }\n+}\n+\n+void main()\n+{\n+    auto c = new C();\n+    assert(c.a == 1);   // lookup C -> A, OK\n+    assert(c.b == 2);   // lookup C => B, OK\n+\n+    auto x = new X();\n+    assert(x.a == 1);   // lookup X -> C -> A, OK\n+    assert(x.b == 2);   // lookup X -> C => B, NG (Line 17)\n+}\ndiff --git a/gcc/testsuite/gdc.test/compilable/test6777.d b/gcc/testsuite/gdc.test/compilable/test6777.d\nnew file mode 100644\nindex 00000000000..161a94a179d\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/compilable/test6777.d\n@@ -0,0 +1,11 @@\n+struct S {}\n+\n+class C {\n+    S s;\n+    alias s this;\n+}\n+\n+void main() {\n+    auto c = new C;\n+    auto p = cast(void*) c;\n+}\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/enum_member.d b/gcc/testsuite/gdc.test/fail_compilation/enum_member.d\nnew file mode 100644\nindex 00000000000..94c6f981195\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/enum_member.d\n@@ -0,0 +1,23 @@\n+/*\n+TEST_OUTPUT:\n+---\n+fail_compilation/enum_member.d(14): Error: basic type expected, not `for`\n+fail_compilation/enum_member.d(15): Error: no identifier for declarator `T`\n+fail_compilation/enum_member.d(15): Error: found `@` when expecting `,`\n+fail_compilation/enum_member.d(22): Error: found `}` when expecting `identifier`\n+fail_compilation/enum_member.d(24): Error: found `End of File` when expecting `,`\n+fail_compilation/enum_member.d(24): Error: premature end of file\n+---\n+*/\n+enum\n+{\n+    for,\n+    T @a b = 1\n+}\n+// See also: fail10285.d\n+\n+enum E\n+{\n+    @a\n+}\n+// See also: fail20538.d\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/fail5851.d b/gcc/testsuite/gdc.test/fail_compilation/fail5851.d\nnew file mode 100644\nindex 00000000000..236a956de92\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/fail5851.d\n@@ -0,0 +1,16 @@\n+/*\n+TEST_OUTPUT:\n+---\n+fail_compilation/fail5851.d(11): Error: alias this is not reachable as `Foo` already converts to `object.Object`\n+---\n+*/\n+\n+class Foo\n+{\n+    Object o;\n+    alias o this;\n+}\n+\n+void main()\n+{\n+}\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/finalswitch.d b/gcc/testsuite/gdc.test/fail_compilation/finalswitch.d\nnew file mode 100644\nindex 00000000000..634700940a5\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/finalswitch.d\n@@ -0,0 +1,96 @@\n+/*\n+TEST_OUTPUT:\n+---\n+fail_compilation/finalswitch.d(37): Error: missing cases for `enum` members in `final switch`:\n+fail_compilation/finalswitch.d(37):        `B`\n+fail_compilation/finalswitch.d(55): Error: missing cases for `enum` members in `final switch`:\n+fail_compilation/finalswitch.d(55):        `b`\n+fail_compilation/finalswitch.d(69): Error: missing cases for `enum` members in `final switch`:\n+fail_compilation/finalswitch.d(69):        `B`\n+fail_compilation/finalswitch.d(87): Error: missing cases for `enum` members in `final switch`:\n+fail_compilation/finalswitch.d(87):        `m3`\n+fail_compilation/finalswitch.d(87):        `m4`\n+fail_compilation/finalswitch.d(87):        `m5`\n+fail_compilation/finalswitch.d(87):        `m6`\n+fail_compilation/finalswitch.d(87):        `m7`\n+fail_compilation/finalswitch.d(87):        `m9`\n+fail_compilation/finalswitch.d(92): Error: missing cases for `enum` members in `final switch`:\n+fail_compilation/finalswitch.d(92):        `m1`\n+fail_compilation/finalswitch.d(92):        `m2`\n+fail_compilation/finalswitch.d(92):        `m3`\n+fail_compilation/finalswitch.d(92):        `m4`\n+fail_compilation/finalswitch.d(92):        `m5`\n+fail_compilation/finalswitch.d(92):        `m6`\n+fail_compilation/finalswitch.d(92):        ... (4 more, -v to show) ...\n+---\n+*/\n+\n+// https://issues.dlang.org/show_bug.cgi?id=4517\n+enum E : ushort\n+{\n+    A, B\n+}\n+\n+void test4517()\n+{\n+    E e;\n+    final switch(e)\n+    {\n+        case E.A:\n+            break;\n+    }\n+}\n+\n+// https://issues.dlang.org/show_bug.cgi?id=9368\n+enum E1\n+{\n+    a,\n+    b\n+}\n+\n+void test9368()\n+{\n+    alias E1 F;\n+    F f;\n+    final switch (f)\n+    {\n+        case F.a:\n+    }\n+}\n+\n+enum G\n+{\n+    A,B,C\n+}\n+\n+void test286()\n+{\n+    G e;\n+    final switch (e)\n+    {\n+        case G.A:\n+//      case G.B:\n+        case G.C:\n+            {}\n+    }\n+}\n+\n+// https://issues.dlang.org/show_bug.cgi?id=22038\n+\n+enum H {\n+    m1, m2, m3, m4, m5,\n+    m6, m7, m8, m9, m10,\n+}\n+\n+void test22038()\n+{\n+    final switch (H.init)\n+    {\n+        case H.m1, H.m2, H.m8, H.m10: break;\n+    }\n+\n+    final switch (H.init)\n+    {\n+\n+    }\n+}\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/mixinexpr.d b/gcc/testsuite/gdc.test/fail_compilation/mixinexpr.d\nnew file mode 100644\nindex 00000000000..d5ae514c959\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/mixinexpr.d\n@@ -0,0 +1,11 @@\n+/*\n+TEST_OUTPUT:\n+---\n+fail_compilation/mixinexpr.d-mixin-10(10): Error: unexpected token `;` after function expression\n+fail_compilation/mixinexpr.d-mixin-10(10):        while parsing string mixin expression `(int i) => true;`\n+fail_compilation/mixinexpr.d-mixin-11(11): Error: unexpected token `j` after identifier expression\n+fail_compilation/mixinexpr.d-mixin-11(11):        while parsing string mixin expression `i j`\n+---\n+*/\n+enum e = mixin(\"(int i) => true;\");\n+enum f = mixin(\"i j\");\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/named_arguments_struct_literal.d b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_struct_literal.d\nnew file mode 100644\nindex 00000000000..5b8f2c621cc\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_struct_literal.d\n@@ -0,0 +1,15 @@\n+/**\n+TEST_OUTPUT:\n+---\n+fail_compilation/named_arguments_struct_literal.d(14): Error: trying to initialize past the last field `z` of `S`\n+---\n+*/\n+\n+// https://issues.dlang.org/show_bug.cgi?id=24281\n+\n+struct S { int y, z = 3; }\n+\n+S s = S(\n+\tz: 2,\n+\t3,\n+);\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/test23145.d b/gcc/testsuite/gdc.test/fail_compilation/test23145.d\nnew file mode 100644\nindex 00000000000..0d69c8b884b\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/test23145.d\n@@ -0,0 +1,49 @@\n+/* REQUIRED_ARGS: -preview=dip1000\n+TEST_OUTPUT:\n+---\n+fail_compilation/test23145.d(117): Error: `scope` allocation of `c` with a non-`scope` constructor is not allowed in a `@safe` function\n+fail_compilation/test23145.d(111):        is the location of the constructor\n+fail_compilation/test23145.d(124): Error: `scope` allocation of `c` with a non-`scope` constructor is not allowed in a `@safe` function\n+fail_compilation/test23145.d(111):        is the location of the constructor\n+fail_compilation/test23145.d(125): Error: `@safe` function `test23145.bax` cannot call `@system` function `test23145.inferred`\n+fail_compilation/test23145.d(131):        and `scope` allocation of `c` with a non-`scope` constructor makes it fail to infer `@safe`\n+fail_compilation/test23145.d(129):        `test23145.inferred` is declared here\n+---\n+*/\n+\n+// https://issues.dlang.org/show_bug.cgi?id=23145\n+\n+#line 100\n+\n+class D\n+{\n+    C c;\n+}\n+\n+class C\n+{\n+    D d;\n+    int x=3;\n+    this(int i) scope @safe @nogc;\n+    this(D d) @safe @nogc;\n+}\n+\n+C foo(D d) @nogc @safe\n+{\n+    scope e = new C(1);  // ok\n+    scope c = new C(d);  // error\n+    return c.d.c;\n+}\n+\n+C bax(D d) @safe\n+{\n+    scope e = new C(1);  // ok\n+    scope c = new C(d);  // error\n+    inferred(d);\n+    return c.d.c;\n+}\n+\n+auto inferred(D d)\n+{\n+    scope c = new C(d);  // infer system\n+}\ndiff --git a/gcc/testsuite/gdc.test/fail_compilation/test8662.d b/gcc/testsuite/gdc.test/fail_compilation/test8662.d\nnew file mode 100644\nindex 00000000000..18fcf7e7c08\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/fail_compilation/test8662.d\n@@ -0,0 +1,38 @@\n+/*\n+TEST_OUTPUT:\n+---\n+fail_compilation/test8662.d(22): Error: label `Label` is already defined\n+fail_compilation/test8662.d(21):        first definition is here\n+fail_compilation/test8662.d(25): Error: label `Label` is already defined\n+fail_compilation/test8662.d(21):        first definition is here\n+fail_compilation/test8662.d(31): Error: label `Label2` is duplicated\n+fail_compilation/test8662.d(31):        labels cannot be used in a static foreach with more than 1 iteration\n+fail_compilation/test8662.d(36): Error: label `Label3` is duplicated\n+fail_compilation/test8662.d(36):        labels cannot be used in a static foreach with more than 1 iteration\n+---\n+*/\n+// Issue 8662 - Labels rejected in static foreach loop\n+\n+alias AliasSeq(T...) = T;\n+\n+void f()\n+{\n+    {\n+        Label:\n+        Label:\n+    }\n+    {\n+        Label:\n+        Label:\n+    }\n+    // static foreach\n+    foreach (x; AliasSeq!(1, 2, 3, 4, 5))\n+    {\n+        Label2:\n+    }\n+\n+    static foreach (x; 0 .. 3)\n+    {\n+        Label3:\n+    }\n+}\ndiff --git a/gcc/testsuite/gdc.test/runnable/test22659.d b/gcc/testsuite/gdc.test/runnable/test22659.d\nnew file mode 100644\nindex 00000000000..f872d468aa0\n--- /dev/null\n+++ b/gcc/testsuite/gdc.test/runnable/test22659.d\n@@ -0,0 +1,16 @@\n+// https://github.com/dlang/dmd/issues/22659\n+\n+int[] foo()\n+{\n+    int[4] sarr = [10, 20, 30, 40];\n+    int[] data = new int[4];\n+    cast(int[4]) data[0 .. 4] = sarr;\n+    return data;\n+}\n+\n+void main()\n+{\n+    auto result = foo();\n+    assert(result == [10, 20, 30, 40]);\n+    static assert(foo() == [10, 20, 30, 40]);\n+}\ndiff --git a/gcc/testsuite/gdc.test/runnable/testconst.d b/gcc/testsuite/gdc.test/runnable/testconst.d\nindex 43f986de9db..d3033a65971 100644\n--- a/gcc/testsuite/gdc.test/runnable/testconst.d\n+++ b/gcc/testsuite/gdc.test/runnable/testconst.d\n@@ -3793,6 +3793,39 @@ static assert((   immutable dstring[]   ).stringof ==    \"immutable(dstring[])\"\n static assert((   immutable dstring[1]  ).stringof ==    \"immutable(dstring[1])\"   );\n static assert((   immutable dstring[int]).stringof ==    \"immutable(dstring[int])\" );\n \n+/************************************/\n+// https://github.com/dlang/dmd/issues/21194\n+// Global char[] initialized with dup of string literal must be in writable memory\n+\n+char[]  ta = \"foo\".dup;\n+wchar[] tb = \"bar\"w.dup;\n+dchar[] tc = \"baz\"d.dup;\n+\n+__gshared char[]  ga = \"FOO\".dup;\n+__gshared wchar[] gb = \"BAR\"w.dup;\n+__gshared dchar[] gc = \"BAZ\"d.dup;\n+\n+void test21194()\n+{\n+    ta[0] = 'B';\n+    assert(ta == \"Boo\");\n+\n+    tb[0] = 'B';\n+    assert(tb == \"Bar\"w);\n+\n+    tc[0] = 'B';\n+    assert(tc == \"Baz\"d);\n+\n+    ga[0] = 'b';\n+    assert(ga == \"bOO\");\n+\n+    gb[0] = 'b';\n+    assert(gb == \"bAR\"w);\n+\n+    gc[0] = 'b';\n+    assert(gc == \"bAZ\"d);\n+}\n+\n /************************************/\n \n int main()\n@@ -3924,6 +3957,7 @@ int main()\n     test11226();\n     test11768();\n     test13011();\n+    test21194();\n \n     printf(\"Success\\n\");\n     return 0;\ndiff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE\nindex eac1d04c8c6..5cfaee4f823 100644\n--- a/libphobos/libdruntime/MERGE\n+++ b/libphobos/libdruntime/MERGE\n@@ -1,4 +1,4 @@\n-e145b9124523d1fecd55e0702003ef86947eb745\n+d1fbbb1a2ff801cd414c7e18fefe6351e3b1d21c\n \n The first line of this file holds the git revision number of the last\n merge done from the dlang/dmd repository.\ndiff --git a/libphobos/libdruntime/core/internal/array/capacity.d b/libphobos/libdruntime/core/internal/array/capacity.d\nindex cbcc3d3b6d2..fa867f162f6 100644\n--- a/libphobos/libdruntime/core/internal/array/capacity.d\n+++ b/libphobos/libdruntime/core/internal/array/capacity.d\n@@ -288,7 +288,10 @@ private size_t _d_arraysetlengthT_(Tarr : T[], T)(return ref scope Tarr arr, siz\n     if (!arr.ptr)\n     {\n         assert(arr.length == 0);\n-        void* ptr = GC.malloc(newsize, gcAttrs);\n+        version (D_TypeInfo)\n+            void* ptr = GC.malloc(newsize, gcAttrs, typeid(T));\n+        else\n+            void* ptr = GC.malloc(newsize, gcAttrs, null);\n         if (!ptr)\n         {\n             onOutOfMemoryError();\n@@ -324,7 +327,10 @@ private size_t _d_arraysetlengthT_(Tarr : T[], T)(return ref scope Tarr arr, siz\n \n     if (!gc_expandArrayUsed(newdata[0 .. oldsize], newsize, isShared))\n     {\n-        newdata = GC.malloc(newsize, gcAttrs);\n+        version (D_TypeInfo)\n+            newdata = GC.malloc(newsize, gcAttrs, typeid(T));\n+        else\n+            newdata = GC.malloc(newsize, gcAttrs, null);\n         if (!newdata)\n         {\n             onOutOfMemoryError();\ndiff --git a/libphobos/libdruntime/core/sys/posix/sys/stat.d b/libphobos/libdruntime/core/sys/posix/sys/stat.d\nindex a14fc149d70..83590b5b996 100644\n--- a/libphobos/libdruntime/core/sys/posix/sys/stat.d\n+++ b/libphobos/libdruntime/core/sys/posix/sys/stat.d\n@@ -2030,10 +2030,12 @@ else version (Darwin)\n         int stat(const scope char*, stat_t*);\n     }\n     int   fchmodat(int, const scope char*, mode_t, int);\n-    int   futimens(int, ref const(timespec)[2]);\n     int   mkdirat(int, const scope char*, mode_t);\n-    int   mkfifoat(int, const scope char*, mode_t);\n-    int   utimensat(int, const scope char*, ref const(timespec)[2], int);\n+    // OSX available starting 10.12\n+    //int   futimens(int, ref const(timespec)[2]);\n+    //int   utimensat(int, const scope char*, ref const(timespec)[2], int);\n+    // OSX available starting 13\n+    //int   mkfifoat(int, const scope char*, mode_t);\n }\n else version (FreeBSD)\n {\n",
    "prefixes": [
        "committed"
    ]
}