Thread (3 messages) flat view 3 messages, 2 authors, 2016-06-15

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

From: Guido Ostkamp <hidden>
Date: 2016-06-15 22:43:52
Subsystem: the rest · Maintainer: Linus Torvalds

Possibly related (same subject, not in this thread)

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 <redacted>
---
  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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help