Show a cover letter.

GET /api/1.1/covers/2222412/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2222412,
    "url": "http://patchwork.ozlabs.org/api/1.1/covers/2222412/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/cover/cover.1775912642.git.alvaro.begue@gmail.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": "<cover.1775912642.git.alvaro.begue@gmail.com>",
    "date": "2026-04-11T13:33:04",
    "name": "[0/5] libstdc++: chrono tzdb correctness fixes",
    "submitter": {
        "id": 93119,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/93119/?format=api",
        "name": "Alvaro Begue",
        "email": "alvaro.begue@gmail.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/gcc/cover/cover.1775912642.git.alvaro.begue@gmail.com/mbox/",
    "series": [
        {
            "id": 499557,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/499557/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=499557",
            "date": "2026-04-11T13:33:04",
            "name": "libstdc++: chrono tzdb correctness fixes",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499557/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2222412/comments/",
    "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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=oBFs6+BO;\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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=oBFs6+BO",
            "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com",
            "sourceware.org; spf=pass smtp.mailfrom=gmail.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=209.85.222.180"
        ],
        "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 4ftF4q5Cz1z1yCx\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 11 Apr 2026 23:34:03 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id CFC464BA23F3\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 11 Apr 2026 13:34:01 +0000 (GMT)",
            "from mail-qk1-f180.google.com (mail-qk1-f180.google.com\n [209.85.222.180])\n by sourceware.org (Postfix) with ESMTPS id CB8C24BA23D2\n for <gcc-patches@gcc.gnu.org>; Sat, 11 Apr 2026 13:33:28 +0000 (GMT)",
            "by mail-qk1-f180.google.com with SMTP id\n af79cd13be357-8d65f4073bfso444191485a.3\n for <gcc-patches@gcc.gnu.org>; Sat, 11 Apr 2026 06:33:28 -0700 (PDT)",
            "from alvaro-MS-7D37.verizon.net\n ([2600:4041:592d:7300:b8f7:c631:1ab:88b0])\n by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8ac84caace4sm47629306d6.39.2026.04.11.06.33.27\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 11 Apr 2026 06:33:27 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org CFC464BA23F3",
            "OpenDKIM Filter v2.11.0 sourceware.org CB8C24BA23D2"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org CB8C24BA23D2",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org CB8C24BA23D2",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775914408; cv=none;\n b=RWm+9OkRgJumwYzJIFNVgcaCwuMmhP6g4iR9b4vshPh5Um0IRjDKzEA6+QI6+WR6svvu0AAdHU21xWnnsBgBzOn9WTY16yGIyR/OAQTMyijNlZNIs4XATodmua0lV0SwcI3Fe8FhKmCBv33ruoJoE1/sfXJdNh5wO6c1DCuPA4M=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775914408; c=relaxed/simple;\n bh=93vA6Gteq72A/Q+r0C8uckDfo5DpxMrv81CLA3mabBA=;\n h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version;\n b=v53xXHL7Diza3QjTajPUe3R/GHkxTtog9rSunLvnsU58UbMgwn7WWcWE1LS3ykw2nrxhmQ/+iSTA3CJ3myPhao3xRytxtvwBdVjCQVxXe6LugaJGUFr6H2iu0IQUmGS5GGgkv5omBKNcAmVtrpUihjGp0kkNbG0TjWUhrFlYz3Y=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1775914408; x=1776519208; darn=gcc.gnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=BhtHUgs2BXVO6frZQwukmKQrsSXz/G38c/Wyr2MWTRw=;\n b=oBFs6+BORtM0xiEWDtO3KrnTCPENzqtjMXEAV7icyIPC+JMuoPCvJS2pW2gXRsVl8R\n Otn55T8W0SyuJxqdbjdcEg21xSmWTnCay/Wu1Ri0uq4sAXar1XG4u6ddvCnUm+um6Dwk\n V8wn0xjDK/0fZTg8ODFhD/qGDmL0ir3kwCk6fIVrVxl8YJzTrDJ4NvgfQU65CCTKMQOs\n T4SCgfNPqWohyhzfcFnxoxvaojf0pGEykCH9HHaxOy2NdgoZvzAa0VHI7zEhQVf2+J8A\n liet+vk3PIXxnHzWlaSxtoPiN5VNwoH1ynIdtdg7w2AvOuGThFrsIAFN9Q7oe6zjK9o3\n Y53w==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775914408; x=1776519208;\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=BhtHUgs2BXVO6frZQwukmKQrsSXz/G38c/Wyr2MWTRw=;\n b=WArPcgCxQ7ecE7RZhUXr1c7Nan5rvcF0ePUD0vBY5ZaA63VnVcvsecUTxjLi4UXv82\n L+gJUQUCsZVF38qtBVbZb84N4qQ/bZQe8hHg8clBfWaFGHybgm59/qvhwh5WHg2M8zB1\n Qzs4brPRF8zuVFsb6VCUC5UJgjmiWxG4ZP9y4rqOHnvhDRixNgx7x1rEURbCnza3NiFx\n KSXv9ID7ztsDbJH5SOmq+cnVzg2Nsx/hNo9yQZOfX6jnPUtmvgg43PmPshLbBfnT1lvj\n amegk0wAPfYL8z/OhkHMB2nqItojGe8E2e/JT1lSGH4h5DcSxEBEmSU/EJDW1yykHwVo\n wFnA==",
        "X-Gm-Message-State": "AOJu0YxnqYhRtK6lPfSWA9wfQwcoRFMG3UmaYOr6EKGx6N9p+T26xeJC\n vYqRggzeX3V8YgDGwFQ31TAOsCqTzqsBXQ7ZaYOieaaxObvfD1ur/PvHPoG9Dg==",
        "X-Gm-Gg": "AeBDieu0Mdfk+XdDXH4rp31W8rl8wnXGjA4i5QvPomi45y5SGkxmqvpTeGjzxojLlx+\n HsJ1DDCsLwmenXrpFONGVUMZNH+aq547tKbHuvjqKwgs3w7D9D42MfAWmAOkNlWg6L1fNJWaRW3\n x2jyv7gRF/c8cIORfL+3/nv6N1gfMiE0E9SwxGwH1v9cPxBXjdyyqVQ9RAaH8ZbvVMi7t7LrkIU\n LWb/ECV4eKDaccQxQUBk7ebBbPls9ODBQhYtup2dg4fhFWwj0VZwjcuswYX/IQNel7PXwdCqprh\n Q2w7ttyfI9Dys6qAkvcboaH/ACNoVKOCoKF7xQbKWBbeS0xvsv4b2nJwhqJFu70pO2T/bX1b2RP\n HDqE0bu9iQggJH0O30oQLvyRwa2obAkx43xr4pjFx8rjyJuyJ9ZJzKCBdb3pzarZqaFdgNRoT4w\n B5OEZtzRGJMRMIVQo7dOdXE0uQmJANuBTSvf7cIqK0P1bM3/gelzfT0UDBYMbr9Yc6P3zpbtz5R\n cY4UH0xdvJ+WIdRdn7cdjMmEkPiAO0BkD1mDTrPmWdbZCxsLY7/X0SzgnZCxyBqtpYx5BlonUDE\n KciZ",
        "X-Received": "by 2002:a05:620a:1725:b0:8d7:a2b3:3aa7 with SMTP id\n af79cd13be357-8ddd0694ef6mr951147085a.56.1775914407953;\n Sat, 11 Apr 2026 06:33:27 -0700 (PDT)",
        "From": "Alvaro Begue <alvaro.begue@gmail.com>",
        "To": "gcc-patches@gcc.gnu.org",
        "Cc": "jwakely@redhat.com, libstdc++@gcc.gnu.org,\n Alvaro Begue <alvaro.begue@gmail.com>",
        "Subject": "[PATCH 0/5] libstdc++: chrono tzdb correctness fixes",
        "Date": "Sat, 11 Apr 2026 09:33:04 -0400",
        "Message-Id": "<cover.1775912642.git.alvaro.begue@gmail.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "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": "This series fixes five distinct correctness issues in libstdc++'s\n<chrono> tzdb implementation that cause time-zone conversions to\ndisagree with zic.c / libc localtime_r for specific real-world zones.\n\nThe motivation was a brute-force comparison harness that walks every\nIANA zone hourly across 1850-2150 (~563k transition samples) and\ncompares chrono::time_zone::to_local() against libc's localtime_r().\nAgainst current master HEAD that harness reports thousands of\nmismatches across ~190 zones; with this series applied it reports\nzero mismatches across all 447 zones.  An abbreviation-only sweep\n(169k samples) likewise reports zero offset and zero abbrev diffs.\n\nThe series builds on Jonathan Wakely's recent PR 116110 / PR 124513\nwork (commits 663e5ade1, cddf4111c, fbc5d2b1a).  Patch 3 in\nparticular resolves the \"FIXME: PR 116110\" left in operator>>(istream&,\nZoneInfo&) for the named-rule wall-UNTIL case.\n\nThe five commits are deliberately small and independently testable;\neach adds a hermetic regression test using the same\n__gnu_cxx::zoneinfo_dir_override pattern as the existing 124513.cc.\n\n  1. Fix numeric save offset on Zone lines [PR 124851].\n\n     ZoneInfo::m_offset had inconsistent semantics: the parser path\n     stored stdoff alone, but the two sys_info-taking constructors\n     stored the total (stdoff + save).  ZoneInfo::to() returned\n     m_offset as sys_info::offset, dropping the numeric save for\n     parser-path lines like Africa/Gaborone's \"2 1 CAST\" middle line.\n     Normalize m_offset to stdoff alone everywhere; to() adds save\n     back when reconstructing.\n\n  2. Support ON-format DAY in Zone UNTIL field [PR 124852].\n\n     The UNTIL parser only accepted a plain integer as the DAY,\n     silently misparsing tzdata.zi entries like Europe/Simferopol's\n     \"1997 Mar lastSu 1u\".  Reuse the on_day machinery and the\n     parse_on_day_body helper.\n\n  3. Resolve named-rule UNTIL save adjustment [PR 116110].\n\n     The remaining FIXME in operator>>(istream&, ZoneInfo&) for\n     wall-time UNTILs on named-rule zone lines.  At parse time the\n     active rule cannot be evaluated (rule records aren't all\n     loaded yet), so the parser leaves the SAVE adjustment pending\n     and a new fixup pass in reload_tzdb walks every pending\n     ZoneInfo and applies the adjustment using a new\n     find_pre_until_rule helper with iterative-boundary cascade\n     semantics.\n\n     A new bit (m_until_save_pending, stolen from m_pos) marks\n     pending entries.  The seeding code is also updated to use\n     `t = info.begin + 1s` so a rule firing at exactly info.begin\n     is included.\n\n     Removes the +11h workaround from test_apia in 116110.cc.\n\n  4. Cascade wall-time saves in lazy expansion seeding [PR 124853].\n\n     The seeding code in _M_get_sys_info interpreted each rule in\n     isolation against ri.offset() (the line's standard offset\n     alone), ignoring the running save accumulated by earlier rules\n     in the same year.  For zones whose rule set has wall-time\n     rules whose effective firing time depends on a prior rule's\n     save (Europe/Paris around 1945), this gives a wrong answer.\n\n     Replace with a chronological cascade walker (matching zic.c's\n     outzone() logic) that maintains a running save and interprets\n     each Wall-time rule's at_time relative to the cascaded state.\n\n  5. Implement zic writezone merge optimization [PR 124854].\n\n     Two distinct fixes that together let lazy expansion match\n     zic.c's writezone output for zones with rule firings near\n     zone-line boundaries:\n\n     a. Always seed info.offset and info.save from find_active_rule,\n        not just when letters is empty.  Previously, partial-\n        expansion re-entry left info.offset/save at their\n        (ri.offset(), 0) init values because the seeding was\n        skipped when letters was already populated from\n        i[-1].next_letters().  This caused zones like Europe/Berlin\n        around 1947-06-29 to emit a 2-hour CEST sys_info with\n        offset=3600 / save=0 — observably wrong.\n\n     b. Add the writezone merge optimization itself: when adjacent\n        zone lines have different total offsets and the new line's\n        rule set has a rule firing within |jump| of the boundary\n        (where jump is a backward local-time jump), fold that rule\n        into the boundary transition.  Canonical cases handled:\n        America/Argentina/Buenos_Aires 1999-10-03 and Europe/Berlin\n        1945-05-24.\n\nTest plan:\n  * make check-target-libstdc++-v3 RUNTESTFLAGS=\"conformance.exp=std/time/*\"\n    -- all existing chrono tests pass, plus the five new ones added\n    by this series.\n  * The comparison harness reports zero mismatches across all 447\n    zones (563600 samples).\n  * The abbrev sweep reports zero offset and zero abbrev diffs\n    (169080 samples).\n\nAlvaro Begue (5):\n  libstdc++: Fix numeric save offset on Zone lines [PR 124851]\n  libstdc++: Support ON-format DAY in Zone UNTIL field [PR 124852]\n  libstdc++: Resolve named-rule UNTIL save adjustment [PR116110]\n  libstdc++: Cascade wall-time saves in lazy expansion seeding [PR\n    124853]\n  libstdc++: Implement zic writezone merge optimization [PR 124854]\n\n libstdc++-v3/src/c++20/tzdb.cc                | 464 ++++++++++++++----\n .../testsuite/std/time/time_zone/116110.cc    |   7 +-\n .../std/time/time_zone/numeric_save.cc        |  66 +++\n .../std/time/time_zone/pr116110_named.cc      | 106 ++++\n .../std/time/time_zone/until_day_on.cc        | 177 +++++++\n .../std/time/time_zone/wall_cascade.cc        |  87 ++++\n .../std/time/time_zone/zone_merge.cc          | 101 ++++\n 7 files changed, 920 insertions(+), 88 deletions(-)\n create mode 100644 libstdc++-v3/testsuite/std/time/time_zone/numeric_save.cc\n create mode 100644 libstdc++-v3/testsuite/std/time/time_zone/pr116110_named.cc\n create mode 100644 libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc\n create mode 100644 libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc\n create mode 100644 libstdc++-v3/testsuite/std/time/time_zone/zone_merge.cc"
}