Apple Clangs are awesome. During the bump to support C++17 in LLVM the requirements for Apple Clangs were bumped to 9.3. Apple Clang 10.0 is even better.
Apple Clang 9.3
Apple Clang 10.0
std::any
X
std::optional
X
std::string_view
X
std::variant
X
Apple Clang 10.0.0 would facilitate us to get rid of all the unions and eventually migrate from the LLVM optional to the std one.
Even worse there is already std::variant in the codebase. This was not catched by the buildbots.
The developer policy for updating toolchains is a long process.
Our current requirement Xcode/Apple Clang 9.3 was released in March 2018, 10.0.0 was released September 2018 - which is in line with the other toolchains we require. The Spreadsheet I used for this the last time is here: LLVM Toolchain Support Matrix - Google Sheets
I support bumping this to 10.0.0 as part of the bumps we are doing in LLVM 16.x anyway, but I am not an apple clang / xcode expert. So feel free to push back on that if you think we need more time to integrate this upgrade.
In practice, I doubt anyone running something older than Apple Clang 10 is able to build a recent release of LLVM. Users with older versions of Apple Clang are most likely on High Sierra or older, but you need Mojave or newer. See
Of course, you could be on Mojave but running an older version of Xcode, but that seems atypical.
It turns out, this would actually be a no-op change.
Here are some findings we’ve found with @sam-mccall while digging deeper at it.
In theory XCode 9.3 comes with a clang that prints 9.1.0 in its version string [1], but our toolchain requirements check for 9.3.0.
Looking at the same table, the next version of apple clang string that’s available is 10.0.0. Hence 9.3.0 doesn’t exist, and our soft error has already been enforcing people to install at least apple clang 10.0.0 (or XCode 10.0).
So previous version bump actually bumped the requirement to apple clang 10.0.0 effectively. Hence changing the documentation and cmake files to mention 10.0.0 should just be an RFC. Therefore I’d suggest treating this as a “typo in the documentation” rather than waiting for some release cycles.
+1 this has been a gap in our bot coverage forever. The problem is finding someone willing to provide the resources (three bots: clang linux, gcc linux, and msvc windows, all with the necessary minimum versions).