<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 1 Nov 2017, at 08:56, Zachary Turner via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Tue, Oct 31, 2017 at 2:45 PM Justin Bogner <<a href="mailto:mail@justinbogner.com" class="">mail@justinbogner.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Zachary Turner via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>> writes:<br class="">><br class="">
> Issue: If we're going to make people bootstrap a compiler, we might as well<br class="">
> go all the way to C++17.<br class="">
> Comment: I'm not opposed.<br class="">
<br class="">
We shouldn't make people bootstrap the compiler without a very good<br class="">
reason. I really don't want to be in the situation where you have to get<br class="">
clang 3.7 to bootstrap 5.0 to bootstrap 7.0 to bootstrap 9.0 in 2019.<br class=""></blockquote><div class=""><br class=""></div><div class="">Why would this many hops ever be necessary?  System Compiler -> {Clang 5 or GCC 7} -> Clang ToT should be sufficient to last until C++23, which we probably wouldn't adopt until 2025-2030 anyway</div><div class=""> </div></div></div></div></blockquote><div><br class=""></div><div>Can this be fixed by automation though?</div><div><br class=""></div><div>I mean, a script can determine what the system compiler is, and determine which minimal versions of the toolchain (frontend, linker, etc.) in which order to be able to build the latest compiler that uses C++17. Seems like a fixable problem.</div><div><br class=""></div><div>Ideally you only need to do this once, and normal development will allow you to use the "known good" bootstrap compiler.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="">
> * Clang 6 supports all of C++20, and it builds with only C++11, so we<br class="">
> shouldn't have to worry too much about the problem of needing to "daisy<br class="">
> chain" compilers to finally get the latest version of LLVM building.  "GCC<br class="">
> 4.8 -> Clang 6 - > Clang ToT" should hold up through C++1z.<br class="">
<br class="">
I don't understand how this argument holds. If we change the minimum c++<br class="">
standard we build with every time one comes out, we'll definitely have a<br class="">
long daisy chain of compilers that need to be built to start working on<br class="">
LLVM at all.<br class=""></blockquote><div class="">Clang 6 supports all of C++20.  If we started requiring C++14 today, someone can build Clang 6 with the system compiler and then build Clang ToT.</div><div class=""><br class=""></div><div class="">If 3 months later we started requiring C++17, someone could build clang 6 with the system compiler and then build Clang ToT.</div><div class=""><br class=""></div><div class="">If 3 months later we started requiring C++20, someone could still build clang 6 with the system compiler and then build Clang ToT.</div><div class=""><br class=""></div><div class="">Every relaxation of the kind of code we can use in LLVM does not necessitate an extra hop in the bootstrapping process, because existing versions of clang can already compile through C++20.</div></div></div></div></blockquote><div><br class=""></div><div>Not only this, but if we ever needed to do something different later on, automation can take care of adding the correct intermediate steps.</div><div><br class=""></div><div>Needless to say, I'm in favour of switching the default to C++17, FWIW.</div><div><br class=""></div><div>Cheers</div></div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">-- Dean</div></div>

</div>
<br class=""></body></html>