flex-array: simplify compiler-specific workaround
We use "type array[];" syntax for the flex-array member at the end
of a struct under C99 or later, except when we are building with
older SUNPRO_C compilers. As we find more vendor compilers that
claim to grok C99 but not understand the flex-array syntax, the
existing "If we are using C99, but not with these compilers..."
conditional will keep growing.
Make it more manageable by listing vendor-specific exceptions
earlier, with the expectation that new exceptions will not be
combined into existing ones to make the condition longer, and
instead will be implemented as a new "#elif" in the cascade of
similar to old SUNPRO_C, we can just add a single line
#elif defined(_MSC_VER)
immediately before "#elif defined(__GNUC__)" to cause us to fallback
to the safer but a bit wasteful version.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
parent
e9d7761bb9
commit
deefc2d9f6
|
|
@ -33,14 +33,23 @@
|
|||
/*
|
||||
* See if our compiler is known to support flexible array members.
|
||||
*/
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && (!defined(__SUNPRO_C) || (__SUNPRO_C > 0x580))
|
||||
# define FLEX_ARRAY /* empty */
|
||||
|
||||
/*
|
||||
* Check vendor specific quirks first, before checking the
|
||||
* __STDC_VERSION__, as vendor compilers can lie and we need to be
|
||||
* able to work them around. Note that by not defining FLEX_ARRAY
|
||||
* here, we can fall back to use the "safer but a bit wasteful" one
|
||||
* later.
|
||||
*/
|
||||
#if defined(__SUNPRO_C) && (__SUNPRO_C <= 0x580)
|
||||
#elif defined(__GNUC__)
|
||||
# if (__GNUC__ >= 3)
|
||||
# define FLEX_ARRAY /* empty */
|
||||
# else
|
||||
# define FLEX_ARRAY 0 /* older GNU extension */
|
||||
# endif
|
||||
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
# define FLEX_ARRAY /* empty */
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue