]> git.ipfire.org Git - thirdparty/gcc.git/commit
Add a simulate_record_decl lang hook
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 2 Nov 2021 10:51:23 +0000 (10:51 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Tue, 2 Nov 2021 10:51:23 +0000 (10:51 +0000)
commitd5c6604f42034e36b149f899c5ddb93025a645b4
tree3febb7400753ff374b3d69fb256da9e0a581a6a7
parentd8fe39f417bebd34498ea60a3815c2f420116ecf
Add a simulate_record_decl lang hook

This patch adds a lang hook for defining a struct/RECORD_TYPE
“as if” it had appeared directly in the source code.  It follows
the similar existing hook for enums.

It's the caller's responsibility to create the fields
(as FIELD_DECLs) but the hook's responsibility to create
and declare the associated RECORD_TYPE.

For now the hook is hard-coded to do the equivalent of:

  typedef struct NAME { FIELDS } NAME;

but this could be controlled by an extra parameter if some callers
want a different behaviour in future.

The motivating use case is to allow the long list of struct
definitions in arm_neon.h to be provided by the compiler,
which in turn unblocks various arm_neon.h optimisations.

gcc/
* langhooks.h (lang_hooks_for_types::simulate_record_decl): New hook.
* langhooks-def.h (lhd_simulate_record_decl): Declare.
(LANG_HOOKS_SIMULATE_RECORD_DECL): Define.
(LANG_HOOKS_FOR_TYPES_INITIALIZER): Include it.
* langhooks.c (lhd_simulate_record_decl): New function.

gcc/c/
* c-tree.h (c_simulate_record_decl): Declare.
* c-objc-common.h (LANG_HOOKS_SIMULATE_RECORD_DECL): Override.
* c-decl.c (c_simulate_record_decl): New function.

gcc/cp/
* decl.c: Include langhooks-def.h.
(cxx_simulate_record_decl): New function.
* cp-objcp-common.h (cxx_simulate_record_decl): Declare.
(LANG_HOOKS_SIMULATE_RECORD_DECL): Override.
gcc/c/c-decl.c
gcc/c/c-objc-common.h
gcc/c/c-tree.h
gcc/cp/cp-objcp-common.h
gcc/cp/decl.c
gcc/langhooks-def.h
gcc/langhooks.c
gcc/langhooks.h