I remarked previously that diff-delta.c does not work with FLEX_ARRAY=1. Here is one attempt to change this. It conceivably still suffers from potential misalignment problems (which would likely need some union type magic to avoid 100%), but at least the index calculation should not go as horribly wrong as previously. --- Junio C Hamano <gitster@xxxxxxxxx> writes: > "Shawn O. Pearce" <spearce@xxxxxxxxxxx> writes: > >> I'll try to track it down tomorrow. But the immediate workaround was >> to just add '-DFLEX_ARRAY=/* empty */' to my CFLAGS and recompile >> the world. This compiler accepts the empty FLEX_ARRAY macro but >> I'm not sure what feature test(s) would be necessary to make Git >> able to automatically set that, seeing as how the tests defined in >> 8e97 are perfectly reasonable and didn't pass. >> ..., but will try to come up with a reasonable >> detection patch.... > > Actually I would be more worried about the breakage in FLEX_ARRAY=1 case > than misdetection. Even if your compiler supports the flexible array > members, the fallback to FLEX_ARRAY=1 ought to work and you are seeing a > case where it doesn't. diff-delta.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/diff-delta.c b/diff-delta.c index 9e440a9..099235c 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -247,7 +247,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize) /* Now create the packed index in array form rather than * linked lists */ - memsize = sizeof(*index) + memsize = (char *)&index->hash - (char *)index + sizeof(*packed_hash) * (hsize+1) + sizeof(*packed_entry) * entries; @@ -264,7 +264,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize) index->src_size = bufsize; index->hash_mask = hmask; - mem = index + 1; + mem = &index->hash; packed_hash = mem; mem = packed_hash + (hsize+1); packed_entry = mem; -- 1.5.3.6.995.ge8abd - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html