[clang] a340a49 - Add Android test case for -Wpartial-availability. Also update Android availability tests to match on the whole string, so we can distinguish between "Android 16" and "Android 16.0.0"
Author: James Farrell Date: 2021-11-17T22:45:23Z New Revision: a340a491b2550b24539adced79ffefd3ec2e13bf URL: https://github.com/llvm/llvm-project/commit/a340a491b2550b24539adced79ffefd3ec2e13bf DIFF: https://github.com/llvm/llvm-project/commit/a340a491b2550b24539adced79ffefd3ec2e13bf.diff LOG: Add Android test case for -Wpartial-availability. Also update Android availability tests to match on the whole string, so we can distinguish between "Android 16" and "Android 16.0.0" at the end of warning messages. Reviewed By: danalbert, srhines Differential Revision: https://reviews.llvm.org/D114036 Added: Modified: clang/test/Sema/attr-availability-android.c Removed: diff --git a/clang/test/Sema/attr-availability-android.c b/clang/test/Sema/attr-availability-android.c index d4031b3b52923..f38f71fbc7834 100644 --- a/clang/test/Sema/attr-availability-android.c +++ b/clang/test/Sema/attr-availability-android.c @@ -1,8 +1,12 @@ // RUN: %clang_cc1 "-triple" "arm-linux-androideabi16" -fsyntax-only -verify %s +// RUN: %clang_cc1 -D WARN_PARTIAL -Wpartial-availability "-triple" "arm-linux-androideabi16" -fsyntax-only -verify %s void f0(int) __attribute__((availability(android,introduced=14,deprecated=19))); void f1(int) __attribute__((availability(android,introduced=16))); void f2(int) __attribute__((availability(android,introduced=14,deprecated=16))); // expected-note {{'f2' has been explicitly marked deprecated here}} +#ifdef WARN_PARTIAL +// expected-note-re@+2 {{'f3' has been marked as being introduced in Android 19 here, but the deployment target is Android 16.0.0{{$ +#endif void f3(int) __attribute__((availability(android,introduced=19))); void f4(int) __attribute__((availability(android,introduced=9,deprecated=11,obsoleted=16), availability(ios,introduced=2.0,deprecated=3.0))); // expected-note{{explicitly marked unavailable}} void f5(int) __attribute__((availability(ios,introduced=3.2), availability(android,unavailable))); // expected-note{{'f5' has been explicitly marked unavailable here}} @@ -10,9 +14,12 @@ void f5(int) __attribute__((availability(ios,introduced=3.2), availability(andro void test() { f0(0); f1(0); - f2(0); // expected-warning{{'f2' is deprecated: first deprecated in Android 16}} + f2(0); // expected-warning-re{{'f2' is deprecated: first deprecated in Android 16{{$ +#ifdef WARN_PARTIAL +// expected-warning@+2{{'f3' is only available on Android 19 or newer}} expected-note@+2{{enclose 'f3' in a __builtin_available check to silence this warning}} +#endif f3(0); - f4(0); // expected-error{{f4' is unavailable: obsoleted in Android 16}} + f4(0); // expected-error-re{{'f4' is unavailable: obsoleted in Android 16{{$ f5(0); // expected-error{{'f5' is unavailable: not available on Android}} } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 1e82864 - Use VersionTuple for parsing versions in Triple. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible.
Author: James Farrell Date: 2021-11-30T15:44:23Z New Revision: 1e8286467036d8ef1a972de723f805a4981b2692 URL: https://github.com/llvm/llvm-project/commit/1e8286467036d8ef1a972de723f805a4981b2692 DIFF: https://github.com/llvm/llvm-project/commit/1e8286467036d8ef1a972de723f805a4981b2692.diff LOG: Use VersionTuple for parsing versions in Triple. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible. See also https://github.com/android/ndk/issues/1455. Differential Revision: https://reviews.llvm.org/D114163 Added: Modified: clang/lib/ARCMigrate/ARCMT.cpp clang/lib/Basic/Targets/OSTargets.cpp clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MSVC.cpp clang/lib/Driver/ToolChains/NetBSD.cpp clang/test/Sema/attr-availability-android.c clang/test/Sema/attr-availability.c clang/test/Sema/availability-guard-format.mm clang/test/SemaObjC/attr-availability.m clang/test/SemaObjC/property-deprecated-warning.m clang/test/SemaObjC/unguarded-availability-maccatalyst.m clang/test/SemaObjC/unguarded-availability.m llvm/include/llvm/ADT/Triple.h llvm/lib/Analysis/TargetLibraryInfo.cpp llvm/lib/MC/MCStreamer.cpp llvm/lib/Support/Triple.cpp llvm/lib/Target/AArch64/AArch64Subtarget.cpp llvm/lib/Target/AArch64/AArch64Subtarget.h llvm/lib/Target/X86/X86Subtarget.h llvm/unittests/ADT/TripleTest.cpp Removed: diff --git a/clang/lib/ARCMigrate/ARCMT.cpp b/clang/lib/ARCMigrate/ARCMT.cpp index 4851c434d7652..68ee7c59270e0 100644 --- a/clang/lib/ARCMigrate/ARCMT.cpp +++ b/clang/lib/ARCMigrate/ARCMT.cpp @@ -162,9 +162,7 @@ static bool HasARCRuntime(CompilerInvocation &origCI) { return triple.getOSMajorVersion() >= 11; if (triple.getOS() == llvm::Triple::MacOSX) { -unsigned Major, Minor, Micro; -triple.getOSVersion(Major, Minor, Micro); -return Major > 10 || (Major == 10 && Minor >= 7); +return triple.getOSVersion() >= VersionTuple(10, 7); } return false; diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 4d9a462b51366..a17c2238f05d5 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -48,12 +48,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, Builder.defineMacro("_REENTRANT"); // Get the platform type and version number from the triple. - unsigned Maj, Min, Rev; + VersionTuple OsVersion; if (Triple.isMacOSX()) { -Triple.getMacOSXVersion(Maj, Min, Rev); +Triple.getMacOSXVersion(OsVersion); PlatformName = "macos"; } else { -Triple.getOSVersion(Maj, Min, Rev); +OsVersion = Triple.getOSVersion(); PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); if (PlatformName == "ios" && Triple.isMacCatalystEnvironment()) PlatformName = "maccatalyst"; @@ -63,29 +63,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, // generating code for Win32 ABI. No need to emit // __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__. if (PlatformName == "win32") { -PlatformMinVersion = VersionTuple(Maj, Min, Rev); +PlatformMinVersion = OsVersion; return; } // Set the appropriate OS version define. if (Triple.isiOS()) { -assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!"); +assert(OsVersion < VersionTuple(100) && "Invalid version!"); char Str[7]; -if (Maj < 10) { - Str[0] = '0' + Maj; - Str[1] = '0' + (Min / 10); - Str[2] = '0' + (Min % 10); - Str[3] = '0' + (Rev / 10); - Str[4] = '0' + (Rev % 10); +if (OsVersion.getMajor() < 10) { + Str[0] = '0' + OsVersion.getMajor(); + Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); Str[5] = '\0'; } else { // Handle versions >= 10. - Str[0] = '0' + (Maj / 10); - Str[1] = '0' + (Maj % 10); - Str[2] = '0' + (Min / 10); - Str[3] = '0' + (Min % 10); - Str[4] = '0' + (Rev / 10); - Str[5] = '0' + (Rev % 10); + Str[0] = '0' + (OsVersion.getMajor() / 10); + Str[1] = '0' + (OsVersion.getMajor() % 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); Str[6] = '\0'; } if (Triple.isTvOS()) @@ -95,13 +95,13 @@ void getDarwinDefines(MacroBuilder &Bu
[clang] 5032467 - Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" after par
Author: James Farrell Date: 2021-12-06T14:57:47Z New Revision: 50324670342d9391f62671685f4d6b4880a4ea9a URL: https://github.com/llvm/llvm-project/commit/50324670342d9391f62671685f4d6b4880a4ea9a DIFF: https://github.com/llvm/llvm-project/commit/50324670342d9391f62671685f4d6b4880a4ea9a.diff LOG: Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible. This reverts commit 40d5eeac6cd89a2360c3ba997cbaa816abca828c. Differential Revision: https://reviews.llvm.org/D114885 Added: Modified: clang/lib/ARCMigrate/ARCMT.cpp clang/lib/Basic/Targets/OSTargets.cpp clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MSVC.cpp clang/lib/Driver/ToolChains/NetBSD.cpp clang/test/Sema/attr-availability-android.c clang/test/Sema/attr-availability.c clang/test/Sema/availability-guard-format.mm clang/test/SemaObjC/attr-availability.m clang/test/SemaObjC/property-deprecated-warning.m clang/test/SemaObjC/unguarded-availability-maccatalyst.m clang/test/SemaObjC/unguarded-availability.m llvm/include/llvm/ADT/Triple.h llvm/lib/Analysis/TargetLibraryInfo.cpp llvm/lib/MC/MCStreamer.cpp llvm/lib/Support/Triple.cpp llvm/lib/Target/AArch64/AArch64Subtarget.cpp llvm/lib/Target/AArch64/AArch64Subtarget.h llvm/lib/Target/X86/X86Subtarget.h llvm/unittests/ADT/TripleTest.cpp llvm/unittests/Support/Host.cpp Removed: diff --git a/clang/lib/ARCMigrate/ARCMT.cpp b/clang/lib/ARCMigrate/ARCMT.cpp index 4851c434d7652..68ee7c59270e0 100644 --- a/clang/lib/ARCMigrate/ARCMT.cpp +++ b/clang/lib/ARCMigrate/ARCMT.cpp @@ -162,9 +162,7 @@ static bool HasARCRuntime(CompilerInvocation &origCI) { return triple.getOSMajorVersion() >= 11; if (triple.getOS() == llvm::Triple::MacOSX) { -unsigned Major, Minor, Micro; -triple.getOSVersion(Major, Minor, Micro); -return Major > 10 || (Major == 10 && Minor >= 7); +return triple.getOSVersion() >= VersionTuple(10, 7); } return false; diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 53748bf067cd2..695cbafe36557 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -48,12 +48,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, Builder.defineMacro("_REENTRANT"); // Get the platform type and version number from the triple. - unsigned Maj, Min, Rev; + VersionTuple OsVersion; if (Triple.isMacOSX()) { -Triple.getMacOSXVersion(Maj, Min, Rev); +Triple.getMacOSXVersion(OsVersion); PlatformName = "macos"; } else { -Triple.getOSVersion(Maj, Min, Rev); +OsVersion = Triple.getOSVersion(); PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); if (PlatformName == "ios" && Triple.isMacCatalystEnvironment()) PlatformName = "maccatalyst"; @@ -63,29 +63,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, // generating code for Win32 ABI. No need to emit // __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__. if (PlatformName == "win32") { -PlatformMinVersion = VersionTuple(Maj, Min, Rev); +PlatformMinVersion = OsVersion; return; } // Set the appropriate OS version define. if (Triple.isiOS()) { -assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!"); +assert(OsVersion < VersionTuple(100) && "Invalid version!"); char Str[7]; -if (Maj < 10) { - Str[0] = '0' + Maj; - Str[1] = '0' + (Min / 10); - Str[2] = '0' + (Min % 10); - Str[3] = '0' + (Rev / 10); - Str[4] = '0' + (Rev % 10); +if (OsVersion.getMajor() < 10) { + Str[0] = '0' + OsVersion.getMajor(); + Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); Str[5] = '\0'; } else { // Handle versions >= 10. - Str[0] = '0' + (Maj / 10); - Str[1] = '0' + (Maj % 10); - Str[2] = '0' + (Min / 10); - Str[3] = '0' + (Min % 10); - Str[4] = '0' + (Rev / 10); - Str[5] = '0' + (Rev % 10); + Str[0] = '0' + (OsVersion.getMajor() / 10); + Str[1] = '0' + (OsVersion.getMajor() % 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10);
[clang] 63a6348 - Revert "Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" a
Author: James Farrell Date: 2021-12-06T17:35:26Z New Revision: 63a6348cad6caccf285c1661bc60d8ba5a40c972 URL: https://github.com/llvm/llvm-project/commit/63a6348cad6caccf285c1661bc60d8ba5a40c972 DIFF: https://github.com/llvm/llvm-project/commit/63a6348cad6caccf285c1661bc60d8ba5a40c972.diff LOG: Revert "Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible." This reverts commit 50324670342d9391f62671685f4d6b4880a4ea9a. Added: Modified: clang/lib/ARCMigrate/ARCMT.cpp clang/lib/Basic/Targets/OSTargets.cpp clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MSVC.cpp clang/lib/Driver/ToolChains/NetBSD.cpp clang/test/Sema/attr-availability-android.c clang/test/Sema/attr-availability.c clang/test/Sema/availability-guard-format.mm clang/test/SemaObjC/attr-availability.m clang/test/SemaObjC/property-deprecated-warning.m clang/test/SemaObjC/unguarded-availability-maccatalyst.m clang/test/SemaObjC/unguarded-availability.m llvm/include/llvm/ADT/Triple.h llvm/lib/Analysis/TargetLibraryInfo.cpp llvm/lib/MC/MCStreamer.cpp llvm/lib/Support/Triple.cpp llvm/lib/Target/AArch64/AArch64Subtarget.cpp llvm/lib/Target/AArch64/AArch64Subtarget.h llvm/lib/Target/X86/X86Subtarget.h llvm/unittests/ADT/TripleTest.cpp llvm/unittests/Support/Host.cpp Removed: diff --git a/clang/lib/ARCMigrate/ARCMT.cpp b/clang/lib/ARCMigrate/ARCMT.cpp index 68ee7c59270e0..4851c434d7652 100644 --- a/clang/lib/ARCMigrate/ARCMT.cpp +++ b/clang/lib/ARCMigrate/ARCMT.cpp @@ -162,7 +162,9 @@ static bool HasARCRuntime(CompilerInvocation &origCI) { return triple.getOSMajorVersion() >= 11; if (triple.getOS() == llvm::Triple::MacOSX) { -return triple.getOSVersion() >= VersionTuple(10, 7); +unsigned Major, Minor, Micro; +triple.getOSVersion(Major, Minor, Micro); +return Major > 10 || (Major == 10 && Minor >= 7); } return false; diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 695cbafe36557..53748bf067cd2 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -48,12 +48,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, Builder.defineMacro("_REENTRANT"); // Get the platform type and version number from the triple. - VersionTuple OsVersion; + unsigned Maj, Min, Rev; if (Triple.isMacOSX()) { -Triple.getMacOSXVersion(OsVersion); +Triple.getMacOSXVersion(Maj, Min, Rev); PlatformName = "macos"; } else { -OsVersion = Triple.getOSVersion(); +Triple.getOSVersion(Maj, Min, Rev); PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); if (PlatformName == "ios" && Triple.isMacCatalystEnvironment()) PlatformName = "maccatalyst"; @@ -63,29 +63,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, // generating code for Win32 ABI. No need to emit // __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__. if (PlatformName == "win32") { -PlatformMinVersion = OsVersion; +PlatformMinVersion = VersionTuple(Maj, Min, Rev); return; } // Set the appropriate OS version define. if (Triple.isiOS()) { -assert(OsVersion < VersionTuple(100) && "Invalid version!"); +assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!"); char Str[7]; -if (OsVersion.getMajor() < 10) { - Str[0] = '0' + OsVersion.getMajor(); - Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); - Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); - Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); - Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); +if (Maj < 10) { + Str[0] = '0' + Maj; + Str[1] = '0' + (Min / 10); + Str[2] = '0' + (Min % 10); + Str[3] = '0' + (Rev / 10); + Str[4] = '0' + (Rev % 10); Str[5] = '\0'; } else { // Handle versions >= 10. - Str[0] = '0' + (OsVersion.getMajor() / 10); - Str[1] = '0' + (OsVersion.getMajor() % 10); - Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); - Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); - Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); - Str[5] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); + Str[0] = '0' + (Maj / 10); + Str[1] = '0' + (Maj % 10); + Str[2] = '0' + (Min / 10); + Str[3] = '0' + (Min % 10); + Str[4] = '0' + (Rev / 10); + Str[5] = '0' + (Rev % 10); Str[6] = '\0'; } if (Triple.isTvOS()
[clang] 219672b - Revert "Revert "Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and
Author: James Farrell Date: 2021-12-07T23:15:21Z New Revision: 219672b8dd06c4765185fa3161c98437d49b4a1b URL: https://github.com/llvm/llvm-project/commit/219672b8dd06c4765185fa3161c98437d49b4a1b DIFF: https://github.com/llvm/llvm-project/commit/219672b8dd06c4765185fa3161c98437d49b4a1b.diff LOG: Revert "Revert "Use VersionTuple for parsing versions in Triple, fixing issues that caused the original change to be reverted. This makes it possible to distinguish between "16" and "16.0" after parsing, which previously was not possible."" This reverts commit 63a6348cad6caccf285c1661bc60d8ba5a40c972. Differential Revision: https://reviews.llvm.org/D115254 Added: Modified: clang/lib/ARCMigrate/ARCMT.cpp clang/lib/Basic/Targets/OSTargets.cpp clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MSVC.cpp clang/lib/Driver/ToolChains/NetBSD.cpp clang/test/Sema/attr-availability-android.c clang/test/Sema/attr-availability.c clang/test/Sema/availability-guard-format.mm clang/test/SemaObjC/attr-availability.m clang/test/SemaObjC/property-deprecated-warning.m clang/test/SemaObjC/unguarded-availability-maccatalyst.m clang/test/SemaObjC/unguarded-availability.m llvm/include/llvm/ADT/Triple.h llvm/lib/Analysis/TargetLibraryInfo.cpp llvm/lib/MC/MCStreamer.cpp llvm/lib/Support/Triple.cpp llvm/lib/Target/AArch64/AArch64Subtarget.cpp llvm/lib/Target/AArch64/AArch64Subtarget.h llvm/lib/Target/X86/X86Subtarget.h llvm/unittests/ADT/TripleTest.cpp llvm/unittests/Support/Host.cpp Removed: diff --git a/clang/lib/ARCMigrate/ARCMT.cpp b/clang/lib/ARCMigrate/ARCMT.cpp index 4851c434d7652..68ee7c59270e0 100644 --- a/clang/lib/ARCMigrate/ARCMT.cpp +++ b/clang/lib/ARCMigrate/ARCMT.cpp @@ -162,9 +162,7 @@ static bool HasARCRuntime(CompilerInvocation &origCI) { return triple.getOSMajorVersion() >= 11; if (triple.getOS() == llvm::Triple::MacOSX) { -unsigned Major, Minor, Micro; -triple.getOSVersion(Major, Minor, Micro); -return Major > 10 || (Major == 10 && Minor >= 7); +return triple.getOSVersion() >= VersionTuple(10, 7); } return false; diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 53748bf067cd2..695cbafe36557 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -48,12 +48,12 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, Builder.defineMacro("_REENTRANT"); // Get the platform type and version number from the triple. - unsigned Maj, Min, Rev; + VersionTuple OsVersion; if (Triple.isMacOSX()) { -Triple.getMacOSXVersion(Maj, Min, Rev); +Triple.getMacOSXVersion(OsVersion); PlatformName = "macos"; } else { -Triple.getOSVersion(Maj, Min, Rev); +OsVersion = Triple.getOSVersion(); PlatformName = llvm::Triple::getOSTypeName(Triple.getOS()); if (PlatformName == "ios" && Triple.isMacCatalystEnvironment()) PlatformName = "maccatalyst"; @@ -63,29 +63,29 @@ void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts, // generating code for Win32 ABI. No need to emit // __ENVIRONMENT_XX_OS_VERSION_MIN_REQUIRED__. if (PlatformName == "win32") { -PlatformMinVersion = VersionTuple(Maj, Min, Rev); +PlatformMinVersion = OsVersion; return; } // Set the appropriate OS version define. if (Triple.isiOS()) { -assert(Maj < 100 && Min < 100 && Rev < 100 && "Invalid version!"); +assert(OsVersion < VersionTuple(100) && "Invalid version!"); char Str[7]; -if (Maj < 10) { - Str[0] = '0' + Maj; - Str[1] = '0' + (Min / 10); - Str[2] = '0' + (Min % 10); - Str[3] = '0' + (Rev / 10); - Str[4] = '0' + (Rev % 10); +if (OsVersion.getMajor() < 10) { + Str[0] = '0' + OsVersion.getMajor(); + Str[1] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[3] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) % 10); Str[5] = '\0'; } else { // Handle versions >= 10. - Str[0] = '0' + (Maj / 10); - Str[1] = '0' + (Maj % 10); - Str[2] = '0' + (Min / 10); - Str[3] = '0' + (Min % 10); - Str[4] = '0' + (Rev / 10); - Str[5] = '0' + (Rev % 10); + Str[0] = '0' + (OsVersion.getMajor() / 10); + Str[1] = '0' + (OsVersion.getMajor() % 10); + Str[2] = '0' + (OsVersion.getMinor().getValueOr(0) / 10); + Str[3] = '0' + (OsVersion.getMinor().getValueOr(0) % 10); + Str[4] = '0' + (OsVersion.getSubminor().getValueOr(0) / 10); + Str[5] = '0' + (OsVersion.getSubminor().getValue