@@ -112,35 +112,7 @@ inline void maybeMangleDeclName(const clang::GlobalDecl& GD,
112
112
// / The getExecutionEngine() interface has been added for Cling based on LLVM
113
113
// / >=18 and should be used in future releases.
114
114
inline llvm::orc::LLJIT* getExecutionEngine (cling::Interpreter& I) {
115
- #if CLANG_VERSION_MAJOR >= 18
116
115
return I.getExecutionEngine ();
117
- #endif
118
-
119
- unsigned m_ExecutorOffset = 0 ;
120
-
121
- #if CLANG_VERSION_MAJOR == 13
122
- #ifdef __APPLE__
123
- m_ExecutorOffset = 62 ;
124
- #else
125
- m_ExecutorOffset = 72 ;
126
- #endif // __APPLE__
127
- #endif
128
-
129
- // Note: The offsets changed in Cling based on LLVM 16 with the introduction of
130
- // a thread safe context - llvm::orc::ThreadSafeContext
131
- #if CLANG_VERSION_MAJOR == 16
132
- #ifdef __APPLE__
133
- m_ExecutorOffset = 68 ;
134
- #else
135
- m_ExecutorOffset = 78 ;
136
- #endif // __APPLE__
137
- #endif
138
-
139
- int * IncrementalExecutor =
140
- ((int *)(const_cast <cling::Interpreter*>(&I))) + m_ExecutorOffset;
141
- int * IncrementalJit = *(int **)IncrementalExecutor + 0 ;
142
- int * LLJIT = *(int **)IncrementalJit + 0 ;
143
- return *(llvm::orc::LLJIT**)LLJIT;
144
116
}
145
117
146
118
inline llvm::Expected<llvm::JITTargetAddress>
@@ -152,12 +124,8 @@ getSymbolAddress(cling::Interpreter& I, llvm::StringRef IRName) {
152
124
llvm::orc::SymbolNameVector Names;
153
125
llvm::orc::ExecutionSession& ES = Jit.getExecutionSession ();
154
126
Names.push_back (ES.intern (IRName));
155
- #if CLANG_VERSION_MAJOR < 16
156
- return llvm::make_error<llvm::orc::SymbolsNotFound>(Names);
157
- #else
158
127
return llvm::make_error<llvm::orc::SymbolsNotFound>(ES.getSymbolStringPool (),
159
128
std::move (Names));
160
- #endif // CLANG_VERSION_MAJOR
161
129
}
162
130
163
131
inline void codeComplete (std::vector<std::string>& Results,
@@ -238,9 +206,6 @@ namespace compat {
238
206
239
207
inline std::unique_ptr<clang::Interpreter>
240
208
createClangInterpreter (std::vector<const char *>& args) {
241
- #if CLANG_VERSION_MAJOR < 16
242
- auto ciOrErr = clang::IncrementalCompilerBuilder::create (args);
243
- #else
244
209
auto has_arg = [](const char * x, llvm::StringRef match = " cuda" ) {
245
210
llvm::StringRef Arg = x;
246
211
Arg = Arg.trim ().ltrim (' -' );
@@ -270,23 +235,19 @@ createClangInterpreter(std::vector<const char*>& args) {
270
235
DeviceCI = std::move (*devOrErr);
271
236
}
272
237
auto ciOrErr = CudaEnabled ? CB.CreateCudaHost () : CB.CreateCpp ();
273
- # endif // CLANG_VERSION_MAJOR < 16
238
+
274
239
if (!ciOrErr) {
275
240
llvm::logAllUnhandledErrors (ciOrErr.takeError (), llvm::errs (),
276
241
" Failed to build Incremental compiler:" );
277
242
return nullptr ;
278
243
}
279
- #if CLANG_VERSION_MAJOR < 16
280
- auto innerOrErr = clang::Interpreter::create (std::move (*ciOrErr));
281
- #else
282
244
(*ciOrErr)->LoadRequestedPlugins ();
283
245
if (CudaEnabled)
284
246
DeviceCI->LoadRequestedPlugins ();
285
247
auto innerOrErr =
286
248
CudaEnabled ? clang::Interpreter::createWithCUDA (std::move (*ciOrErr),
287
249
std::move (DeviceCI))
288
250
: clang::Interpreter::create (std::move (*ciOrErr));
289
- #endif // CLANG_VERSION_MAJOR < 16
290
251
291
252
if (!innerOrErr) {
292
253
llvm::logAllUnhandledErrors (innerOrErr.takeError (), llvm::errs (),
@@ -333,29 +294,15 @@ inline void maybeMangleDeclName(const clang::GlobalDecl& GD,
333
294
RawStr.flush ();
334
295
}
335
296
336
- // Clang 13 - Initial implementation of Interpreter and clang-repl
337
- // Clang 14 - Add new Interpreter methods: getExecutionEngine,
338
- // getSymbolAddress, getSymbolAddressFromLinkerName
339
- // Clang 15 - Add new Interpreter methods: Undo
340
297
// Clang 18 - Add new Interpreter methods: CodeComplete
341
298
342
299
inline llvm::orc::LLJIT* getExecutionEngine (clang::Interpreter& I) {
343
- #if CLANG_VERSION_MAJOR >= 14
344
300
auto * engine = &llvm::cantFail (I.getExecutionEngine ());
345
301
return const_cast <llvm::orc::LLJIT*>(engine);
346
- #else
347
- assert (0 && " Not implemented in Clang <14!" );
348
- return nullptr ;
349
- #endif
350
302
}
351
303
352
304
inline llvm::Expected<llvm::JITTargetAddress>
353
305
getSymbolAddress (clang::Interpreter& I, llvm::StringRef IRName) {
354
- #if CLANG_VERSION_MAJOR < 14
355
- assert (0 && " Not implemented in Clang <14!" );
356
- return llvm::createStringError (llvm::inconvertibleErrorCode (),
357
- " Not implemented in Clang <14!" );
358
- #endif // CLANG_VERSION_MAJOR < 14
359
306
360
307
auto AddrOrErr = I.getSymbolAddress (IRName);
361
308
if (llvm::Error Err = AddrOrErr.takeError ())
@@ -373,7 +320,6 @@ getSymbolAddress(clang::Interpreter& I, clang::GlobalDecl GD) {
373
320
inline llvm::Expected<llvm::JITTargetAddress>
374
321
getSymbolAddressFromLinkerName (clang::Interpreter& I,
375
322
llvm::StringRef LinkerName) {
376
- #if CLANG_VERSION_MAJOR >= 14
377
323
const auto & DL = getExecutionEngine (I)->getDataLayout ();
378
324
char GlobalPrefix = DL.getGlobalPrefix ();
379
325
std::string LinkerNameTmp (LinkerName);
@@ -384,21 +330,10 @@ getSymbolAddressFromLinkerName(clang::Interpreter& I,
384
330
if (llvm::Error Err = AddrOrErr.takeError ())
385
331
return std::move (Err);
386
332
return AddrOrErr->getValue ();
387
- #else
388
- assert (0 && " Not implemented in Clang <14!" );
389
- return llvm::createStringError (llvm::inconvertibleErrorCode (),
390
- " Not implemented in Clang <14!" );
391
- #endif
392
333
}
393
334
394
335
inline llvm::Error Undo (clang::Interpreter& I, unsigned N = 1 ) {
395
- #if CLANG_VERSION_MAJOR >= 15
396
336
return I.Undo (N);
397
- #else
398
- assert (0 && " Not implemented in Clang <15!" );
399
- return llvm::createStringError (llvm::inconvertibleErrorCode (),
400
- " Not implemented in Clang <15!" );
401
- #endif
402
337
}
403
338
404
339
inline void codeComplete (std::vector<std::string>& Results,
@@ -451,34 +386,14 @@ using Interpreter = Cpp::Interpreter;
451
386
namespace compat {
452
387
453
388
// Clang >= 14 change type name to string (spaces formatting problem)
454
- #if CLANG_VERSION_MAJOR >= 14
455
389
inline std::string FixTypeName (const std::string type_name) {
456
390
return type_name;
457
391
}
458
- #else
459
- inline std::string FixTypeName (const std::string type_name) {
460
- std::string result = type_name;
461
- size_t pos = 0 ;
462
- while ((pos = result.find (" [" , pos)) != std::string::npos) {
463
- result.erase (pos, 1 );
464
- pos++;
465
- }
466
- return result;
467
- }
468
- #endif
469
392
470
- // Clang >= 16 change CLANG_LIBDIR_SUFFIX to CLANG_INSTALL_LIBDIR_BASENAME
471
- #if CLANG_VERSION_MAJOR < 16
472
- #define CLANG_INSTALL_LIBDIR_BASENAME (llvm::Twine(" lib" ) + CLANG_LIBDIR_SUFFIX)
473
- #endif
474
393
inline std::string MakeResourceDir (llvm::StringRef Dir) {
475
394
llvm::SmallString<128 > P (Dir);
476
395
llvm::sys::path::append (P, CLANG_INSTALL_LIBDIR_BASENAME, " clang" ,
477
- #if CLANG_VERSION_MAJOR < 16
478
- CLANG_VERSION_STRING
479
- #else
480
396
CLANG_VERSION_MAJOR_STRING
481
- #endif
482
397
);
483
398
return std::string (P.str ());
484
399
}
0 commit comments