diff options
author | Petter Tomner <tomner@kth.se> | 2021-11-29 20:44:07 +0100 |
---|---|---|
committer | Petter Tomner <tomner@kth.se> | 2021-12-14 18:18:07 +0100 |
commit | 3736837806fdb26daa51300bee1554bef89db9fe (patch) | |
tree | 874865030ed635b65e50b15bc717891b8047afd6 /gcc/jit/jit-playback.h | |
parent | 1c613165a55b212c59a83796b20a1d555e096504 (diff) | |
download | gcc-3736837806fdb26daa51300bee1554bef89db9fe.zip gcc-3736837806fdb26daa51300bee1554bef89db9fe.tar.gz gcc-3736837806fdb26daa51300bee1554bef89db9fe.tar.bz2 |
Add support for global rvalue initialization and constructors
This patch adds support for initialization of global variables
with rvalues and creating constructors for array, struct and
union types which can be used as rvalues.
Signed-off-by:
2021-12-14 Petter Tomner <tomner@kth.se>
gcc/jit/
* jit-common.h: New enum
* jit-playback.c : Folding an setting intitial
(global_new_decl) : Handle const global generation
(new_global) : New flag
(global_set_init_rvalue) : New
(new_ctor) : New
(new_global_initialized) : Flag
(as_truth_value) : Fold
(new_unary_op) : Fold
(new_binary_op) : Fold
(new_comparison) : Fold
(new_array_access) : Fold
(new_dereference) : Fold
(get_address) : Fold
* jit-playback.h :
(global_set_init_rvalue) : New
(new_ctor) : New
* jit-recording.c :
* jit-recording.h :
(new_global_init_rvalue) : New
(new_ctor) : New
(ctor) : New, inherits rvalue
(global_init_rvalue) : New, inherits memento
(type::is_union) : New
* libgccjit++.h : New entrypoints, see C-header
* libgccjit.c : See .h
* libgccjit.h : New entrypoints
(gcc_jit_context_new_array_constructor) : New
(gcc_jit_context_new_struct_constructor) : New
(gcc_jit_context_new_union_constructor) : New
(gcc_jit_global_set_initializer_rvalue) : New
(LIBGCCJIT_HAVE_CTORS) : New feuture macro
* libgccjit.map : New entrypoints added to ABI 19
* docs/topics/expressions.rst : Updated docs
gcc/testsuite/
* jit.dg/all-non-failing-tests.h: Added two tests
* jit.dg/test-error-ctor-array-wrong-obj.c: New
* jit.dg/test-error-ctor-struct-too-big.c: New
* jit.dg/test-error-ctor-struct-wrong-field-obj.c: New
* jit.dg/test-error-ctor-struct-wrong-type.c: New
* jit.dg/test-error-ctor-struct-wrong-type2.c
* jit.dg/test-error-ctor-union-wrong-field-name.c: New
* jit.dg/test-error-global-already-init.c: New
* jit.dg/test-error-global-common-section.c: New
* jit.dg/test-error-global-init-too-small-array.c: New
* jit.dg/test-error-global-lvalue-init.c: New
* jit.dg/test-error-global-nonconst-init.c: New
* jit.dg/test-global-init-rvalue.c: New
* jit.dg/test-local-init-rvalue.c: New
Diffstat (limited to 'gcc/jit/jit-playback.h')
-rw-r--r-- | gcc/jit/jit-playback.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h index 21ddffb..6ca492c 100644 --- a/gcc/jit/jit-playback.h +++ b/gcc/jit/jit-playback.h @@ -109,7 +109,8 @@ public: new_global (location *loc, enum gcc_jit_global_kind kind, type *type, - const char *name); + const char *name, + enum global_var_flags flags); lvalue * new_global_initialized (location *loc, @@ -118,7 +119,19 @@ public: size_t element_size, size_t initializer_num_elem, const void *initializer, - const char *name); + const char *name, + enum global_var_flags flags); + + rvalue * + new_ctor (location *log, + type *type, + const auto_vec<field*> *fields, + const auto_vec<rvalue*> *rvalues); + + + void + global_set_init_rvalue (lvalue* variable, + rvalue* init); template <typename HOST_TYPE> rvalue * @@ -286,7 +299,8 @@ private: global_new_decl (location *loc, enum gcc_jit_global_kind kind, type *type, - const char *name); + const char *name, + enum global_var_flags flags); lvalue * global_finalize_lvalue (tree inner); |