<div dir="ltr"><div>(sorry for the cross post, but this issue effects lots of people)</div><div><br></div>Takumi diagnosed a problem when Zach switched LLVM to use compile-time multithreading, but it actually has little to do with the multithreading decisions.<div>
<br></div><div>LLVM is rapidly moving to use more C++11 library features and more multithreading features. I think this is a good thing. However, we're hitting a specific issue on cygwin when bootstrapping: Clang doesn't support the Cygwin __thread implementation (it's different... sadly...). As a consequence, a *huge* amount of libstdc++'s multithreading primitives when bootstrapping, including <mutex>.</div>
<div><br></div><div>I don't think the current situation is tenable -- we really shouldn't be increasingly using C++11 in LLVM while trying to keep all of the multithreading code away from the C++11 standard library. At some point, we will fail because some other part of the library needed <mutex> (or something), and get a really surprising breakage.</div>
<div><br></div><div>I see three options:</div><div>1) Give up on cygwin bootstrapping (I don't really like this, and I suspect there are users of it)</div><div>2) Switch cygwin bootstrap to libc++ and fix libc++ to not require __thread (seems rather gross and lots of work)</div>
<div>3) Implement __thread in cygwin mode ASAP.</div><div><br></div><div>Thoughts? I think we need to address this pretty quickly or we're just going to start running into more failure modes.</div></div>