Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2229017/?format=api
{ "id": 2229017, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2229017/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260427161804.1717021-1-dmalcolm@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": "<20260427161804.1717021-1-dmalcolm@redhat.com>", "date": "2026-04-27T16:18:04", "name": "[pushed] wwwdocs: Document my gcc 16 changes", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "9cb62abd2c749fda5bddc7c37ca752fb405d3525", "submitter": { "id": 24465, "url": "http://patchwork.ozlabs.org/api/1.1/people/24465/?format=api", "name": "David Malcolm", "email": "dmalcolm@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260427161804.1717021-1-dmalcolm@redhat.com/mbox/", "series": [ { "id": 501686, "url": "http://patchwork.ozlabs.org/api/1.1/series/501686/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=501686", "date": "2026-04-27T16:18:04", "name": "[pushed] wwwdocs: Document my gcc 16 changes", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/501686/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2229017/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2229017/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=fZzVL1Pp;\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 (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fZzVL1Pp", "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 [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 4g47zX1Vt7z1yHX\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 02:18:46 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 023FD4BAD15E\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 16:18:45 +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 8B4414B9DB4F\n for <gcc-patches@gcc.gnu.org>; Mon, 27 Apr 2026 16:18:09 +0000 (GMT)", "from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-627-Qfdf6MXQN86VfU8JLAnSNg-1; Mon,\n 27 Apr 2026 12:18:07 -0400", "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id EDB711956095\n for <gcc-patches@gcc.gnu.org>; Mon, 27 Apr 2026 16:18:06 +0000 (UTC)", "from t14s.localdomain.com (unknown [10.22.65.168])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 4F53B3007572; Mon, 27 Apr 2026 16:18:06 +0000 (UTC)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 023FD4BAD15E", "OpenDKIM Filter v2.11.0 sourceware.org 8B4414B9DB4F" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 8B4414B9DB4F", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 8B4414B9DB4F", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777306689; cv=none;\n b=sSHIMut59aMSt4cxNMTAgSqIeXAws3P/pWS7I+quOaWgpppw/SKwJOcA52vIPYQyZuOQn9DLtk2Ee79n2ZhI3hIs55gl6LEAs2IqoZex2Eq17PS9+3/LNDJN+7gB1/8N8AVE+uF7iC8fTp4XAURx+cQXQPLQdzRyLCXIsnalit4=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777306689; c=relaxed/simple;\n bh=BfmYJ2RnILoWG8V41PsiqzFomTpGFFh/RWNHXUwNrzY=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=tfA7uExhRh0pDh+p8RN0APJ3pAOhIXwUb6naqn42Xa5mFepGYyy3WrWkz2wCvQZDEvgNDZSQpr0kjpMoheMHww+bxkqq+vmHUeLmfT+yCxZ+gbt9ZFKiy3xTcOlDxl93+E8nJrQSn9Sp/qzggQyvfNEkyEuDyH8NITWfjpc9nRQ=", "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=1777306689;\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=V/QnXPEAiDldlKgM5r85OZddHzL4vjQbtTFu1pITSoI=;\n b=fZzVL1PpxuBC3VDrnO3ZyQnT+x5EIu9ZMVnkCChSmRAVLZ0GaYz3tF2yAGLuKAZ4SHXG2p\n sMdtII1rYdtKcL/f3J7XQABw9OMRhk4vhA0bNgZ/rg7bUuaSvDGTEWOB3kxcN8LZ+Qgo+v\n 71mQsQ6UfxMt/0edNPilNBRWIjU/z+Y=", "X-MC-Unique": "Qfdf6MXQN86VfU8JLAnSNg-1", "X-Mimecast-MFC-AGG-ID": "Qfdf6MXQN86VfU8JLAnSNg_1777306687", "From": "David Malcolm <dmalcolm@redhat.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "David Malcolm <dmalcolm@redhat.com>", "Subject": "[pushed] wwwdocs: Document my gcc 16 changes", "Date": "Mon, 27 Apr 2026 12:18:04 -0400", "Message-ID": "<20260427161804.1717021-1-dmalcolm@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "pzIi9Z7u1rFUDDRu0TR0RxgESCkvvM7yvilN0KKvxSQ_1777306687", "X-Mimecast-Originator": "redhat.com", "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": "I've pushed this patch for the website to cover my various\nGCC 16 changes (and porting notes).\n\nDave\n\n---\n htdocs/gcc-16/changes.html | 265 +++++++++++++++++++++++++++++++++-\n htdocs/gcc-16/porting_to.html | 183 +++++++++++++++++++++++\n 2 files changed, 447 insertions(+), 1 deletion(-)", "diff": "diff --git a/htdocs/gcc-16/changes.html b/htdocs/gcc-16/changes.html\nindex c56f3b8b..65462545 100644\n--- a/htdocs/gcc-16/changes.html\n+++ b/htdocs/gcc-16/changes.html\n@@ -36,6 +36,12 @@ a work-in-progress.</p>\n predefines <code>_REENTRANT</code> on Solaris.\n See <a href=\"porting_to.html#solaris\">the porting notes</a> for more\n information.</li>\n+ <li>The so-called \"<code>json</code>\" format for\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format\"><code>-fdiagnostics-format=</code></a>\n+ has been removed in this release.\n+ Users seeking machine-readable diagnostics from GCC should use\n+ <a href=\"https://gcc.gnu.org/wiki/SARIF\">SARIF</a>.\n+ </li>\n </ul>\n \n \n@@ -265,6 +271,21 @@ for general information.</p>\n of diagnostic text (<a href=\"https://gcc.gnu.org/PR102613\">PR102613</a>)</li>\n </ul>\n </li>\n+ <li>Various C++ error messages (such as for problems involving templates)\n+ now have a hierarchical structure. This nesting of messages is presented\n+ using indentation and bullet points. The old behavior can be restored via\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-nesting\"><code>-fno-diagnostics-show-nesting</code></a>\n+ or\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-plain-output\"><code>-fdiagnostics-plain-output</code></a>.\n+ <!-- commit d3fe5a560f0bcca8e11ec0f9bb916f59615f51d8\n+\t diagnostics: enable nested diagnostics by default [PR116253] -->\n+ <!-- commit 41f071a64ff7027a98e6b6a7e3641156e3be70e0\n+\t c++: improve nesting in print_z_candidate [PR121966] -->\n+ <!-- commit 9d27750d153dd4147eebe6b30d3e18f7cb3d7384\n+\t c++: use nesting and counts in print_candidates -->\n+ <!-- commit b76d9f7c1f2e14a576e2e548b0d454a1f16c7fde\n+\t c++: UX improvements for close matches in print_candidates -->\n+ </li>\n </ul>\n \n <h4 id=\"libstdcxx\">Runtime Library (libstdc++)</h4>\n@@ -632,7 +653,249 @@ struct Affected : E\n <!-- <h2>Documentation improvements</h2> -->\n \n <!-- .................................................................. -->\n-<!-- <h2 id=\"plugins\">Improvements for plugin authors</h2> -->\n+<h2 id=\"diagnostics\">Improvements to GCC Diagnostics</h2>\n+<ul>\n+ <li>GCC can now output diagnostics in HTML form via\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-add-output_003dexperimental-html\"><code>-fdiagnostics-add-output=experimental-html</code></a>\n+ </li>\n+\n+ <li>GCC's SARIF output now respects the\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#index-dumpdir\">dump directory</a>.\n+ For example, given\n+ <code><pre>\n+ gcc \\\n+ -o build-dir/foo.o \\\n+ -fdiagnostics-add-output=sarif\n+ foo.c\n+ </pre></code>\n+ GCC 15 would write the SARIF to <code>foo.c.sarif</code>, whereas\n+ GCC 16 now writes it to <code>build-dir/foo.c.sarif</code>.\n+ <!-- commit 6fe28020cae53e3703921aedb9f267115a5262d3\n+\t diagnostics: respect dumpdir when outputting SARIF and HTML file [PR110522] -->\n+ </li>\n+\n+\n+ <li>GCC's SARIF output now captures the nesting of logical locations.\n+ <!-- commit f25e178b8c2cc868168b0a29ab03260fbefa4ff7\n+\t sarif output: capture nesting of logical locations [PR116176] -->\n+ </li>\n+\n+ <li>In GCC's SARIF output,\n+ <code>fix</code> objects now contain\n+ <code>description</code> properties in many cases.\n+ <!-- commit 0d5af6a757051708d2dfa510b2ad84f083d7eddc\n+\t sarif output: add descriptions to fix-it hints (§3.55.2) [PR121986] -->\n+ </li>\n+\n+ <li>GCC's SARIF output has gained 5 new values for the\n+ <a href=\"https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html#_Toc141791009\">§3.38.8 <code>kinds</code> property of <code>threadFlowLocation</code></a>,\n+ for expressing non-standard control flow:\n+ <ul>\n+ <li><code>throw</code> for throwing an exception</li>\n+ <li><code>catch</code> for catching an exception</li>\n+ <li><code>unwind</code> for unwinding stack frame(s) during\n+\texception-handling</li>\n+ <li><code>setjmp</code> for calls to setjmp</li>\n+ <li><code>longjmp</code> for calls to longjmp that rewind the\n+\tprogram counter/stack to the location of a previous setjmp call</li>\n+ </ul>\n+ <!-- commit 0a2c4b6dd2019d144df49227fce950e10ae62b09\n+\t analyzer: add event kinds for special control flow [PR122544] -->\n+ </li>\n+\n+ <li>GCC diagnostics can now have directed graphs associated with them, and\n+ can also report \"global\" directed graphs. Graphs are ignored by text sinks,\n+ but are captured by SARIF sinks, and the \"experimental-html\" renders any\n+ such graphs in SVG-based form using dot. For example, setting\n+ <code>cfgs=yes</code> on a SARIF or HTML diagnostic sink will enable\n+ capturing GCC's intermediate representation of every function at every\n+ optimization pass.</li>\n+\n+ <li>GCC diagnostics can now refer to logical locations inside XML and JSON\n+ files (such as via libgdiagnostics). The <code>sarif-replay</code> tool\n+ now uses this to provide JSON pointers when it reports on issues in its\n+ SARIF input.</li>\n+\n+ <li>If\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html#index-GCC_005fDIAGNOSTICS_005fLOG\"><code>GCC_DIAGNOSTICS_LOG</code></a>\n+ is set in the environment, GCC's diagnostic subsystem will emit a\n+ text log to stderr (or a named file) to track what it's doing and the\n+ decisions it's making (e.g. exactly when and why a diagnostic is being\n+ rejected).</li>\n+\n+ <li>If\n+ <a href=https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html#index-EXPERIMENTAL_005fSARIF_005fSOCKET><code>EXPERIMENTAL_SARIF_SOCKET</code></a>\n+ is set in the environment, GCC will attempt to connect to that socket on\n+ startup and send JSON-RPC notifications to it for every diagnostic emitted.\n+ <!-- commit 8a155c170b443e332b3db4922f0f0d588a17604f\n+\t diagnostics: add experimental SARIF JSON-RPC notifications for IDEs [PR115970] -->\n+ </li>\n+</ul>\n+\n+<!-- .................................................................. -->\n+<h2 id=\"plugins\">Improvements for plugin authors</h2>\n+<ul>\n+ <li>GCC has gained a \"publish/subscribe\" framework, allowing for\n+ loosely-coupled senders and receivers, with strongly-typed messages\n+ passing between them. In this release the only topics for plugins\n+ to subscribe to are:\n+ <ul>\n+ <li>events relating to optimization passes starting/stopping on particular\n+\tfunctions\n+ <!-- commit 4a2e1c31159aab4bde1990589ccab0da2436dfad\n+\t Add publish/subscribe topics and channel: pass_events -->\n+ </li>\n+ <li>events relating to the static analyzer\n+ <!-- commit f68343c2543ab65d75ef88bd920dfa209c7cbe20\n+\t analyzer: replace PLUGIN_ANALYZER_INIT with a pub/sub channel\n+\n+\t commit d36257a190dbe94a284f774fbf5c003abf03fc33\n+\t analyzer: port translation_unit_callbacks to pub/sub\n+\n+\t commit bc668cf6c94a2607f280fa2447095e5f7cb81c2e\n+\t analyzer: port pop_frame_callbacks to pub/sub\n+\t-->\n+ </li>\n+ </ul>\n+ </li>\n+\n+ <li>GCC diagnostic sinks can now have <code>extension</code> objects\n+ associated with them, with a <code>finalizer</code> hook. Plugins can\n+ use this to capture additional information in SARIF output files.\n+ <!-- commit 0558c6028e47eb623365c3865577f40f9d1fa27c\n+\t diagnostics: add class sink::extension -->\n+ </li>\n+\n+ <li>GCC's diagnostic machinery has been substantially cleaned up in GCC 16.\n+ This should not affect plugins that use just the\n+ <code>diagnostic-core.h</code> header, but maintainers of plugins making\n+ more sophisticated uses of diagnostics may need to refer to the\n+ <a href=\"porting_to.html#plugins\">porting guide</a>.\n+ </li>\n+\n+</ul>\n+\n+<!-- .................................................................. -->\n+<h2 id=\"analyzer\">Improvements to Static Analyzer</h2>\n+<ul>\n+ <li>The analyzer is now usable on simple C++ examples, as it now handles\n+ C++'s Named Return Value Optimization and has some initial support for\n+ exceptions. However due to scaling issues it is not likely to be usable\n+ on production C++ code in this release.\n+ <!-- commit a1922f0252b3b09016df76bd5b10119206935e37\n+\t analyzer: handle NRVO and DECL_BY_REFERENCE [PR111536] -->\n+ <!-- commit 7a39e0ca0652ff84a31efa3c7d4c7a78d9bb95ae\n+\t analyzer: initial implementation of exception handling [PR97111] -->\n+ </li>\n+ <li>With the added support for exception-handling, <code>-fanalyzer</code>\n+ assumes that a call to an external function not marked with attribute\n+ <code>nothrow</code> could throw an exception if <code>-fexceptions</code>\n+ is enabled. GCC 16 adds a new option\n+ <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html#index-fanalyzer-assume-nothrow\"><code>-fanalyzer-assume-nothrow</code></a>,\n+ for disabling this assumption. This is intended as a workaround for\n+ projects where the exception-handling generates large numbers of new\n+ warnings, such as C code where <code>-fexceptions</code> is used for\n+ interoperability with C++ but where the C APIs in use are unlikely to\n+ throw exceptions.\n+ <!-- commit f1318516f07453e87814f6246acf567f684ac34f\n+\t analyzer: add option -fanalyzer-assume-nothrow [PR122623] -->\n+ </li>\n+ <li>The data structure used by <code>-fanalyzer</code> for representing\n+ the user's code has been rewritten in a way that makes it easier to\n+ understand and debug, and slightly improves locations used when reporting\n+ diagnostics. This comes at the cost of increasing the memory usage of\n+ the analyzer.\n+ <!-- commit 0b786d961d4426db15b3f681f4e7c6fcaeb296c2\n+\t analyzer: reimplement supergraph to eliminate function_point and stmt_finder -->\n+ </li>\n+ <li>The data structure used by <code>-fanalyzer</code> for simulating the\n+ contents of memory in the user's program has been reimplemented. The new\n+ implementation is faster and easier to maintain.\n+ <!-- commit 310a70ef6db45d2fd574daa77b5128cd1f4edbce\n+\t analyzer: reimplement binding_map using a \"spatial\" representation -->\n+ </li>\n+ <li>The analyzer has started to make use of GCC's <code>value_range</code>\n+ machinery, eliminating some false positives.\n+ <!-- commit 498fb8a24516b10897dfbe08bb8f7574b2d28839\n+\t analyzer: use value_range and range_op in eval_condition [PR98447] -->\n+ </li>\n+</ul>\n+\n+<!-- .................................................................. -->\n+<h2 id=\"libgdiagnostics\">Improvements to libgdiagnostics</h2>\n+<a href=\"https://gcc.gnu.org/wiki/libgdiagnostics\">libgdiagnostics</a> has gained 37 entrypoints:\n+<ul>\n+ <li>5 new entrypoints for working with logical locations\n+ <ul>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/logical-locations.html#c.diagnostic_logical_location_get_kind\"><code>diagnostic_logical_location_get_kind()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/logical-locations.html#c.diagnostic_logical_location_get_parent\" title=\"diagnostic_logical_location_get_parent\"><code>diagnostic_logical_location_get_parent()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/logical-locations.html#c.diagnostic_logical_location_get_short_name\" title=\"diagnostic_logical_location_get_short_name\"><code>diagnostic_logical_location_get_short_name()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/logical-locations.html#c.diagnostic_logical_location_get_fully_qualified_name\" title=\"diagnostic_logical_location_get_fully_qualified_name\"><code>diagnostic_logical_location_get_fully_qualified_name()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/logical-locations.html#c.diagnostic_logical_location_get_decorated_name\" title=\"diagnostic_logical_location_get_decorated_name\"><code>diagnostic_logical_location_get_decorated_name()</code></a></li>\n+ </ul>\n+ </li>\n+ <li>2 new entrypoints for supporting command-line options and SARIF playback\n+ <ul>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/diagnostic-manager.html#c.diagnostic_manager_add_sink_from_spec\" title=\"diagnostic_manager_add_sink_from_spec\"><code>diagnostic_manager_add_sink_from_spec()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/diagnostic-manager.html#c.diagnostic_manager_set_analysis_target\" title=\"diagnostic_manager_set_analysis_target\"><code>diagnostic_manager_set_analysis_target()</code></a></li>\n+ </ul>\n+ </li>\n+ <li>12 new entrypoints for working with directed graphs:\n+ <ul>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_manager_new_graph\" title=\"diagnostic_manager_new_graph\"><code>diagnostic_manager_new_graph()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_manager_take_global_graph\" title=\"diagnostic_manager_take_global_graph\"><code>diagnostic_manager_take_global_graph()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_take_graph\" title=\"diagnostic_take_graph\"><code>diagnostic_take_graph()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_release\" title=\"diagnostic_graph_release\"><code>diagnostic_graph_release()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_set_description\" title=\"diagnostic_graph_set_description\"><code>diagnostic_graph_set_description()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_add_node\" title=\"diagnostic_graph_add_node\"><code>diagnostic_graph_add_node()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_add_edge\" title=\"diagnostic_graph_add_edge\"><code>diagnostic_graph_add_edge()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_get_node_by_id\" title=\"diagnostic_graph_get_node_by_id\"><code>diagnostic_graph_get_node_by_id()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_graph_get_edge_by_id\" title=\"diagnostic_graph_get_edge_by_id\"><code>diagnostic_graph_get_edge_by_id()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_node_set_label\" title=\"diagnostic_node_set_label\"><code>diagnostic_node_set_label()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_node_set_location\" title=\"diagnostic_node_set_location\"><code>diagnostic_node_set_location()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/graphs.html#c.diagnostic_node_set_logical_location\" title=\"diagnostic_node_set_logical_location\"><code>diagnostic_node_set_logical_location()</code></a></li>\n+ </ul>\n+ </li>\n+ <li>17 new entrypoints for building up text for a diagnostic via a buffer:\n+ <ul>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_new\" title=\"diagnostic_message_buffer_new\"><code>diagnostic_message_buffer_new()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_release\" title=\"diagnostic_message_buffer_release\"><code>diagnostic_message_buffer_release()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_append_str\" title=\"diagnostic_message_buffer_append_str\"><code>diagnostic_message_buffer_append_str()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_append_text\" title=\"diagnostic_message_buffer_append_text\"><code>diagnostic_message_buffer_append_text()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_append_byte\" title=\"diagnostic_message_buffer_append_byte\"><code>diagnostic_message_buffer_append_byte()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_append_printf\" title=\"diagnostic_message_buffer_append_printf\"><code>diagnostic_message_buffer_append_printf()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_append_event_id\" title=\"diagnostic_message_buffer_append_event_id\"><code>diagnostic_message_buffer_append_event_id()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_begin_url\" title=\"diagnostic_message_buffer_begin_url\"><code>diagnostic_message_buffer_begin_url()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_end_url\" title=\"diagnostic_message_buffer_end_url\"><code>diagnostic_message_buffer_end_url()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_begin_quote\" title=\"diagnostic_message_buffer_begin_quote\"><code>diagnostic_message_buffer_begin_quote()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_end_quote\" title=\"diagnostic_message_buffer_end_quote\"><code>diagnostic_message_buffer_end_quote()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_begin_color\" title=\"diagnostic_message_buffer_begin_color\"><code>diagnostic_message_buffer_begin_color()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_end_color\" title=\"diagnostic_message_buffer_end_color\"><code>diagnostic_message_buffer_end_color()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/message-buffers.html#c.diagnostic_message_buffer_dump\" title=\"diagnostic_message_buffer_dump\"><code>diagnostic_message_buffer_dump()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/diagnostics.html#c.diagnostic_finish_via_msg_buf\" title=\"diagnostic_finish_via_msg_buf\"><code>diagnostic_finish_via_msg_buf()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/physical-locations.html#c.diagnostic_add_location_with_label_via_msg_buf\" title=\"diagnostic_add_location_with_label_via_msg_buf\"><code>diagnostic_add_location_with_label_via_msg_buf()</code></a></li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/execution-paths.html#c.diagnostic_execution_path_add_event_via_msg_buf\" title=\"diagnostic_execution_path_add_event_via_msg_buf\"><code>diagnostic_execution_path_add_event_via_msg_buf()</code></a></p></li>\n+ </ul>\n+ </li>\n+ <li><a href=\"https://gcc.gnu.org/onlinedocs/libgdiagnostics/topics/physical-locations.html#c.diagnostic_manager_set_debug_physical_locations\" title=\"diagnostic_manager_set_debug_physical_locations\"><code>diagnostic_manager_set_debug_physical_locations()</code></a></li>\n+ <!--\n+2025-07-15: Added support for message buffers to libgdiagnostics (LIBGDIAGNOSTICS_ABI_4)\n+\n+2025-07-11: Added support for directed graphs to libgdiagnostics and sarif-replay (LIBGDIAGNOSTICS_ABI_3)\n+\n+2025-06-23: Added support for HTML output to libgdiagnostics, sarif-replay, and dg-lint (LIBGDIAGNOSTICS_ABI_2)\n+2025-05-06:\n+\n+ Added accessors for logical locations(LIBGDIAGNOSTICS_ABI_1)\n+\n+ SARIF output now captures nesting of logical locations (PR116176)\n+\n+ Added support for XML and JSON kinds of logical locations\n+\n+ sarif-replay now shows logical locations of errors within SARIF input using JSON pointer (PR117988)\n+ -->\n+\n+</ul>\n \n <!-- .................................................................. -->\n <h2>Other significant improvements</h2>\ndiff --git a/htdocs/gcc-16/porting_to.html b/htdocs/gcc-16/porting_to.html\nindex 6a6e047a..2ab0df6f 100644\n--- a/htdocs/gcc-16/porting_to.html\n+++ b/htdocs/gcc-16/porting_to.html\n@@ -294,5 +294,188 @@ usual alignment without capping the result.\n (And Good Riddance) to -mt -and -D_REENTRANT</a>.</li>\n </ul>\n \n+<h2 id=\"plugins\">Changes affecting plugin authors</h2>\n+\n+<p>GCC's diagnostic machinery has been substantially cleaned up in GCC 16.\n+ Most of the implementation has been moved to a new\n+ <code>gcc/diagnostics/</code> subdirectory and <code>diagnostics::</code>\n+ namespace, with many fields becoming <code>private</code>. This should\n+ not affect plugins that use just the <code>diagnostic-core.h</code> API,\n+ but plugins making more sophisticated uses of diagnostics may need\n+ updating. The following tables list the types that have been renamed\n+ in GCC 16 and the header files that have been moved.</p>\n+\n+<table>\n+ <caption>Renamed types</caption>\n+ <thead>\n+ <tr>\n+ <th scope=\"col\">GCC 15 type</th>\n+ <th scope=\"col\">GCC 16 type</th>\n+ <th scope=\"col\">Notes</th>\n+ </tr>\n+ </thead>\n+ <tbody>\n+ <tr>\n+ <td><code>class diagnostic_buffer</code></td> <td><code>class diagnostics::buffer</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_client_data_hooks</code></td> <td><code>class diagnostics::client_data_hooks</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_client_plugin_info</code></td> <td><code>class diagnostics::client_plugin_info</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_column_policy</code></td> <td><code>class diagnostics::column_policy</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_context</code></td> <td><code>class diagnostics::context</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>struct diagnostic_counters</code></td> <td><code>struct diagnostics::counters</code></td> <td>New header: <code>diagnostics/counters.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_diagram</code></td> <td><code>class diagnostics::diagram</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_event</code></td> <td><code>class diagnostics::paths::event</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_event_id_t</code></td> <td><code>class diagnostics::paths::event_id_t</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>struct diagnostic_info</code></td> <td><code>struct diagnostics::diagnostic_info</code></td> <td>Fields have gained <code>m_</code> prefixes</td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_location_print_policy</code></td> <td><code>class diagnostics::location_print_policy</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_metadata</code></td> <td><code>class diagnostics::metadata</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_option_classifier</code></td> <td><code>class diagnostics::option_classifier</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>struct diagnostic_option_id</code></td> <td><code>struct diagnostics::option_id</code></td> <td>New header: <code>diagnostics/option-id.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_option_manager</code></td> <td><code>class diagnostics::option_manager</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_output_file</code></td> <td><code>class diagnostics::output_file</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_output_format</code></td> <td><code>class diagnostics::sink</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_per_format_buffer</code></td> <td><code>class diagnostics::per_sink_buffer</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>struct diagnostic_source_printing_options</code></td> <td><code>struct diagnostics::source_printing_options</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_source_print_policy</code></td> <td><code>class diagnostics::source_print_policy</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>enum diagnostic_t</code></td> <td><code>enum class diagnostics::kind</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_text_output_format</code></td> <td><code>class diagnostics::text_sink</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_thread</code></td> <td><code>class diagnostics::paths::thread</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>typedef diagnostic_thread_id_t</code></td> <td><code>typedef diagnostics::paths::thread_id_t</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_path</code></td> <td><code>class diagnostics::paths::path</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class edit_context</code></td> <td><code>class diagnostics::changes::change_set</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class logical_location</code></td> <td><code>class diagnostics::logical_locations::key</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>enum logical_location_kind</code></td> <td><code>enum diagnostics::logical_locations::kind</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class logical_location_manager</code></td> <td><code>class diagnostics::logical_locations::manager</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class sarif_output_format</code></td> <td><code>class diagnostics::sarif_sink</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class diagnostic_sarif_format_buffer</code></td> <td><code>class diagnostics::sarif_sink_buffer</code></td> <td></td>\n+ </tr>\n+ <tr>\n+ <td><code>class option_manager</code></td> <td><code>class diagnostics::option_id_manager</code></td> <td>New header: <code>diagnostics/option-id-manager.h</code></td>\n+ </tr>\n+ </tbody>\n+</table>\n+\n+<table>\n+ <caption>Header file changes</caption>\n+ <thead>\n+ <tr>\n+ <th scope=\"col\">GCC 15 header</th>\n+ <th scope=\"col\">GCC 16 header</th>\n+ </tr>\n+ </thead>\n+ <tbody>\n+ <tr>\n+ <td><code>diagnostic-buffer.h</code></td> <td><code>diagnostics/buffering.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-client-data-hooks.h</code></td> <td><code>diagnostics/client-data-hooks.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-color.h</code></td> <td><code>diagnostics/color.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic.def</code></td> <td><code>diagnostics/kind.def</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-diagram.h</code></td> <td><code>diagnostics/diagram.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-format-html.h</code></td> <td><code>diagnostics/html-sink.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-format-sarif.h</code></td> <td><code>diagnostics/sarif-sink.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-format-text.h</code></td> <td><code>diagnostics/text-sink.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-label-effects.h</code></td> <td><code>diagnostics/source-printing-effects.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-macro-unwinding.h</code></td> <td><code>diagnostics/macro-unwinding.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-metadata.h</code></td> <td><code>diagnostics/metadata.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-output-file.h</code></td> <td><code>diagnostics/output-file.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-path.h</code></td> <td><code>diagnostics/paths.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>diagnostic-url.h</code></td> <td><code>diagnostics/url.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>edit-context.h</code></td> <td><code>diagnostics/changes.h</code></td>\n+ </tr>\n+ <tr>\n+ <td>File cache types of <code>input.h</code></td> <td><code>diagnostics/file-cache.h</code></td>\n+ </tr>\n+ <tr>\n+ <td><code>logical-locations.h</code></td> <td><code>diagnostics/logical-locations.h</code></td>\n+ </tr>\n+ </tbody>\n+</table>\n+\n </body>\n </html>\n", "prefixes": [ "pushed" ] }