Skip to content

Commit 76446f8

Browse files
theaniketgirimcbarton
authored andcommitted
Remove compat::getExecutionEngine wrapper
Remove the compat::getExecutionEngine() wrapper functions that exposed clang::Interpreter::getExecutionEngine() and cling::Interpreter::getExecutionEngine() as LLJIT* pointers. This wrapper causes compatibility issues when upgrading to LLVM 22, where getExecutionEngine() returns IncrementalExecutor& instead of LLJIT&. Changes: - Remove compat::getExecutionEngine() for both Cling and Clang-REPL paths in Compatibility.h - Remove CppInternal::Interpreter::getExecutionEngine() wrapper in CppInterOpInterpreter.h - Callers that need LLJIT access (DefineAbsoluteSymbol, InsertOrReplaceJitSymbol) now call clang::Interpreter::getExecutionEngine() directly - getSymbolAddressFromLinkerName now accesses DataLayout via the LLJIT reference directly instead of through the compat wrapper - Relaxed assert in getDynamicLibraryManager() to check interpreter validity instead of execution engine availability Fixes #774
1 parent 795f450 commit 76446f8

File tree

3 files changed

+9
-23
lines changed

3 files changed

+9
-23
lines changed

lib/CppInterOp/Compatibility.h

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,12 @@ inline void maybeMangleDeclName(const clang::GlobalDecl& GD,
9595
cling::utils::Analyze::maybeMangleDeclName(GD, mangledName);
9696
}
9797

98-
/// The getExecutionEngine() interface was been added for Cling based on LLVM
99-
/// >=18. For previous versions, the LLJIT was obtained by computing the object
100-
/// offsets in the cling::Interpreter instance(IncrementalExecutor):
101-
/// sizeof (m_Opts) + sizeof(m_LLVMContext). The IncrementalJIT and JIT itself
102-
/// have an offset of 0 as the first datamember.
103-
inline llvm::orc::LLJIT* getExecutionEngine(cling::Interpreter& I) {
104-
return I.getExecutionEngine();
105-
}
106-
10798
inline llvm::Expected<llvm::JITTargetAddress>
10899
getSymbolAddress(cling::Interpreter& I, llvm::StringRef IRName) {
109100
if (void* Addr = I.getAddressOfGlobal(IRName))
110101
return (llvm::JITTargetAddress)Addr;
111102

112-
llvm::orc::LLJIT& Jit = *compat::getExecutionEngine(I);
103+
llvm::orc::LLJIT& Jit = *I.getExecutionEngine();
113104
llvm::orc::SymbolNameVector Names;
114105
llvm::orc::ExecutionSession& ES = Jit.getExecutionSession();
115106
Names.push_back(ES.intern(IRName));
@@ -347,11 +338,6 @@ inline void maybeMangleDeclName(const clang::GlobalDecl& GD,
347338

348339
// Clang 18 - Add new Interpreter methods: CodeComplete
349340

350-
inline llvm::orc::LLJIT* getExecutionEngine(clang::Interpreter& I) {
351-
auto* engine = &llvm::cantFail(I.getExecutionEngine());
352-
return const_cast<llvm::orc::LLJIT*>(engine);
353-
}
354-
355341
inline llvm::Expected<llvm::JITTargetAddress>
356342
getSymbolAddress(clang::Interpreter& I, llvm::StringRef IRName) {
357343

@@ -371,7 +357,8 @@ getSymbolAddress(clang::Interpreter& I, clang::GlobalDecl GD) {
371357
inline llvm::Expected<llvm::JITTargetAddress>
372358
getSymbolAddressFromLinkerName(clang::Interpreter& I,
373359
llvm::StringRef LinkerName) {
374-
const auto& DL = getExecutionEngine(I)->getDataLayout();
360+
auto& Jit = llvm::cantFail(I.getExecutionEngine());
361+
const auto& DL = Jit.getDataLayout();
375362
char GlobalPrefix = DL.getGlobalPrefix();
376363
std::string LinkerNameTmp(LinkerName);
377364
if (GlobalPrefix != '\0') {

lib/CppInterOp/CppInterOp.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3258,7 +3258,8 @@ bool DefineAbsoluteSymbol(compat::Interpreter& I,
32583258
using namespace llvm;
32593259
using namespace llvm::orc;
32603260

3261-
llvm::orc::LLJIT& Jit = *compat::getExecutionEngine(I);
3261+
llvm::orc::LLJIT& Jit =
3262+
llvm::cantFail(static_cast<clang::Interpreter&>(I).getExecutionEngine());
32623263
llvm::orc::ExecutionSession& ES = Jit.getExecutionSession();
32633264
JITDylib& DyLib = *Jit.getProcessSymbolsJITDylib().get();
32643265

@@ -3678,7 +3679,8 @@ bool InsertOrReplaceJitSymbol(compat::Interpreter& I,
36783679
using namespace llvm::orc;
36793680

36803681
auto Symbol = compat::getSymbolAddress(I, linker_mangled_name);
3681-
llvm::orc::LLJIT& Jit = *compat::getExecutionEngine(I);
3682+
llvm::orc::LLJIT& Jit =
3683+
llvm::cantFail(static_cast<clang::Interpreter&>(I).getExecutionEngine());
36823684
llvm::orc::ExecutionSession& ES = Jit.getExecutionSession();
36833685
JITDylib& DyLib = *Jit.getProcessSymbolsJITDylib().get();
36843686

@@ -3700,7 +3702,7 @@ bool InsertOrReplaceJitSymbol(compat::Interpreter& I,
37003702

37013703
// Let's inject it.
37023704
llvm::orc::SymbolMap InjectedSymbols;
3703-
auto& DL = compat::getExecutionEngine(I)->getDataLayout();
3705+
auto& DL = Jit.getDataLayout();
37043706
char GlobalPrefix = DL.getGlobalPrefix();
37053707
std::string tmp(linker_mangled_name);
37063708
if (GlobalPrefix != '\0') {

lib/CppInterOp/CppInterOpInterpreter.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,6 @@ class Interpreter {
293293
return inner->getCompilerInstance();
294294
}
295295

296-
llvm::orc::LLJIT* getExecutionEngine() const {
297-
return compat::getExecutionEngine(*inner);
298-
}
299296

300297
llvm::Expected<clang::PartialTranslationUnit&> Parse(llvm::StringRef Code) {
301298
return inner->Parse(Code);
@@ -464,7 +461,7 @@ class Interpreter {
464461
clang::Sema& getSema() const { return getCI()->getSema(); }
465462

466463
const DynamicLibraryManager* getDynamicLibraryManager() const {
467-
assert(compat::getExecutionEngine(*inner) && "We must have an executor");
464+
assert(inner && "We must have an interpreter");
468465
static std::unique_ptr<DynamicLibraryManager> DLM = nullptr;
469466
if (!DLM) {
470467
DLM.reset(new DynamicLibraryManager());

0 commit comments

Comments
 (0)