[llvm-dev] Using C++14 code in LLVM

Justin Bogner via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 31 14:45:24 PDT 2017


Zachary Turner via llvm-dev <llvm-dev at lists.llvm.org> writes:
> Last time we discussed this, the consensus was "I think we can survive
> another year without generalized constexpr and variable templates".
>
> Well, we did indeed survive.   And it's been exactly a year!  So naturally,
> it only makes sense to revive this :)
>
>
>
> There's an active conversation going on in IRC right now, and it seems like
> there is more desire than there was last year.
>
> What are the main gains from allowing C++14?
> * Variable templates
> * Generalized constexpr
> * Return-type Deduction
> * Generic Lambdas
> * std::make_unique<> (the source of many build bot breakages)

I don't think any of these are compelling enough to push us to upgrade.

>
> What are the main gains from allowing C++17?  [1]
> * [[nodiscard]] attribute
> * structured bindings
> * constexpr-if
> * guaranteed copy elision
> * numerous new library types: optional, string_view, variant, byte,
> * numerous new algorithms: parallel algorithms, too many to list
> * Probably some more, but I just tried to hit the biggest ones.

These are all nice, but are they worth the cost at this point?

>
> First, it seems like if we want to enable C++14 we need GCC >= 5.
> And if we want to enable C++17 we need GCC >= 7.

If we want to enable C++17 we need clang 5.0, which was released less
than two months ago.

> With that out of the way, here were some of the issues that were raised
> last time:
>
> Issue: Ubuntu 14.04 LTS is on GCC 4.8.x, and we have to support it until
> end of life.
> Resolution: LTS is right around the corner, in 6 more months.
>
> Issue: Various other platforms have older GCCs as their system compiler,
> and it's annoying to upgrade.
> Question: Do any of these not have a port you can install?  For example,
> NetBSD 7 appears to have GCC 5.3 as a port, if DistroWatch is any
> indication.  It could be wrong though and I could also be misinterpreting
> it.
>
> Issue: If we're going to make people bootstrap a compiler, we might as well
> go all the way to C++17.
> Comment: I'm not opposed.

We shouldn't make people bootstrap the compiler without a very good
reason. I really don't want to be in the situation where you have to get
clang 3.7 to bootstrap 5.0 to bootstrap 7.0 to bootstrap 9.0 in 2019.

> Some questions / comments of my own:
>
> * Where is this policy about Ubuntu and LTS documented?  Does this mean,
> for example, that we will not be able to use C++17 until 2023 (16.04 LTS
> has only GCC 5.3.1)?  That seems a bit unreasonable.  And there's no
> guarantee that 18.04 LTS will even have GCC 7 or higher either, so it could
> be 2025 or 2027.
>
> * We've asked people in the past to build a modern toolchain.  For example,
> we did it with C++11 and Ubuntu 12.04 LTS.  Is C++17 compelling enough to
> justify this again?
>
> * GCC 4.9 probably isn't sufficient to justify an increase for anyone, as
> it lacks two of the more sought-after features of C++14 (variable templates
> and generalized constexpr).  So IMO we should require a bump to GCC 5 or
> higher, or not at all.
>
> * Clang 6 supports all of C++20, and it builds with only C++11, so we
> shouldn't have to worry too much about the problem of needing to "daisy
> chain" compilers to finally get the latest version of LLVM building.  "GCC
> 4.8 -> Clang 6 - > Clang ToT" should hold up through C++1z.

I don't understand how this argument holds. If we change the minimum c++
standard we build with every time one comes out, we'll definitely have a
long daisy chain of compilers that need to be built to start working on
LLVM at all.

> * While we obviously can't be tied to the versioning of every single distro
> out there, some are "bigger" than others.  Which are big enough that
> warrant serious consideration?  The ones I found are (and I did my best to
> aggregate all this, but please correct me if anything is incorrect or
> misrepresented):
>
> OpenBSD - Ships with GCC 4.2.1 anyway.  They are already having to
> bootstrap something, so the proposal here does not change anything, because
> even current LLVM doesn't compile with GCC 4.2.1
>
> CentOS & RHEL - No version of Distro, including trunk, has GCC >= 4.8.5
> (are there ports?)
>
> Debian - Minimum version 9 for GCC >= 5  (are there ports for earlier
> releases?)
>
> Fedora - Minimum version 24 for GCC >= 5, minimum version 26 for GCC >= 7
>
> Ubuntu - Minimum LTS 16.04 for GCC >= 5
>
> NetBSD - Version 7 has GCC 4.8.4 by default, but contains port for 5.3.0
>
> FreeBSD - Minimum Version 11 for GCC >= 5
>
> So, thoughts?
>
>
> [1] - Note that we'd need to wait a few more revs for MSVC before allowing
> C++17, but given that it's becoming easier and easier to bump the minimum
> MSVC version, I'm discounting this as a factor, as MSVC will not really be
> the bottleneck in any real sense.


More information about the llvm-dev mailing list