Make sys::ThreadLocal<> zero-initialized on non-thread builds (PR18205)
authorHans Wennborg <hans@hanshq.net>
Thu, 19 Dec 2013 20:32:44 +0000 (20:32 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 19 Dec 2013 20:32:44 +0000 (20:32 +0000)
commit837d6ed3ea52e063ff35f96f16558146941c0874
tree63a766722acd5754504edbf2b84123533ae3ed29
parent75c84130c1a799b63b393b1de41281c3a92e5c86
Make sys::ThreadLocal<> zero-initialized on non-thread builds (PR18205)

According to the docs, ThreadLocal<>::get() should return NULL
if no object has been set. This patch makes that the case also for non-thread
builds and adds a very basic unit test to check it.

(This was causing PR18205 because PrettyStackTraceHead didn't get zero-
initialized and we'd crash trying to read past the end of that list. We didn't
notice this so much on Linux since we'd crash after printing all the entries,
but on Mac we print into a SmallString, and would crash before printing that.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197718 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Support/ThreadLocal.cpp
lib/Support/Unix/ThreadLocal.inc
unittests/Support/CMakeLists.txt
unittests/Support/ThreadLocalTest.cpp [new file with mode: 0644]