Re: [PATCH v2] Handle OS X deployment targets correctly

2015-05-28 Thread Mike Stump
On May 20, 2015, at 2:57 PM, Lawrence Velázquez v...@larryv.me wrote:
 2015-05-15  Lawrence Velázquez  v...@larryv.me
 
   PR target/63810
   * gcc/config/darwin-c.c (version_components): New global enum.
   (parse_version, version_as_legacy_macro)
   (version_as_modern_macro, macosx_version_as_macro): New functions.
   (version_as_macro): Remove.
   (darwin_cpp_builtins): Use new function.
   * gcc/testsuite/gcc.dg/darwin-minversion-3.c: Update testcase.
   * gcc/testsuite/gcc.dg/darwin-minversion-4.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-5.c: New testcase.
   * gcc/testsuite/gcc.dg/darwin-minversion-6.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-7.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-8.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-9.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-10.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-11.c: Ditto.
   * gcc/testsuite/gcc.dg/darwin-minversion-12.c: Ditto.

Committed revision 223808.

Thanks for all your work.

[PATCH v2] Handle OS X deployment targets correctly

2015-05-20 Thread Lawrence Velázquez

As described in PR target/63810, this addresses several problems with
the validation and encoding of deployment target version strings for the
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro.  There are
currently four testcases exercising inputs to -mmacosx-version-min
(gcc/testsuite/gcc.dg/darwin-minversion-*), but they provide minimal
coverage, and one is incorrect.

* The tiny number is now respected, if present.  Thus 10.9.4
  correctly becomes 1094 instead of 1090, and 10.10.1 becomes
  101001 instead of 101000.
* Zero padding is now ignored.  Thus 10.09 correctly becomes 1090
  instead of 100900, and 10.00010 becomes 101000 instead of being
  treated as invalid.
* Deployment targets that are missing minor and tiny numbers are no
  longer considered invalid.  Thus 10 is treated as 10.0.0, which
  becomes 1000 without causing an error.

With this change, trunk matches the behavior of Apple LLVM Compiler
6.1.0 on 8,451 of 8,464 generated test inputs.  (The discrepancies are
due to a bug in Clang.)  I don't notice any testsuite regressions on
OS X 10.10 Yosemite x86-64.

2015-05-15  Lawrence Velázquez  v...@larryv.me

PR target/63810
* gcc/config/darwin-c.c (version_components): New global enum.
(parse_version, version_as_legacy_macro)
(version_as_modern_macro, macosx_version_as_macro): New functions.
(version_as_macro): Remove.
(darwin_cpp_builtins): Use new function.
* gcc/testsuite/gcc.dg/darwin-minversion-3.c: Update testcase.
* gcc/testsuite/gcc.dg/darwin-minversion-4.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-5.c: New testcase.
* gcc/testsuite/gcc.dg/darwin-minversion-6.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-7.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-8.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-9.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-10.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-11.c: Ditto.
* gcc/testsuite/gcc.dg/darwin-minversion-12.c: Ditto.
---
Re-roll to address patch review on PR target/63810.  Provided as
text/x-patch attachment to accommodate Apple Mail wonkiness.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63810#c21

 gcc/config/darwin-c.c   | 168 +++-
 gcc/testsuite/gcc.dg/darwin-minversion-10.c |  16 +++
 gcc/testsuite/gcc.dg/darwin-minversion-11.c |  16 +++
 gcc/testsuite/gcc.dg/darwin-minversion-12.c |  16 +++
 gcc/testsuite/gcc.dg/darwin-minversion-3.c  |   6 +-
 gcc/testsuite/gcc.dg/darwin-minversion-4.c  |   6 +-
 gcc/testsuite/gcc.dg/darwin-minversion-5.c  |  16 +++
 gcc/testsuite/gcc.dg/darwin-minversion-6.c  |  15 +++
 gcc/testsuite/gcc.dg/darwin-minversion-7.c  |  15 +++
 gcc/testsuite/gcc.dg/darwin-minversion-8.c  |  16 +++
 gcc/testsuite/gcc.dg/darwin-minversion-9.c  |  15 +++
 11 files changed, 273 insertions(+), 32 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-10.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-11.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-12.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-5.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-6.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-7.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-8.c
 create mode 100644 gcc/testsuite/gcc.dg/darwin-minversion-9.c

diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c
index 3803e75..6d49f05 100644
--- a/gcc/config/darwin-c.c
+++ b/gcc/config/darwin-c.c
@@ -599,42 +599,158 @@ find_subframework_header (cpp_reader *pfile, const char *header, cpp_dir **dirp)
   return 0;
 }
 
-/* Return the value of darwin_macosx_version_min suitable for the
-   __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro, so '10.4.2'
-   becomes 1040 and '10.10.0' becomes 101000.  The lowest digit is
-   always zero, as is the second lowest for '10.10.x' and above.
-   Print a warning if the version number can't be understood.  */
+/* Given an OS X version VERSION_STR, return it as a statically-allocated array
+   of three integers. If VERSION_STR is invalid, return NULL.
+
+   VERSION_STR must consist of one, two, or three tokens, each separated by
+   a single period.  Each token must contain only the characters '0' through
+   '9' and is converted to an equivalent non-negative decimal integer. Omitted
+   tokens become zeros.  For example:
+
+10  becomes   {10,0,0}
+10.10   becomes   {10,10,0}
+10.10.1 becomes   {10,10,1}
+10.10.1 becomes   {10,10,1}
+10.010.001  becomes   {10,10,1}
+10.10.1 becomes   {10,10,1}
+.9.1is invalid
+10..9   is invalid
+10.10.  is invalid  */
+
+enum version_components { MAJOR, MINOR, TINY };
+
+static const unsigned long *
+parse_version (const char