diff options
author | Tom Tromey <tom@tromey.com> | 2024-02-26 18:21:03 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2024-02-29 08:50:06 -0700 |
commit | bc0e18a960f9dff3e740f4d0cb5b25b3f68d920a (patch) | |
tree | 172401564fb0380b8dfc80a9c78b7353b40b53f8 /include | |
parent | 54137725cfb968803be0f5fa76906839d79a3067 (diff) | |
download | gcc-bc0e18a960f9dff3e740f4d0cb5b25b3f68d920a.zip gcc-bc0e18a960f9dff3e740f4d0cb5b25b3f68d920a.tar.gz gcc-bc0e18a960f9dff3e740f4d0cb5b25b3f68d920a.tar.bz2 |
Fix PR libcc1/113977
PR libcc1/113977 points out a case where a simple expression is
rejected with a compiler error message. The bug here is that gdb does
not inform the plugin of the correct alignment -- in fact, there is no
way to do that.
This patch adds a new method to allow the alignment to be set, and
bumps the C front end protocol version.
It also includes some updates to various comments in 'include', done
here to simplify the merge to binutils-gdb.
include
* gcc-cp-interface.h (gcc_cp_fe_context_function): Update
comment.
* gcc-c-interface.h (enum gcc_c_api_version) <GCC_C_FE_VERSION_2>:
New constant.
(gcc_c_fe_context_function): Update comment.
* gcc-c-fe.def (finish_record_with_alignment): New method.
Update documentation.
libcc1
PR libcc1/113977
* libcc1plugin.cc (plugin_finish_record_or_union): New function.
(plugin_finish_record_or_union): Rewrite.
(plugin_init): Use GCC_C_FE_VERSION_2.
* libcc1.cc (c_vtable): Use GCC_C_FE_VERSION_2.
(gcc_c_fe_context): Check for GCC_C_FE_VERSION_2.
Diffstat (limited to 'include')
-rw-r--r-- | include/gcc-c-fe.def | 13 | ||||
-rw-r--r-- | include/gcc-c-interface.h | 11 | ||||
-rw-r--r-- | include/gcc-cp-interface.h | 6 |
3 files changed, 26 insertions, 4 deletions
diff --git a/include/gcc-c-fe.def b/include/gcc-c-fe.def index 36a7654..cb7cf19 100644 --- a/include/gcc-c-fe.def +++ b/include/gcc-c-fe.def @@ -89,7 +89,10 @@ GCC_METHOD5 (int /* bool */, build_add_field, /* After all the fields have been added to a struct or union, the struct or union type must be "finished". This does some final - cleanups in GCC. */ + cleanups in GCC. + + Note that when using GCC_C_FE_VERSION_2, it is preferable to call + finish_record_with_alignment instead. */ GCC_METHOD2 (int /* bool */, finish_record_or_union, gcc_type, /* Argument RECORD_OR_UNION_TYPE. */ @@ -220,3 +223,11 @@ GCC_METHOD2 (gcc_type, float_type, unsigned long, /* Argument SIZE_IN_BYTES. */ const char *) /* Argument BUILTIN_NAME. */ +/* New in GCC_FE_VERSION_2. Like finish_record_or_union but the caller also + supplies the alignment. If the alignment is 0, this acts identically to + finish_record_or_union. */ + +GCC_METHOD3 (int /* bool */, finish_record_with_alignment, + gcc_type, /* Argument RECORD_OR_UNION_TYPE. */ + unsigned long, /* Argument SIZE_IN_BYTES. */ + unsigned long) /* Argument ALIGNMENT. */ diff --git a/include/gcc-c-interface.h b/include/gcc-c-interface.h index feece1e..700d748 100644 --- a/include/gcc-c-interface.h +++ b/include/gcc-c-interface.h @@ -45,7 +45,10 @@ enum gcc_c_api_version /* Added char_type. Added new version of int_type and float_type, deprecated int_type_v0 and float_type_v0. */ - GCC_C_FE_VERSION_1 = 1 + GCC_C_FE_VERSION_1 = 1, + + /* Added finish_record_with_alignment method. */ + GCC_C_FE_VERSION_2 = 2, }; /* Qualifiers. */ @@ -198,7 +201,11 @@ struct gcc_c_context /* The type of the initialization function. The caller passes in the desired base version and desired C-specific version. If the request can be satisfied, a compatible gcc_context object will be - returned. Otherwise, the function returns NULL. */ + returned. In particular, this may return a context object with a higher + actual version number than was requested, provided the higher version is + fully compatible. (As of GCC_C_FE_VERSION_2, this is always true.) + + Otherwise, the function returns NULL. */ typedef struct gcc_c_context *gcc_c_fe_context_function (enum gcc_base_api_version, diff --git a/include/gcc-cp-interface.h b/include/gcc-cp-interface.h index 2f95072..15b911c 100644 --- a/include/gcc-cp-interface.h +++ b/include/gcc-cp-interface.h @@ -483,7 +483,11 @@ struct gcc_cp_context /* The type of the initialization function. The caller passes in the desired base version and desired C-specific version. If the request can be satisfied, a compatible gcc_context object will be - returned. Otherwise, the function returns NULL. */ + returned. In particular, this may return a context object with a higher + actual version number than was requested, provided the higher version is + fully compatible. + + Otherwise, the function returns NULL. */ typedef struct gcc_cp_context *gcc_cp_fe_context_function (enum gcc_base_api_version, |