diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h index 4ed694cfa99..ad9fe060364 100644 --- a/include/llvm/ADT/Triple.h +++ b/include/llvm/ADT/Triple.h @@ -303,10 +303,15 @@ public: unsigned &Micro) const; /// getiOSVersion - Parse the version number as with getOSVersion. This should - /// only be called with IOS triples. + /// only be called with IOS or generic triples. void getiOSVersion(unsigned &Major, unsigned &Minor, unsigned &Micro) const; + /// getWatchOSVersion - Parse the version number as with getOSVersion. This + /// should only be called with WatchOS or generic triples. + void getWatchOSVersion(unsigned &Major, unsigned &Minor, + unsigned &Micro) const; + /// @} /// @name Direct Component Access /// @{ diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 8964fc09985..9d5f1455330 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -958,7 +958,6 @@ void Triple::getiOSVersion(unsigned &Major, unsigned &Minor, default: llvm_unreachable("unexpected OS for Darwin triple"); case Darwin: case MacOSX: - case WatchOS: // Ignore the version from the triple. This is only handled because the // the clang driver combines OS X and IOS support into a common Darwin // toolchain that wants to know the iOS version number even when targeting @@ -974,6 +973,32 @@ void Triple::getiOSVersion(unsigned &Major, unsigned &Minor, if (Major == 0) Major = (getArch() == aarch64) ? 7 : 5; break; + case WatchOS: + llvm_unreachable("conflicting triple info"); + } +} + +void Triple::getWatchOSVersion(unsigned &Major, unsigned &Minor, + unsigned &Micro) const { + switch (getOS()) { + default: llvm_unreachable("unexpected OS for Darwin triple"); + case Darwin: + case MacOSX: + // Ignore the version from the triple. This is only handled because the + // the clang driver combines OS X and IOS support into a common Darwin + // toolchain that wants to know the iOS version number even when targeting + // OS X. + Major = 2; + Minor = 0; + Micro = 0; + break; + case WatchOS: + getOSVersion(Major, Minor, Micro); + if (Major == 0) + Major = 2; + break; + case IOS: + llvm_unreachable("conflicting triple info"); } }