]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/61407 (Build errors on latest OS X 10.10 Yosemite with Xcode 6 on GCC...
authorJames Clarke <jrtc27@jrtc27.com>
Sun, 14 Sep 2014 08:05:43 +0000 (08:05 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sun, 14 Sep 2014 08:05:43 +0000 (08:05 +0000)
PR target/61407

* config/darwin-c.c (version_as_macro): Added extra 0 for OS X 10.10
and above.
* config/darwin-driver.c (darwin_find_version_from_kernel): Removed
kernel version check to avoid incrementing it after every major OS X
release.
(darwin_default_min_version): Avoid static memory buffer.

* gcc.dg/darwin-minversion-1.c: Fixed formatting
* gcc.dg/darwin-minversion-2.c: Fixed formatting
* gcc.dg/darwin-minversion-3.c: Fixed formatting
* gcc.dg/darwin-minversion-4.c: Added test for OS X 10.10

Co-Authored-By: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
From-SVN: r215251

gcc/ChangeLog
gcc/config/darwin-c.c
gcc/config/darwin-driver.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/darwin-minversion-1.c
gcc/testsuite/gcc.dg/darwin-minversion-2.c
gcc/testsuite/gcc.dg/darwin-minversion-3.c
gcc/testsuite/gcc.dg/darwin-minversion-4.c [new file with mode: 0644]

index 0a329285e7e921dcd1a46de2b70a1881f8a4695b..416f3c2b088b438926525372bf810190e6fd3c92 100644 (file)
@@ -1,3 +1,14 @@
+2014-09-14  James Clarke  <jrtc27@jrtc27.com>
+           Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR target/61407
+       * config/darwin-c.c (version_as_macro): Added extra 0 for OS X 10.10
+       and above.
+       * config/darwin-driver.c (darwin_find_version_from_kernel): Removed
+       kernel version check to avoid incrementing it after every major OS X
+       release.
+       (darwin_default_min_version): Avoid static memory buffer.
+
 2014-09-13  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree.c (need_assembler_name_p): Store C++ type mangling only
@@ -79,6 +90,7 @@
        (pdp11_scalar_mode_supported_p): New function.
        * config/rl78/rl78.h (LIBGCC2_HAS_DF_MODE): Remove.
        * config/rx/rx.h (LIBGCC2_HAS_DF_MODE): Remove.
+
 2014-09-12  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/63237
index 9e876cfd6fd5b0b5e45f7679d8f7bbdbd0d90021..f3d7aa521de8e6fc51cd499cd8b4f3e74fceb77c 100644 (file)
@@ -571,21 +571,34 @@ find_subframework_header (cpp_reader *pfile, const char *header, cpp_dir **dirp)
 }
 
 /* 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.  The lowest digit is always zero.
+   __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.  */
 static const char *
 version_as_macro (void)
 {
-  static char result[] = "1000";
+  static char result[7] = "1000";
+  int minorDigitIdx;
 
   if (strncmp (darwin_macosx_version_min, "10.", 3) != 0)
     goto fail;
   if (! ISDIGIT (darwin_macosx_version_min[3]))
     goto fail;
-  result[2] = darwin_macosx_version_min[3];
-  if (darwin_macosx_version_min[4] != '\0'
-      && darwin_macosx_version_min[4] != '.')
+
+  minorDigitIdx = 3;
+  result[2] = darwin_macosx_version_min[minorDigitIdx++];
+  if (ISDIGIT (darwin_macosx_version_min[minorDigitIdx]))
+  {
+    /* Starting with OS X 10.10, the macro ends '00' rather than '0',
+       i.e. 10.10.x becomes 101000 rather than 10100.  */
+    result[3] = darwin_macosx_version_min[minorDigitIdx++];
+    result[4] = '0';
+    result[5] = '0';
+    result[6] = '\0';
+  }
+  if (darwin_macosx_version_min[minorDigitIdx] != '\0'
+      && darwin_macosx_version_min[minorDigitIdx] != '.')
     goto fail;
 
   return result;
index 8b6ae93911f508589c28bf3f9163a582d8d1556b..541e10bc098b49bf97aa74db262a6a79c952c994 100644 (file)
@@ -29,8 +29,8 @@ along with GCC; see the file COPYING3.  If not see
 #include <sys/sysctl.h>
 #include "xregex.h"
 
-static bool
-darwin_find_version_from_kernel (char *new_flag)
+static char *
+darwin_find_version_from_kernel (void)
 {
   char osversion[32];
   size_t osversion_len = sizeof (osversion) - 1;
@@ -39,6 +39,7 @@ darwin_find_version_from_kernel (char *new_flag)
   char minor_vers[6];
   char * version_p;
   char * version_pend;
+  char * new_flag;
 
   /* Determine the version of the running OS.  If we can't, warn user,
      and do nothing.  */
@@ -46,7 +47,7 @@ darwin_find_version_from_kernel (char *new_flag)
              &osversion_len, NULL, 0) == -1)
     {
       warning (0, "sysctl for kern.osversion failed: %m");
-      return false;
+      return NULL;
     }
 
   /* Try to parse the first two parts of the OS version number.  Warn
@@ -57,8 +58,6 @@ darwin_find_version_from_kernel (char *new_flag)
   version_p = osversion + 1;
   if (ISDIGIT (*version_p))
     major_vers = major_vers * 10 + (*version_p++ - '0');
-  if (major_vers > 4 + 9)
-    goto parse_failed;
   if (*version_p++ != '.')
     goto parse_failed;
   version_pend = strchr(version_p, '.');
@@ -74,17 +73,16 @@ darwin_find_version_from_kernel (char *new_flag)
   if (major_vers - 4 <= 4)
     /* On 10.4 and earlier, the old linker is used which does not
        support three-component system versions.  */
-    sprintf (new_flag, "10.%d", major_vers - 4);
+    asprintf (&new_flag, "10.%d", major_vers - 4);
   else
-    sprintf (new_flag, "10.%d.%s", major_vers - 4,
-            minor_vers);
+    asprintf (&new_flag, "10.%d.%s", major_vers - 4, minor_vers);
 
-  return true;
+  return new_flag;
 
  parse_failed:
   warning (0, "couldn%'t understand kern.osversion %q.*s",
           (int) osversion_len, osversion);
-  return false;
+  return NULL;
 }
 
 #endif
@@ -105,7 +103,7 @@ darwin_default_min_version (unsigned int *decoded_options_count,
   const unsigned int argc = *decoded_options_count;
   struct cl_decoded_option *const argv = *decoded_options;
   unsigned int i;
-  static char new_flag[sizeof ("10.0.0") + 6];
+  const char *new_flag;
 
   /* If the command-line is empty, just return.  */
   if (argc <= 1)
@@ -142,16 +140,16 @@ darwin_default_min_version (unsigned int *decoded_options_count,
 
 #ifndef CROSS_DIRECTORY_STRUCTURE
 
- /* Try to find the version from the kernel, if we fail - we print a message 
-    and give up.  */
- if (!darwin_find_version_from_kernel (new_flag))
-   return;
+  /* Try to find the version from the kernel, if we fail - we print a message 
+     and give up.  */
+  new_flag = darwin_find_version_from_kernel ();
+  if (!new_flag)
+    return;
 
 #else
 
- /* For cross-compilers, default to the target OS version. */
-
- strncpy (new_flag, DEF_MIN_OSX_VERSION, sizeof (new_flag));
+  /* For cross-compilers, default to the target OS version. */
+  new_flag = DEF_MIN_OSX_VERSION;
 
 #endif /* CROSS_DIRECTORY_STRUCTURE */
 
@@ -165,7 +163,6 @@ darwin_default_min_version (unsigned int *decoded_options_count,
   memcpy (*decoded_options + 2, argv + 1,
          (argc - 1) * sizeof (struct cl_decoded_option));
   return;
-  
 }
 
 /* Translate -filelist and -framework options in *DECODED_OPTIONS
index 29d89a8b2c1eb74582e64bbe19567c9713bdfd9d..1e9aefb54ee651b2a6c1efafb9a3ba12d7e63aa0 100644 (file)
@@ -1,3 +1,11 @@
+2014-09-14  James Clarke  <jrtc27@jrtc27.com>
+
+       PR target/61407
+       * gcc.dg/darwin-minversion-1.c: Fixed formatting
+       * gcc.dg/darwin-minversion-2.c: Fixed formatting
+       * gcc.dg/darwin-minversion-3.c: Fixed formatting
+       * gcc.dg/darwin-minversion-4.c: Added test for OS X 10.10
+
 2014-09-13  Marek Polacek  <polacek@redhat.com>
 
        PR c++/60862
index d8a3243bb5509d718123125f2216809f3f5b260d..6221d617b2e5d8d80eeaa7a743a320d0d3061509 100644 (file)
@@ -2,7 +2,8 @@
 /* { dg-options "-mmacosx-version-min=10.1" } */
 /* { dg-do run { target *-*-darwin* } } */
 
-int main(void)
+int
+main ()
 {
 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1010
   fail me;
index fd4975a529266a49dc80ded6b0ffbab55ed4a085..8e18d5273a6b539e035929507846c3f293ae9c1f 100644 (file)
@@ -2,7 +2,8 @@
 /* { dg-options "-mmacosx-version-min=10.1 -mmacosx-version-min=10.3" } */
 /* { dg-do run { target *-*-darwin* } } */
 
-int main(void)
+int
+main ()
 {
 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1030
   fail me;
index d0c5934b449ece562d4fb3dbbe427169cb57ee52..4fcb9693cd4888a4e0795ce1506c45659c47cd15 100644 (file)
@@ -2,7 +2,8 @@
 /* { dg-options "-mmacosx-version-min=10.4.10" } */
 /* { dg-do compile { target *-*-darwin* } } */
 
-int main(void)
+int
+main ()
 {
 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 1040
   fail me;
diff --git a/gcc/testsuite/gcc.dg/darwin-minversion-4.c b/gcc/testsuite/gcc.dg/darwin-minversion-4.c
new file mode 100644 (file)
index 0000000..1cb42eb
--- /dev/null
@@ -0,0 +1,12 @@
+/* Test that major versions greater than 9 work and have the additional 0.  */
+/* { dg-options "-mmacosx-version-min=10.10.0" } */
+/* { dg-do compile { target *-*-darwin* } } */
+
+int
+main ()
+{
+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ != 101000
+  fail me;
+#endif
+  return 0;
+}