Self-referential union?

Joe Finney me@spxtr.net
Sun Feb 2 18:13:53 GMT 2025


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.


More information about the Jit mailing list