Add support for global rvalue initialization and constructors
authorPetter Tomner <tomner@kth.se>
Mon, 29 Nov 2021 19:44:07 +0000 (20:44 +0100)
committerPetter Tomner <tomner@kth.se>
Tue, 14 Dec 2021 17:18:07 +0000 (18:18 +0100)
commit3736837806fdb26daa51300bee1554bef89db9fe
tree874865030ed635b65e50b15bc717891b8047afd6
parent1c613165a55b212c59a83796b20a1d555e096504
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
24 files changed:
gcc/jit/docs/topics/expressions.rst
gcc/jit/jit-common.h
gcc/jit/jit-playback.c
gcc/jit/jit-playback.h
gcc/jit/jit-recording.c
gcc/jit/jit-recording.h
gcc/jit/libgccjit++.h
gcc/jit/libgccjit.c
gcc/jit/libgccjit.h
gcc/jit/libgccjit.map
gcc/testsuite/jit.dg/all-non-failing-tests.h
gcc/testsuite/jit.dg/test-error-ctor-array-wrong-obj.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-ctor-struct-too-big.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-field-obj.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-type.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-type2.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-ctor-union-wrong-field-name.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-global-already-init.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-global-common-section.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-global-init-too-small-array.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-global-lvalue-init.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-error-global-nonconst-init.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-global-init-rvalue.c [new file with mode: 0644]
gcc/testsuite/jit.dg/test-local-init-rvalue.c [new file with mode: 0644]