The following functions make constructors for array, struct and union types.
The constructor rvalue can be used for assignment to locals. It can be used to initialize global variables with gcc_jit_global_set_initializer_rvalue(). It can also be used as a temporary value for function calls and return values, but its address can’t be taken.
Note that arrays in libgccjit do not collapse to pointers like in C. I.e. if an array constructor is used as e.g. a return value, the whole array would be returned by value - array constructors can be assigned to array variables.
The constructor can contain nested constructors.
Note that a string literal rvalue can’t be used to construct a char array; the latter needs one rvalue for each char.
These entrypoints were added in LIBGCCJIT_ABI_19; you can test for their presence using:
#ifdef LIBGCCJIT_HAVE_CTORS
Create a constructor for an array as an rvalue.
Returns NULL on error. values are copied and
do not have to outlive the context.
type specifies what the constructor will build and has to be
an array.
num_values specifies the number of elements in values and
it can’t have more elements than the array type.
Each value in values sets the corresponding value in the array.
If the array type itself has more elements than values, the
left-over elements will be zeroed.
Each value in values need to be the same unqualified type as the
array type’s element type.
If num_values is 0, the values parameter will be
ignored and zero initialization will be used.
This entrypoint was added in LIBGCCJIT_ABI_19; you can test for its presence using:
#ifdef LIBGCCJIT_HAVE_CTORS
Create a constructor for a struct as an rvalue.
Returns NULL on error. The two parameter arrays are copied and do not have to outlive the context.
type specifies what the constructor will build and has to be
a struct.
num_values specifies the number of elements in values.
fields need to have the same length as values, or be NULL.
If fields is null, the values are applied in definition order.
Otherwise, each field in fields specifies which field in the struct to
set to the corresponding value in values. fields and values
are paired by index.
The fields in fields have to be in definition order, but there
can be gaps. Any field in the struct that is not specified in
fields will be zeroed.
The fields in fields need to be the same objects that were used
to create the struct.
Each value has to have have the same unqualified type as the field it is applied to.
A NULL value element in values is a shorthand for zero initialization
of the corresponding field.
If num_values is 0, the array parameters will be
ignored and zero initialization will be used.
This entrypoint was added in LIBGCCJIT_ABI_19; you can test for its presence using:
#ifdef LIBGCCJIT_HAVE_CTORS
Create a constructor for a union as an rvalue.
Returns NULL on error.
type specifies what the constructor will build and has to be
an union.
field specifies which field to set. If it is NULL, the first
field in the union will be set.‘‘field‘‘ need to be the same object
that were used to create the union.
value specifies what value to set the corresponding field to.
If value is NULL, zero initialization will be used.
Each value has to have have the same unqualified type as the field it is applied to.
This entrypoint was added in LIBGCCJIT_ABI_19; you can test for its presence using:
#ifdef LIBGCCJIT_HAVE_CTORS