[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"

2021-11-17 Thread James Farrell via cfe-commits

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.

2021-11-30 Thread James Farrell via cfe-commits

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

2021-12-06 Thread James Farrell via cfe-commits

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

2021-12-06 Thread James Farrell via cfe-commits

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

2021-12-07 Thread James Farrell via cfe-commits

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