Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Support/ThreadLocal.h
Line
Count
Source
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
2.68k
      ThreadLocal() : ThreadLocalImpl() { }
CrashRecoveryContext.cpp:llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>::ThreadLocal()
Line
Count
Source
47
1.02k
      ThreadLocal() : ThreadLocalImpl() { }
llvm::sys::ThreadLocal<llvm::CrashRecoveryContext const>::ThreadLocal()
Line
Count
Source
47
1.66k
      ThreadLocal() : ThreadLocalImpl() { }
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
18.5k
      T* get() { return static_cast<T*>(getInstance()); }
CrashRecoveryContext.cpp:llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>::get()
Line
Count
Source
51
14.6k
      T* get() { return static_cast<T*>(getInstance()); }
llvm::sys::ThreadLocal<llvm::CrashRecoveryContext const>::get()
Line
Count
Source
51
3.89k
      T* get() { return static_cast<T*>(getInstance()); }
52
53
      // set - Associates a pointer to an object with the current thread.
54
10.4k
      void set(T* d) { setInstance(d); }
CrashRecoveryContext.cpp:llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>::set((anonymous namespace)::CrashRecoveryContextImpl const*)
Line
Count
Source
54
2.66k
      void set(T* d) { setInstance(d); }
llvm::sys::ThreadLocal<llvm::CrashRecoveryContext const>::set(llvm::CrashRecoveryContext const*)
Line
Count
Source
54
7.79k
      void set(T* d) { setInstance(d); }
55
56
      // erase - Removes the pointer associated with the current thread.
57
      void erase() { removeInstance(); }
58
    };
59
  }
60
}
61
62
#endif