Coverage Report

Created: 2020-06-26 05:44

/home/arjun/llvm-project/llvm/include/llvm/Support/ThreadLocal.h
Line
Count
Source (jump to first uncovered line)
1
//===- llvm/Support/ThreadLocal.h - Thread Local Data ------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares the llvm::sys::ThreadLocal class.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_SUPPORT_THREADLOCAL_H
14
#define LLVM_SUPPORT_THREADLOCAL_H
15
16
#include "llvm/Support/DataTypes.h"
17
#include "llvm/Support/Threading.h"
18
#include <cassert>
19
20
namespace llvm {
21
  namespace sys {
22
    // ThreadLocalImpl - Common base class of all ThreadLocal instantiations.
23
    // YOU SHOULD NEVER USE THIS DIRECTLY.
24
    class ThreadLocalImpl {
25
      typedef uint64_t ThreadLocalDataTy;
26
      /// Platform-specific thread local data.
27
      ///
28
      /// This is embedded in the class and we avoid malloc'ing/free'ing it,
29
      /// to make this class more safe for use along with CrashRecoveryContext.
30
      union {
31
        char data[sizeof(ThreadLocalDataTy)];
32
        ThreadLocalDataTy align_data;
33
      };
34
    public:
35
      ThreadLocalImpl();
36
      virtual ~ThreadLocalImpl();
37
      void setInstance(const void* d);
38
      void *getInstance();
39
      void removeInstance();
40
    };
41
42
    /// ThreadLocal - A class used to abstract thread-local storage.  It holds,
43
    /// for each thread, a pointer a single object of type T.
44
    template<class T>
45
    class ThreadLocal : public ThreadLocalImpl {
46
    public:
47
0
      ThreadLocal() : ThreadLocalImpl() { }
Unexecuted instantiation: CrashRecoveryContext.cpp:_ZN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEEC2Ev
Unexecuted instantiation: _ZN4llvm3sys11ThreadLocalIKNS_20CrashRecoveryContextEEC2Ev
48
49
      /// get - Fetches a pointer to the object associated with the current
50
      /// thread.  If no object has yet been associated, it returns NULL;
51
0
      T* get() { return static_cast<T*>(getInstance()); }
Unexecuted instantiation: CrashRecoveryContext.cpp:_ZN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEE3getEv
Unexecuted instantiation: _ZN4llvm3sys11ThreadLocalIKNS_20CrashRecoveryContextEE3getEv
52
53
      // set - Associates a pointer to an object with the current thread.
54
0
      void set(T* d) { setInstance(d); }
Unexecuted instantiation: CrashRecoveryContext.cpp:_ZN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEE3setEPS4_
Unexecuted instantiation: _ZN4llvm3sys11ThreadLocalIKNS_20CrashRecoveryContextEE3setEPS3_
55
56
      // erase - Removes the pointer associated with the current thread.
57
      void erase() { removeInstance(); }
58
    };
59
  }
60
}
61
62
#endif