GCC patch v2 description

This commit is contained in:
York Jasper Niebuhr 2025-10-30 13:42:15 +01:00
parent 060d7685c6
commit 68c42910dd

View File

@ -1,7 +1,49 @@
From 0d2945f8e3c1b89b122fef0ded3973dfae2eb904 Mon Sep 17 00:00:00 2001 From 0d2945f8e3c1b89b122fef0ded3973dfae2eb904 Mon Sep 17 00:00:00 2001
From: York Jasper Niebuhr <yjnworkstation@gmail.com> From: York Jasper Niebuhr <yjnworkstation@gmail.com>
Date: Thu, 30 Oct 2025 13:12:24 +0100 Date: Thu, 30 Oct 2025 13:12:24 +0100
Subject: [PATCH] c_parse_component_ref callback Subject: [PATCH] c, plugin: Add c_parse_component_ref callback
This patch supersedes my earlier submission:
https://gcc.gnu.org/pipermail/gcc-patches/2025-October/697934.html
It adds the c_parse_component_ref callback that plugins can register
using register_c_parse_component_ref_cb. The callback receives the
parsed COMPONENT_REF tree and may replace it by returning a new tree.
Replacements that are not type-compatible with the original are ignored.
The callback allows plugins to observe or instrument struct member
accesses that would otherwise be lost due to folding before the earliest
possible plugin pass or hook. In particular, the fold_offsetof
functionality removes all traces of type and member information in
offsetof-like trees, leaving only an integer constant for plugins to
inspect.
A typical use case would be to replace a select set of COMPONENT_REF
nodes with type-compatible expressions calling a placeholder function,
e.g. __deferred_offsetof(type, member). These calls cannot be folded
away and thus remain available for plugin analysis in later passes.
Offsets not of interest can be left untouched, preserving their const
qualification and use in static assertions.
Allowing the callback to alter COMPONENT_REF nodes required minor
adjustments to fold_offsetof, which assumes a specific input format.
The parser paths that cannot guarantee that format after invoking the
callback now use fold_offsetof_maybe(), which attempts to fold normally
but, on failure, casts the unfolded expressions to the desired output
type.
If the callback is not used to alter COMPONENT_REF trees, there is **no
change** in GCCs behavior.
Since this callback targets fairly niche use cases, I opted to not make
it part of the public plugin API so there is no need for maintenance
guarantees.
**Changes since the first proposal:**
* Moved callback invocation to a higher level (the parser)
* The callback is no longer part of the public plugin API
Signed-off-by: York Jasper Niebuhr <yjnworkstation@gmail.com>
--- ---
gcc/c-family/c-common.cc | 48 +++++++++++++++++++++------ gcc/c-family/c-common.cc | 48 +++++++++++++++++++++------