re PR target/61407 (Build errors on latest OS X 10.10 Yosemite with Xcode 6 on GCC 4.8.3)

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
This commit is contained in:
James Clarke 2014-09-14 08:05:43 +00:00 committed by François-Xavier Coudert
parent 1a09cece35
commit 9c250803ad
8 changed files with 73 additions and 28 deletions

View 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

View 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;

View 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

View 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

View 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;

View 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;

View 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;

View File

@ -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;
}