thread.h revision 296417
1//===-- llvm/Support/thread.h - Wrapper for <thread> ------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This header is a wrapper for <thread> that works around problems with the
11// MSVC headers when exceptions are disabled. It also provides llvm::thread,
12// which is either a typedef of std::thread or a replacement that calls the
13// function synchronously depending on the value of LLVM_ENABLE_THREADS.
14//
15//===----------------------------------------------------------------------===//
16
17#ifndef LLVM_SUPPORT_THREAD_H
18#define LLVM_SUPPORT_THREAD_H
19
20#include "llvm/Config/llvm-config.h"
21
22#if LLVM_ENABLE_THREADS
23
24#ifdef _MSC_VER
25// concrt.h depends on eh.h for __uncaught_exception declaration
26// even if we disable exceptions.
27#include <eh.h>
28
29// Suppress 'C++ exception handler used, but unwind semantics are not enabled.'
30#pragma warning(push)
31#pragma warning(disable:4530)
32#endif
33
34#include <thread>
35
36#ifdef _MSC_VER
37#pragma warning(pop)
38#endif
39
40namespace llvm {
41typedef std::thread thread;
42}
43
44#else // !LLVM_ENABLE_THREADS
45
46#include <utility>
47
48namespace llvm {
49
50struct thread {
51  thread() {}
52  thread(thread &&other) {}
53  template <class Function, class... Args>
54  explicit thread(Function &&f, Args &&... args) {
55    f(std::forward<Args>(args)...);
56  }
57  thread(const thread &) = delete;
58
59  void join() {}
60};
61
62}
63
64#endif // LLVM_ENABLE_THREADS
65
66#endif
67