diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-12-20 04:26:57 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-12-20 04:26:57 +0000 |
commit | b95f36183ccbb26154accc99fd304f6e04075682 (patch) | |
tree | f67e474f728e019d50e117d1c8fa7eb26c4023e2 /lib | |
parent | 3a149c146b2a977650b89a823c31edfa08a632a8 (diff) | |
download | external_llvm-b95f36183ccbb26154accc99fd304f6e04075682.zip external_llvm-b95f36183ccbb26154accc99fd304f6e04075682.tar.gz external_llvm-b95f36183ccbb26154accc99fd304f6e04075682.tar.bz2 |
Merging r197718:
------------------------------------------------------------------------
r197718 | hans | 2013-12-19 12:32:44 -0800 (Thu, 19 Dec 2013) | 10 lines
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/branches/release_34@197778 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Support/ThreadLocal.cpp | 2 | ||||
-rw-r--r-- | lib/Support/Unix/ThreadLocal.inc | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/Support/ThreadLocal.cpp b/lib/Support/ThreadLocal.cpp index 0587aae..868b6ea 100644 --- a/lib/Support/ThreadLocal.cpp +++ b/lib/Support/ThreadLocal.cpp @@ -23,7 +23,7 @@ // Define all methods as no-ops if threading is explicitly disabled namespace llvm { using namespace sys; -ThreadLocalImpl::ThreadLocalImpl() { } +ThreadLocalImpl::ThreadLocalImpl() : data() { } ThreadLocalImpl::~ThreadLocalImpl() { } void ThreadLocalImpl::setInstance(const void* d) { typedef int SIZE_TOO_BIG[sizeof(d) <= sizeof(data) ? 1 : -1]; diff --git a/lib/Support/Unix/ThreadLocal.inc b/lib/Support/Unix/ThreadLocal.inc index 2b4c901..f14d0fa 100644 --- a/lib/Support/Unix/ThreadLocal.inc +++ b/lib/Support/Unix/ThreadLocal.inc @@ -18,7 +18,7 @@ namespace llvm { using namespace sys; -ThreadLocalImpl::ThreadLocalImpl() { } +ThreadLocalImpl::ThreadLocalImpl() : data() { } ThreadLocalImpl::~ThreadLocalImpl() { } void ThreadLocalImpl::setInstance(const void* d) { data = const_cast<void*>(d);} const void* ThreadLocalImpl::getInstance() { return data; } |