git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Fix "identifier redeclared" compilation error with SUN cc.

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 16, 2007, 04:58 UTC
Message-ID
<7vd4ua3hww.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<1195089303-28085-1-git-send-email-B.Steinbrink@gmx.de>
Björn Steinbrink <B.Steinbrink@gmx.de> writes:
Show 8 quoted lines
> Guido, could you please test this patch?
>
> I have no clue which versions of SUN's cc are affected, so I simply enabled
> the workaround for all versions. Someone with more knowledge about that
> should probably limit the check to only do that for the broken versions.
>
>  git-compat-util.h |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
Show 13 quoted lines
> diff --git a/git-compat-util.h b/git-compat-util.h
> index ede9408..c3ff4b4 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -6,6 +6,8 @@
>  #ifndef FLEX_ARRAY
>  #if defined(__GNUC__) && (__GNUC__ < 3)
>  #define FLEX_ARRAY 0
> +#elif defined(sun) || defined(__SUN__)
> +#define FLEX_ARRAY 1
>  #else
>  #define FLEX_ARRAY /* empty */
>  #endif

This feels a bit too narrow and too broad at the same time, doesn't it?

As I suspect there are other compilers that do not implement flexible array members (so you cannot use "member[]") nor older gcc extension of zero sized member (so you cannot use "member[0]" either), this checking specifically for Sun is too narrow.

On the other hand, as you said, this is too broad, because not everybody may be using the SUN compiler on Sun, nor the version that does not understand flexible array members.

But being broad should always be safer, albeit a bit wasteful.
How about doing it this way?
  # ifndef FLEX_ARRAY
  #   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
The basic idea is:
 * The user (from Makefile command line, config.mak, or you
   could add autoconf test) can pass -DFLEX_ARRAY=... to specify
   exactly what should happen;
 * Otherwise, if we happen to know for sure that we can use "0"
   or "/* empty */" with the compiler, we define FLEX_ARRAY;
   currently we know such things for gcc.
 * For everybody else, we use safer default of "1".  IOW, if you
   know your compiler does not grok "/* empty */" nor "0", you
   do not have to do anything special but use the default case
   as everybody else.
Previous: Junio C HamanoNext: Björn Steinbrink
Message 19 of 31 in “Fix Solaris Workshop Compiler issues”
  1. Fix Solaris Workshop Compiler issuesGuido Ostkamp, Nov 14, 2007
  2. Alex RiesenNov 14, 2007
  3. Junio C HamanoNov 14, 2007
  4. Guido OstkampNov 14, 2007
  5. Alex RiesenNov 14, 2007
  6. Björn SteinbrinkNov 15, 2007
  7. Junio C HamanoNov 15, 2007
  8. Björn SteinbrinkNov 15, 2007
  9. Junio C HamanoNov 15, 2007
  10. Björn SteinbrinkNov 15, 2007
  11. Fix "identifier redeclared" compilation error with SUN cc.Björn Steinbrink, Nov 15, 2007
  12. Guido OstkampNov 15, 2007
  13. Junio C HamanoNov 15, 2007
  14. Guido OstkampNov 15, 2007
  15. Add mkdtemp() workaround for Sun Solaris 10Guido Ostkamp, Nov 16, 2007
  16. [RFH] Solaris portabilityJunio C Hamano, Nov 17, 2007
  17. Guido OstkampNov 18, 2007
  18. Junio C HamanoNov 18, 2007
  19. Junio C HamanoNov 16, 2007
  20. Björn SteinbrinkNov 16, 2007
  21. Fix "identifier redeclared" compilation error with SUN ccGuido Ostkamp, Nov 19, 2007
  22. Junio C HamanoNov 20, 2007
  23. Guido OstkampNov 20, 2007
  24. Guido OstkampNov 20, 2007
  25. Martin MaresNov 20, 2007
  26. Junio C HamanoNov 20, 2007
  27. Martin MaresNov 20, 2007
  28. Linus TorvaldsNov 15, 2007
  29. David KastrupNov 15, 2007
  30. Linus TorvaldsNov 15, 2007
  31. Junio C HamanoNov 15, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.