Interpreter.h revision 193323
1//===-- Interpreter.h - Abstract Execution Engine Interface -----*- 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 file forces the interpreter to link in on certain operating systems.
11// (Windows).
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef EXECUTION_ENGINE_INTERPRETER_H
16#define EXECUTION_ENGINE_INTERPRETER_H
17
18#include "llvm/ExecutionEngine/ExecutionEngine.h"
19#include <cstdlib>
20
21namespace llvm {
22  extern void LinkInInterpreter();
23}
24
25namespace {
26  struct ForceInterpreterLinking {
27    ForceInterpreterLinking() {
28      // We must reference the passes in such a way that compilers will not
29      // delete it all as dead code, even with whole program optimization,
30      // yet is effectively a NO-OP. As the compiler isn't smart enough
31      // to know that getenv() never returns -1, this will do the job.
32      if (std::getenv("bar") != (char*) -1)
33        return;
34
35      llvm::LinkInInterpreter();
36    }
37  } ForceInterpreterLinking;
38}
39
40#endif
41