@@ -130,7 +130,9 @@ create_interpreter(const Args& ExtraArgs = {}, clang::DiagnosticConsumer* Client
130
130
131
131
Args ClangArgs = {" -Xclang" , " -emit-llvm-only" , " -Xclang" , " -diagnostic-log-file" , " -Xclang" , " -" , " -xc++" };
132
132
ClangArgs.insert (ClangArgs.end (), ExtraArgs.begin (), ExtraArgs.end ());
133
- auto CI = cantFail (clang::IncrementalCompilerBuilder::create (ClangArgs));
133
+ clang::IncrementalCompilerBuilder builder;
134
+ builder.SetCompilerArgs (ClangArgs);
135
+ auto CI = cantFail (builder.CreateCpp ());
134
136
if (Client)
135
137
{
136
138
CI->getDiagnostics ().setClient (Client, /* ShouldOwnClient=*/ false );
@@ -139,7 +141,7 @@ create_interpreter(const Args& ExtraArgs = {}, clang::DiagnosticConsumer* Client
139
141
}
140
142
141
143
static void
142
- inject_symbol (llvm::StringRef LinkerMangledName, llvm::JITTargetAddress KnownAddr, clang::Interpreter& Interp)
144
+ inject_symbol (llvm::StringRef LinkerMangledName, llvm::orc::ExecutorAddr KnownAddr, clang::Interpreter& Interp)
143
145
{
144
146
using namespace llvm ;
145
147
using namespace llvm ::orc;
@@ -153,7 +155,7 @@ inject_symbol(llvm::StringRef LinkerMangledName, llvm::JITTargetAddress KnownAdd
153
155
}
154
156
155
157
// Nothing to define, we are redefining the same function. FIXME: Diagnose.
156
- if (*Symbol && (JITTargetAddress ) *Symbol == KnownAddr)
158
+ if (*Symbol && (ExecutorAddr ) *Symbol == KnownAddr)
157
159
{
158
160
return ;
159
161
}
@@ -163,12 +165,19 @@ inject_symbol(llvm::StringRef LinkerMangledName, llvm::JITTargetAddress KnownAdd
163
165
SymbolMap::iterator It;
164
166
static llvm::orc::SymbolMap m_InjectedSymbols;
165
167
166
- llvm::orc::LLJIT* Jit = const_cast <llvm::orc::LLJIT*>(Interp.getExecutionEngine ());
167
- JITDylib& DyLib = Jit->getMainJITDylib ();
168
+ auto JitOrError = Interp.getExecutionEngine ();
168
169
170
+ if (Error Err = JitOrError.takeError ())
171
+ {
172
+ logAllUnhandledErrors (std::move (Err), errs (), " [IncrementalJIT] define() failed2: " );
173
+ return ;
174
+ }
175
+
176
+ llvm::orc::LLJIT &Jit = *JitOrError;
177
+ llvm::orc::JITDylib &DyLib = Jit.getMainJITDylib ();
169
178
std::tie (It, Inserted) = m_InjectedSymbols.try_emplace (
170
- Jit-> getExecutionSession ().intern (LinkerMangledName),
171
- JITEvaluatedSymbol (KnownAddr, JITSymbolFlags::Exported)
179
+ Jit. getExecutionSession ().intern (LinkerMangledName),
180
+ ExecutorSymbolDef (KnownAddr, JITSymbolFlags::Exported)
172
181
);
173
182
assert (Inserted && " Why wasn't this found in the initial Jit lookup?" );
174
183
@@ -178,14 +187,14 @@ inject_symbol(llvm::StringRef LinkerMangledName, llvm::JITTargetAddress KnownAdd
178
187
// The symbol be in the DyLib or in-process.
179
188
if (auto Err = DyLib.remove ({It->first }))
180
189
{
181
- logAllUnhandledErrors (std::move (Err), errs (), " [IncrementalJIT] define() failed2 : " );
190
+ logAllUnhandledErrors (std::move (Err), errs (), " [IncrementalJIT] define() failed3 : " );
182
191
return ;
183
192
}
184
193
}
185
194
186
195
if (Error Err = DyLib.define (absoluteSymbols ({*It})))
187
196
{
188
- logAllUnhandledErrors (std::move (Err), errs (), " [IncrementalJIT] define() failed3 : " );
197
+ logAllUnhandledErrors (std::move (Err), errs (), " [IncrementalJIT] define() failed4 : " );
189
198
}
190
199
}
191
200
@@ -559,8 +568,8 @@ namespace xcpp
559
568
560
569
// Inject versions of printf and fprintf that output to std::cout
561
570
// and std::cerr (see implementation above).
562
- inject_symbol (" printf" , llvm::pointerToJITTargetAddress (printf_jit), *m_interpreter);
563
- inject_symbol (" fprintf" , llvm::pointerToJITTargetAddress (fprintf_jit), *m_interpreter);
571
+ inject_symbol (" printf" , llvm::orc::ExecutorAddr::fromPtr (printf_jit), *m_interpreter);
572
+ inject_symbol (" fprintf" , llvm::orc::ExecutorAddr::fromPtr (fprintf_jit), *m_interpreter);
564
573
}
565
574
566
575
void interpreter::restore_output ()
0 commit comments