From: Ævar Arnfjörð Bjarmason Date: Mon, 24 Jan 2022 21:54:29 GMT Subject: Re: [PATCH v7 14/16] reftable: make reftable_record a tagged union Message-ID: <220124.86a6fkhk8s.gmgdl@evledraar.gmail.com> In-Reply-To: On Mon, Jan 24 2022, Han-Wen Nienhuys wrote: > On Mon, Jan 24, 2022 at 8:44 PM Ævar Arnfjörð Bjarmason > wrote: > >> I didn't test the v6 on xlc on AIX 7.1, but found that it refuses to >> compile this code (but the one on AIX 7.2 is OK with it): >> >> "reftable/generic.c", line 135.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_ref_record" is not allowed. >> "reftable/generic.c", line 147.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_log_record" is not allowed. >> "reftable/writer.c", line 261.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_ref_record" is not allowed. >> "reftable/writer.c", line 312.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_log_record" is not allowed. >> "reftable/writer.c", line 406.45: 1506-196 (S) Initialization between types "unsigned long long" and "struct reftable_index_record" is not allowed. >> > >> I.e. you're dereferencing a struct type here to get at its first member, > > No, that's not what I'm doing. > >> > + struct reftable_record rec = { >> > + .type = BLOCK_TYPE_REF, >> > + .u.ref = *ref, >> > + }; > > reftable_record is tagged union, and u.ref is a reftable_ref_record. I > intend to shallow-copying the parameter (a reftable_record called > 'ref') into 'rec.u.ref' , precisely as it is written. > > Does this patch pass the unittests? No, sorry about that. It fails. I didn't have time to run them earlier (and it takes a while on that platform). I don't know how to work around it then...