Thanks for the response. > On most reasonable computers, every data pointer has the same size and > representation (so same size, same alignment, internally represented as some > "word" eg 64 bits). > > So you could at least make the libgccjit calls to build the equivalent of > > union u { > int x; > void* p; > }; > > and then use libgccjit casts to transform the p to a union u* pointer. > > Assuming your libgccjit context has some optimization enabled, the generated > code should be the same.
I was either thinking of doing this, or else wrapping the union in a struct, as in struct s { union { int x; struct s* p; } u; }; I think in both cases the generated code should optimize to the same? I suspect that it would be a pretty substantial change to introduce a gcc_jit_union type and gcc_jit_context_new_opaque_union, to match structs, but not having those makes this feature significantly more complicated to implement.