]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm-c/Types.h
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm-c / Types.h
1 /*===-- llvm-c/Support.h - C Interface Types declarations ---------*- 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 defines types used by the C interface to LLVM.                   *|
11 |*                                                                            *|
12 \*===----------------------------------------------------------------------===*/
13
14 #ifndef LLVM_C_TYPES_H
15 #define LLVM_C_TYPES_H
16
17 #include "llvm-c/DataTypes.h"
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 /**
24  * @defgroup LLVMCSupportTypes Types and Enumerations
25  *
26  * @{
27  */
28
29 typedef int LLVMBool;
30
31 /* Opaque types. */
32
33 /**
34  * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
35  * parameters must be passed as base types. Despite the declared types, most
36  * of the functions provided operate only on branches of the type hierarchy.
37  * The declared parameter names are descriptive and specify which type is
38  * required. Additionally, each type hierarchy is documented along with the
39  * functions that operate upon it. For more detail, refer to LLVM's C++ code.
40  * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
41  * form unwrap<RequiredType>(Param).
42  */
43
44 /**
45  * Used to pass regions of memory through LLVM interfaces.
46  *
47  * @see llvm::MemoryBuffer
48  */
49 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
50
51 /**
52  * The top-level container for all LLVM global data. See the LLVMContext class.
53  */
54 typedef struct LLVMOpaqueContext *LLVMContextRef;
55
56 /**
57  * The top-level container for all other LLVM Intermediate Representation (IR)
58  * objects.
59  *
60  * @see llvm::Module
61  */
62 typedef struct LLVMOpaqueModule *LLVMModuleRef;
63
64 /**
65  * Each value in the LLVM IR has a type, an LLVMTypeRef.
66  *
67  * @see llvm::Type
68  */
69 typedef struct LLVMOpaqueType *LLVMTypeRef;
70
71 /**
72  * Represents an individual value in LLVM IR.
73  *
74  * This models llvm::Value.
75  */
76 typedef struct LLVMOpaqueValue *LLVMValueRef;
77
78 /**
79  * Represents a basic block of instructions in LLVM IR.
80  *
81  * This models llvm::BasicBlock.
82  */
83 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
84
85 /**
86  * Represents an LLVM Metadata.
87  *
88  * This models llvm::Metadata.
89  */
90 typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
91
92 /**
93  * Represents an LLVM basic block builder.
94  *
95  * This models llvm::IRBuilder.
96  */
97 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
98
99 /**
100  * Represents an LLVM debug info builder.
101  *
102  * This models llvm::DIBuilder.
103  */
104 typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
105
106 /**
107  * Interface used to provide a module to JIT or interpreter.
108  * This is now just a synonym for llvm::Module, but we have to keep using the
109  * different type to keep binary compatibility.
110  */
111 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
112
113 /** @see llvm::PassManagerBase */
114 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
115
116 /** @see llvm::PassRegistry */
117 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
118
119 /**
120  * Used to get the users and usees of a Value.
121  *
122  * @see llvm::Use */
123 typedef struct LLVMOpaqueUse *LLVMUseRef;
124
125 /**
126  * Used to represent an attributes.
127  *
128  * @see llvm::Attribute
129  */
130 typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef;
131
132 /**
133  * @see llvm::DiagnosticInfo
134  */
135 typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
136
137 /**
138  * @see llvm::Comdat
139  */
140 typedef struct LLVMComdat *LLVMComdatRef;
141
142 /**
143  * @see llvm::Module::ModuleFlagEntry
144  */
145 typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
146
147 /**
148  * @see llvm::JITEventListener
149  */
150 typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
151
152 /**
153  * @}
154  */
155
156 #ifdef __cplusplus
157 }
158 #endif
159
160 #endif