https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104871
Bug ID: 104871
Summary: macosx-version-min wrong for macOS >= Big Sur
(darwin20)
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: simon at pushface dot org
Target Milestone: ---
Created attachment 52603
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52603&action=edit
Patch, discards minor version
This is the same sort of problem as in PR80204: at present, GCC 11 &
12 assume that if the OS version is >= 20, the compiler should see
--mmacosx-version-min={major - 9}.{minor -1}.0, e.g. for OS version
21.3.0 that would be 12.2.0 (the linker sees -macosx-version-min, same
arguments).
However, the native compiler clang treats 21.3.0 as 12.0.0: the
compiler sees
-triple x86_64-apple-macosx12.0.0
and the linker sees
-platform_version macos 12.0.0
the result of which is that linking a main object file built with clang
and one built with gcc results in
ld: warning: object file (null.o) was built for newer macOS version (12.2)
than being linked (12.0)
I propose the following patch, which works fine for me (darwin 21.3.0).
diff --git a/gcc/config/darwin-driver.cc b/gcc/config/darwin-driver.cc
index 30e0e64f280..ca2a1ca1a60 100644
--- a/gcc/config/darwin-driver.cc
+++ b/gcc/config/darwin-driver.cc
@@ -164,15 +164,9 @@ darwin_find_version_from_kernel (void)
version - 1 (at least for the initial releases). */
if (major_vers >= 20)
{
- int minor_vers = *version_p++ - '0';
- if (ISDIGIT (*version_p))
- minor_vers = minor_vers * 10 + (*version_p++ - '0');
- if (*version_p++ != '.')
- goto parse_failed;
- if (minor_vers > 0)
- minor_vers -= 1; /* Kernel 20.3 => macOS 11.2. */
- /* It's not yet clear whether patch level will be considered. */
- asprintf (&new_flag, "%d.%02d.00", major_vers - 9, minor_vers);
+ /* clang doesn't include the minor version in the object file,
+ nor does it pass it to ld */
+ asprintf (&new_flag, "%d.00.00", major_vers - 9);
}
else if (major_vers - 4 <= 4)
/* On 10.4 and earlier, the old linker is used which does not