[Bug target/63810] gcc sets incorrect macro for OS X deployment targets

fxcoudert at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri May 15 22:52:00 GMT 2015


--- Comment #21 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
(In reply to Lawrence Velázquez from comment #20)
> https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01377.html

Quick review of the patch:

 - version_as_modern_macro(): you implement a specific behavior for major <= 9,
but it's necessary at all. Having major <= 9 is simply impossible (and Apple's
compiler rejects it). I'd say let's make things simpler anduse a format of
"%02lu%02lu%02lu" and always be 6 characters long.

 - version_as_legacy_macro(): same issue. Why do we need to handle major <= 9?
You have rejected this possibility in macosx_version_as_macro() anyway.
Simplify here also.

 - throughout the patch, writing things like "(int) sizeof "9999" - 1" or "char
result[sizeof "9999"]" when you could write "4" and "char result[4]" means
harder code to read, and no real benefit in terms of security or
maintainability (since you're duplicating stuff anyway).

 - in macosx_version_as_macro(), you say "Allow for future major numbers
greater than 10", but you actually reject them (and that's OK). Adjust the

 - later, "version_array[MAJOR] == 10" is guaranteed. Remove it.

 - in parse_version(), the string passed is guaranteed to be non-NULL. No need
to test it.

More information about the Gcc-bugs mailing list