]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable: make assignments portable to AIX xlc v12.01
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Mon, 28 Mar 2022 19:10:04 +0000 (21:10 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 28 Mar 2022 20:58:10 +0000 (13:58 -0700)
Change the assignment syntax introduced in 66c0dabab5e (reftable: make
reftable_record a tagged union, 2022-01-20) to be portable to AIX xlc
v12.1:

    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 emitted before this was e.g.:

    "reftable/generic.c", line 133.26: 1506-196 (S) Initialization
    between types "char*" and "struct reftable_ref_record" is not
    allowed.

The syntax in the pre-image is supported by e.g. xlc 13.01 on a newer
AIX version:

    avar@gcc119:[/home/avar]xlc -qversion
    IBM XL C/C++ for AIX, V13.1.3 (5725-C72, 5765-J07)
    Version: 13.01.0003.0006

But as we've otherwise supported this compiler let's not break it
entirely if it's easy to work around it.

Suggested-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/generic.c
reftable/record_test.c
reftable/writer.c

index b27d152e89ab65d368fc0a0a189862ed176318d3..57f8032db941ca77f5c61d0e6d38268c56958be9 100644 (file)
@@ -130,7 +130,9 @@ int reftable_iterator_next_ref(struct reftable_iterator *it,
 {
        struct reftable_record rec = {
                .type = BLOCK_TYPE_REF,
-               .u.ref = *ref,
+               .u = {
+                       .ref = *ref
+               },
        };
        int err = iterator_next(it, &rec);
        *ref = rec.u.ref;
@@ -142,7 +144,9 @@ int reftable_iterator_next_log(struct reftable_iterator *it,
 {
        struct reftable_record rec = {
                .type = BLOCK_TYPE_LOG,
-               .u.log = *log,
+               .u = {
+                       .log = *log,
+               },
        };
        int err = iterator_next(it, &rec);
        *log = rec.u.log;
index f91ea5e88305d466188c8f48ce6fbaf4ef7d8ebc..70ae78feca4f11cdb50f4fdcb08d90118bf487df 100644 (file)
@@ -339,7 +339,9 @@ static void test_reftable_obj_record_roundtrip(void)
                };
                struct reftable_record in = {
                        .type = BLOCK_TYPE_OBJ,
-                       .u.obj = recs[i],
+                       .u = {
+                               .obj = recs[i],
+                       },
                };
                struct strbuf key = STRBUF_INIT;
                struct reftable_record out = { .type = BLOCK_TYPE_OBJ };
index 6d979e245ffbddd0bdd1ca43bf3725c5683633a7..427f1317c6be6121a733fa206ce6e27ab5e029b8 100644 (file)
@@ -257,7 +257,9 @@ int reftable_writer_add_ref(struct reftable_writer *w,
 {
        struct reftable_record rec = {
                .type = BLOCK_TYPE_REF,
-               .u.ref = *ref,
+               .u = {
+                       .ref = *ref
+               },
        };
        int err = 0;
 
@@ -308,7 +310,9 @@ static int reftable_writer_add_log_verbatim(struct reftable_writer *w,
 {
        struct reftable_record rec = {
                .type = BLOCK_TYPE_LOG,
-               .u.log = *log,
+               .u = {
+                       .log = *log,
+               },
        };
        if (w->block_writer &&
            block_writer_type(w->block_writer) == BLOCK_TYPE_REF) {
@@ -401,7 +405,9 @@ static int writer_finish_section(struct reftable_writer *w)
                for (i = 0; i < idx_len; i++) {
                        struct reftable_record rec = {
                                .type = BLOCK_TYPE_INDEX,
-                               .u.idx = idx[i],
+                               .u = {
+                                       .idx = idx[i],
+                               },
                        };
                        if (block_writer_add(w->block_writer, &rec) == 0) {
                                continue;