Formatted gcc patch

This commit is contained in:
York Jasper Niebuhr 2025-10-17 22:06:25 +02:00
parent f0f800d1c4
commit 7ef422b824

View File

@ -1,20 +1,20 @@
From 4c2d49dcf5e9a1090313cd9d922b63e280fc4d54 Mon Sep 17 00:00:00 2001 From ab8884cbf3712f939556fc7789bbf32132c7ff1a Mon Sep 17 00:00:00 2001
From: York Jasper Niebuhr <yjnworkstation@gmail.com> From: York Jasper Niebuhr <yjnworkstation@gmail.com>
Date: Fri, 17 Oct 2025 21:17:30 +0200 Date: Fri, 17 Oct 2025 22:04:41 +0200
Subject: [PATCH] unformatted component ref callback Subject: [PATCH] PLUGIN_BUILD_COMPONENT_REF callback
--- ---
gcc/c-family/c-common.cc | 48 +++++++++++++++++++++++++++++++--------- gcc/c-family/c-common.cc | 48 +++++++++++++++++++++++++++++++---------
gcc/c-family/c-common.h | 3 ++- gcc/c-family/c-common.h | 3 ++-
gcc/c/c-parser.cc | 2 +- gcc/c/c-parser.cc | 2 +-
gcc/c/c-typeck.cc | 9 ++++++++ gcc/c/c-typeck.cc | 12 ++++++++++
gcc/doc/plugins.texi | 6 +++++ gcc/doc/plugins.texi | 6 +++++
gcc/plugin.cc | 2 ++ gcc/plugin.cc | 2 ++
gcc/plugin.def | 6 +++++ gcc/plugin.def | 6 +++++
7 files changed, 63 insertions(+), 13 deletions(-) 7 files changed, 66 insertions(+), 13 deletions(-)
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index 587d76461e9..f23093f5a66 100644 index 587d76461e9..d34edfaa688 100644
--- a/gcc/c-family/c-common.cc --- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc
@@ -7076,43 +7076,48 @@ c_common_to_target_charset (HOST_WIDE_INT c) @@ -7076,43 +7076,48 @@ c_common_to_target_charset (HOST_WIDE_INT c)
@ -110,7 +110,7 @@ index 587d76461e9..f23093f5a66 100644
+tree +tree
+fold_offsetof_maybe (tree expr, tree type) +fold_offsetof_maybe (tree expr, tree type)
+{ +{
+ /* expr might not have the correct structure, thus folding may fail */ + /* expr might not have the correct structure, thus folding may fail. */
+ tree maybe_folded = fold_offsetof (expr, type, ERROR_MARK, true); + tree maybe_folded = fold_offsetof (expr, type, ERROR_MARK, true);
+ if (maybe_folded != error_mark_node) + if (maybe_folded != error_mark_node)
+ return maybe_folded; + return maybe_folded;
@ -152,7 +152,7 @@ index 22ec0f849b7..6a8a5d58e6d 100644
} }
break; break;
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 55d896e02df..e76002151bd 100644 index 55d896e02df..aff6dce36fb 100644
--- a/gcc/c/c-typeck.cc --- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc
@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
@ -171,30 +171,33 @@ index 55d896e02df..e76002151bd 100644
/* Return true if EXP is a null pointer constant, false otherwise. */ /* Return true if EXP is a null pointer constant, false otherwise. */
@@ -3174,6 +3176,13 @@ build_component_ref (location_t loc, tree datum, tree component, @@ -3174,6 +3176,16 @@ build_component_ref (location_t loc, tree datum, tree component,
else if (TREE_DEPRECATED (subdatum)) else if (TREE_DEPRECATED (subdatum))
warn_deprecated_use (subdatum, NULL_TREE); warn_deprecated_use (subdatum, NULL_TREE);
+ tree pre_cb_type = TREE_TYPE (ref); + tree pre_cb_type = TREE_TYPE (ref);
+ if (invoke_plugin_callbacks (PLUGIN_BUILD_COMPONENT_REF, &ref) == PLUGEVT_SUCCESS && + if (invoke_plugin_callbacks (PLUGIN_BUILD_COMPONENT_REF, &ref)
+ !comptypes (TREE_TYPE (ref), pre_cb_type)) + == PLUGEVT_SUCCESS
+ && !comptypes (TREE_TYPE (ref), pre_cb_type))
+ { + {
+ error_at (EXPR_LOCATION (ref), "PLUGIN_BUILD_COMPONENT_REF callback returned expression of incompatible type"); + error_at (EXPR_LOCATION (ref),
+ "PLUGIN_BUILD_COMPONENT_REF callback returned"
+ " expression of incompatible type");
+ } + }
+ +
datum = ref; datum = ref;
field = TREE_CHAIN (field); field = TREE_CHAIN (field);
diff --git a/gcc/doc/plugins.texi b/gcc/doc/plugins.texi diff --git a/gcc/doc/plugins.texi b/gcc/doc/plugins.texi
index c11167a34ef..942e2e41b90 100644 index c11167a34ef..312f178fab4 100644
--- a/gcc/doc/plugins.texi --- a/gcc/doc/plugins.texi
+++ b/gcc/doc/plugins.texi +++ b/gcc/doc/plugins.texi
@@ -222,6 +222,12 @@ enum plugin_event @@ -222,6 +222,12 @@ enum plugin_event
ana::plugin_analyzer_init_iface *. */ ana::plugin_analyzer_init_iface *. */
PLUGIN_ANALYZER_INIT, PLUGIN_ANALYZER_INIT,
+ /* Called by the C front end when a COMPONENT_REF node is built. + /* Called by the C front end when a COMPONENT_REF node is built. The
+ The callback receives a pointer to the COMPONENT_REF tree (of type 'tree *'). + callback receives a pointer to the COMPONENT_REF tree (of type 'tree *').
+ Plugins may replace the node by assigning through the pointer, but any + Plugins may replace the node by assigning through the pointer, but any
+ replacement must be type-compatible with the original node. */ + replacement must be type-compatible with the original node. */
+ PLUGIN_BUILD_COMPONENT_REF, + PLUGIN_BUILD_COMPONENT_REF,