On Mon, Jan 24 2022, Ævar Arnfjörð Bjarmason wrote: > On Mon, Jan 24 2022, Han-Wen Nienhuys wrote: > >> On Mon, Jan 24, 2022 at 8:44 PM Ævar Arnfjörð Bjarmason >> <avarab@xxxxxxxxx> 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... Just a reminder that now with this landed on master we've hard broken compilation on that version of xlc: avar@gcc111:[/home/avar]xlc -qversion IBM XL C/C++ for AIX, V12.1 (5765-J02, 5725-C72) Version: 12.01.0000.0000 The error is: "reftable/generic.c", line 133.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_ref_record" is not allowed. "reftable/generic.c", line 145.26: 1506-196 (S) Initialization between types "char*" and "struct reftable_log_record" is not allowed. Is there really no workaround we can think of for this?