Hello Junio, On Tue, 20 Nov 2007, Junio C Hamano wrote: > I knew it would work on Solaris with gcc and cc that do not understand > flexible array members, but I am a bit worried about other environments, > where flexible array members are properly supported. They've been > happily using member[] but with the patch they suddenly start wasting a > cell. > > But we should do this sooner rather than later to find out any breakage, > and give people on platforms with a cc that supports flexible array > members and care about wasted memory enough time to send patches to > support their compiler in the way similar to how gcc is supported. > > But I cannot use your message with whitespace-broken patch (note > "format=flawed") and insufficient commit log message, which means I have > to do this myself. Not tonight... sorry for the whitespace-issues. I have attached the patch again with improved log message and will turn off format-flawed for this email. Please let me know if this one is ok and feel free to fix it. Log message starts here: Fix "identifier redeclared" compilation error with SUN cc. The problem is caused by incomplete arrays like struct foo { ... char last_member_that_is_flexible[]; } which cannot be handled by certain compilers. The solution is to change the last member to either char last_member_that_is_flexible[0] or char last_member_that_is_flexible[1] as required. Currently GNU CC can handle [] format for version 3 and later. Earlier versions need [0]. Non-GNU compiler use the safe form [1]. Signed-off-by: Guido Ostkamp <git@xxxxxxxxxxxxxxxxxxx> --- git-compat-util.h | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/git-compat-util.h b/git-compat-util.h index 276a437..97759fd 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -4,11 +4,20 @@ #define _FILE_OFFSET_BITS 64 #ifndef FLEX_ARRAY -#if defined(__GNUC__) && (__GNUC__ < 3) +#if defined(__GNUC__) +#if (__GNUC__ < 3) #define FLEX_ARRAY 0 #else #define FLEX_ARRAY /* empty */ #endif +#else +/* more cases we know we can use 0 or empty can come here */ +#endif +#endif + +/* if still undefined, default to the safe, old fashioned way */ +#ifndef FLEX_ARRAY +#define FLEX_ARRAY 1 #endif #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) -- 1.5.3.6.728.gea559 - 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