diff --git a/include/clasp/clbind/names.h b/include/clasp/clbind/names.h index b5e9e35895..49b868a70f 100644 --- a/include/clasp/clbind/names.h +++ b/include/clasp/clbind/names.h @@ -49,4 +49,4 @@ inline std::string PrepareName(const RawName& name) { return name._raw_name; } // eg: scope.def("foo"_raw, ...) // ;; This will bind the symbol |foo| // -inline clbind::RawName operator"" _raw(const char* arg, size_t len) { return clbind::RawName(std::string(arg, len)); } +inline clbind::RawName operator""_raw(const char* arg, size_t len) { return clbind::RawName(std::string(arg, len)); } diff --git a/include/clasp/gctools/hardErrors.h b/include/clasp/gctools/hardErrors.h index 85f02aba67..62d92e3e53 100644 --- a/include/clasp/gctools/hardErrors.h +++ b/include/clasp/gctools/hardErrors.h @@ -27,6 +27,8 @@ THE SOFTWARE. */ /* -^- */ +#include + void dbg_hook(const char* errorString); namespace core { @@ -45,12 +47,15 @@ class HardError { }; [[noreturn]] void throw_hard_error(const std::string& msg); + +#define HARD_ERROR(msg) \ + throw_hard_error(fmt::format("{}:{}:{} {}\n", __FILE__, __LINE__, __FUNCTION__, msg)) + [[noreturn]] void throw_hard_error_not_applicable_method(const char* msg); [[noreturn]] void throw_hard_error_bad_client(void* ptr); [[noreturn]] void throw_hard_error_bad_layout_command(int cmd); [[noreturn]] void throw_hard_error_side_stack_damaged(size_t totalSize, size_t calcSize); [[noreturn]] void throw_hard_error_mps_bad_result(int result); -[[noreturn]] void throw_hard_error_failed_assertion(const char* assertion); [[noreturn]] void throw_hard_error_cast_failed(const char* type, const char* from); [[noreturn]] void throw_hard_error_cannot_cast_tagged_pointer(const char* name, size_t kind); [[noreturn]] void throw_hard_error_implement_me(const char* funcname, const char* filename, size_t lineno) noexcept(false); @@ -87,12 +92,12 @@ class HardError { #define GCTOOLS_ASSERT(x) \ { \ if (!(x)) \ - throw_hard_error_failed_assertion(#x); \ + HARD_ERROR("Failed assertion: " #x); \ }; #define GCTOOLS_ASSERTF(x, msg) \ { \ if (!(x)) \ - throw_hard_error_failed_assertion(#x " " msg); \ + HARD_ERROR("Failed assertion: " #x " " msg); \ }; #else #define GCTOOLS_ASSERT(x) diff --git a/include/clasp/gctools/smart_pointers.h b/include/clasp/gctools/smart_pointers.h index afabd78dcd..d2f549e447 100644 --- a/include/clasp/gctools/smart_pointers.h +++ b/include/clasp/gctools/smart_pointers.h @@ -133,9 +133,7 @@ template class base_ptr { template inline base_ptr as_assert() const { #ifdef DEBUG_ASSERT - if (!TaggedCast::isA(this->theObject)) { - throw_hard_error_failed_assertion("as_assert failed!"); - } + GCTOOLS_ASSERT((TaggedCast::isA(this->theObject))) #endif base_ptr ret((Tagged)this->theObject); return ret; @@ -403,9 +401,7 @@ template <> class smart_ptr { template inline smart_ptr as_assert() const { #ifdef DEBUG_ASSERT - if (!TaggedCast::isA(this->theObject)) { - throw_hard_error_failed_assertion("as_assert failed!"); - } + GCTOOLS_ASSERT((TaggedCast::isA(this->theObject))) #endif smart_ptr ret((Tagged)this->theObject); return ret; @@ -690,9 +686,7 @@ template <> class smart_ptr { } template inline smart_ptr as_assert() const { #ifdef DEBUG_ASSERT - if (!TaggedCast::isA(this->theObject)) { - throw_hard_error_failed_assertion("as_assert failed!"); - } + GCTOOLS_ASSERT((TaggedCast::isA(this->theObject))) #endif smart_ptr ret((Tagged)this->theObject); return ret; @@ -823,9 +817,7 @@ template <> class smart_ptr { } template inline smart_ptr as_assert() const { #ifdef DEBUG_ASSERT - if (!TaggedCast::isA(this->theObject)) { - throw_hard_error_failed_assertion("as_assert failed!"); - } + GCTOOLS_ASSERT((TaggedCast::isA(this->theObject))) #endif smart_ptr ret((Tagged)this->theObject); return ret; diff --git a/src/gctools/hardErrors.cc b/src/gctools/hardErrors.cc index 7fc32a937c..981b0ea46a 100644 --- a/src/gctools/hardErrors.cc +++ b/src/gctools/hardErrors.cc @@ -17,11 +17,6 @@ abort(); } -[[noreturn]] void throw_hard_error_failed_assertion(const char* assertion) { - printf("%s:%d:%s %s\n", __FILE__, __LINE__, __FUNCTION__, assertion); - abort(); -} - [[noreturn]] void throw_hard_error_not_applicable_method(const char* method) { printf("%s:%d:%s %s\n", __FILE__, __LINE__, __FUNCTION__, method); abort(); diff --git a/src/llvmo/llvmoExpose.cc b/src/llvmo/llvmoExpose.cc index 2e7796e362..22944a4cc3 100644 --- a/src/llvmo/llvmoExpose.cc +++ b/src/llvmo/llvmoExpose.cc @@ -615,7 +615,11 @@ CL_DEFMETHOD core::T_sp TargetMachine_O::emitModule(core::T_sp stream, core::T_s llvm::legacy::PassManager PM; +#if LLVM_VERSION_MAJOR > 19 + llvm::TargetMachine* LTM = TM; +#else llvm::LLVMTargetMachine* LTM = dynamic_cast(TM); +#endif if (LTM) { llvm::TargetPassConfig* TPC = LTM->createPassConfig(PM); // Disable tail merges to improve debug info accuracy @@ -737,12 +741,16 @@ CL_DEFUN Triple_sp Triple_O::make(const string& triple) { }; CL_PKG_NAME(LlvmoPkg,"triple-normalize"); -CL_EXTERN_DEFUN((std::string(*)(llvm::StringRef str))&llvm::Triple::normalize); +#if LLVM_VERSION_MAJOR < 20 +CL_EXTERN_DEFUN((std::string (*)(llvm::StringRef str))&llvm::Triple::normalize); +#else +CL_DEFUN std::string triple_normalize(llvm::StringRef str) { return llvm::Triple::normalize(str); } +#endif CL_LISPIFY_NAME(getTriple); CL_EXTERN_DEFMETHOD(Triple_O, &llvm::Triple::getTriple); CL_LISPIFY_NAME(getArchName); -CL_EXTERN_DEFMETHOD(Triple_O, (llvm::StringRef(llvm::Triple::*)() const)&llvm::Triple::getArchName); +CL_EXTERN_DEFMETHOD(Triple_O, (llvm::StringRef (llvm::Triple::*)() const) & llvm::Triple::getArchName); CL_LISPIFY_NAME(getVendorName); CL_EXTERN_DEFMETHOD(Triple_O, &llvm::Triple::getVendorName); CL_LISPIFY_NAME(getOSName); @@ -753,7 +761,11 @@ CL_LISPIFY_NAME(getOSAndEnvironmentName); CL_EXTERN_DEFMETHOD(Triple_O, &llvm::Triple::getOSAndEnvironmentName); CL_PKG_NAME(LlvmoPkg, "lookup-intrinsic-id"); -CL_EXTERN_DEFUN((llvm::Intrinsic::ID(*)(llvm::StringRef Name))&llvm::Function::lookupIntrinsicID); +#if LLVM_VERSION_MAJOR < 20 +CL_EXTERN_DEFUN((llvm::Intrinsic::ID (*)(llvm::StringRef Name))&llvm::Function::lookupIntrinsicID); +#else +CL_EXTERN_DEFUN((llvm::Intrinsic::ID (*)(llvm::StringRef Name))&llvm::Intrinsic::lookupIntrinsicID); +#endif SYMBOL_EXPORT_SC_(LlvmoPkg, ArchType); SYMBOL_EXPORT_SC_(LlvmoPkg, ArchType_UnknownArch); @@ -818,8 +830,6 @@ CL_VALUE_ENUM(_sym_ArchType_x86_64, llvm::Triple::x86_64); // X86-64: amd64, CL_VALUE_ENUM(_sym_ArchType_xcore, llvm::Triple::xcore); // XCore: xcore CL_VALUE_ENUM(_sym_ArchType_nvptx, llvm::Triple::nvptx); // NVPTX: 32-bit CL_VALUE_ENUM(_sym_ArchType_nvptx64, llvm::Triple::nvptx64); // NVPTX: 64-bit -CL_VALUE_ENUM(_sym_ArchType_le32, llvm::Triple::le32); // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten) -CL_VALUE_ENUM(_sym_ArchType_le64, llvm::Triple::le64); // le64: generic little-endian 64-bit CPU (PNaCl / Emscripten) CL_VALUE_ENUM(_sym_ArchType_amdil, llvm::Triple::amdil); // AMDIL CL_VALUE_ENUM(_sym_ArchType_amdil64, llvm::Triple::amdil64); // AMDIL with 64-bit pointers CL_VALUE_ENUM(_sym_ArchType_hsail, llvm::Triple::hsail); // AMD HSAIL @@ -1405,7 +1415,7 @@ CL_DEFUN core::List_sp llvm_sys__module_get_function_list(Module_sp module) { namespace llvmo { CL_LISPIFY_NAME(addModuleFlag); -CL_EXTERN_DEFMETHOD(Module_O, (void(llvm::Module::*)(llvm::MDNode*)) & llvm::Module::addModuleFlag); +CL_EXTERN_DEFMETHOD(Module_O, (void (llvm::Module::*)(llvm::MDNode*))&llvm::Module::addModuleFlag); CL_LISPIFY_NAME(getModuleIdentifier); CL_EXTERN_DEFMETHOD(Module_O, &llvm::Module::getModuleIdentifier); CL_LISPIFY_NAME(getGlobalVariable); @@ -1413,8 +1423,8 @@ CL_EXTERN_DEFMETHOD(Module_O, (llvm::GlobalVariable * (llvm::Module::*)(llvm::St CL_LISPIFY_NAME(getNamedGlobal); CL_EXTERN_DEFMETHOD(Module_O, (llvm::GlobalVariable * (llvm::Module::*)(llvm::StringRef)) & llvm::Module::getNamedGlobal); CL_LISPIFY_NAME(getOrInsertFunction); -CL_EXTERN_DEFMETHOD(Module_O, (llvm::FunctionCallee(llvm::Module::*)(llvm::StringRef, - llvm::FunctionType*))&llvm::Module::getOrInsertFunction); +CL_EXTERN_DEFMETHOD(Module_O, (llvm::FunctionCallee (llvm::Module::*)(llvm::StringRef, + llvm::FunctionType*))&llvm::Module::getOrInsertFunction); CL_LISPIFY_NAME(getOrInsertGlobal); CL_EXTERN_DEFMETHOD(Module_O, (llvm::Constant * (llvm::Module::*)(llvm::StringRef, llvm::Type*)) & llvm::Module::getOrInsertGlobal); CL_LISPIFY_NAME(getDataLayoutStr); @@ -1422,10 +1432,10 @@ CL_EXTERN_DEFMETHOD(Module_O, &llvm::Module::getDataLayoutStr); CL_LISPIFY_NAME(getTargetTriple); CL_EXTERN_DEFMETHOD(Module_O, &llvm::Module::getTargetTriple); CL_LISPIFY_NAME(setDataLayout); -CL_EXTERN_DEFMETHOD(Module_O, (void(llvm::Module::*)(const llvm::DataLayout&)) & llvm::Module::setDataLayout); +CL_EXTERN_DEFMETHOD(Module_O, (void (llvm::Module::*)(const llvm::DataLayout&))&llvm::Module::setDataLayout); ; CL_LISPIFY_NAME(setDataLayout.string); -CL_EXTERN_DEFMETHOD(Module_O, (void(llvm::Module::*)(llvm::StringRef)) & llvm::Module::setDataLayout); +CL_EXTERN_DEFMETHOD(Module_O, (void (llvm::Module::*)(llvm::StringRef))&llvm::Module::setDataLayout); ; // CL_EXTERN_DEFMETHOD(Module_O,&llvm::Module::setTargetTriple); DOCGROUP(clasp); @@ -1631,7 +1641,7 @@ CL_EXTERN_DEFMETHOD(ExecutionEngine_O, (void* (llvm::ExecutionEngine::*)(const l llvm::ExecutionEngine::getPointerToGlobalIfAvailable); CL_LISPIFY_NAME(getPointerToGlobalIfAvailable_StringRef); CL_EXTERN_DEFMETHOD(ExecutionEngine_O, - (void* (llvm::ExecutionEngine::*)(llvm::StringRef)) & llvm::ExecutionEngine::getPointerToGlobalIfAvailable); + (void* (llvm::ExecutionEngine::*)(llvm::StringRef))&llvm::ExecutionEngine::getPointerToGlobalIfAvailable); CL_LISPIFY_NAME(getGlobalValueAddress); CL_EXTERN_DEFMETHOD(ExecutionEngine_O, &llvm::ExecutionEngine::getGlobalValueAddress); CL_EXTERN_DEFMETHOD(ExecutionEngine_O, &llvm::ExecutionEngine::getDataLayout); @@ -1910,7 +1920,7 @@ CL_DEFUN core::T_sp llvm_sys__instruction_getNextNonDebugInstruction(Instruction }; CL_LISPIFY_NAME("insertAfter"); -CL_EXTERN_DEFMETHOD(Instruction_O, &llvm::Instruction::insertAfter); +CL_EXTERN_DEFMETHOD(Instruction_O, (void (llvm::Instruction::*)(llvm::Instruction*))&llvm::Instruction::insertAfter); #if LLVM_VERSION_MAJOR < 18 CL_LISPIFY_NAME("insertBefore"); CL_EXTERN_DEFMETHOD(Instruction_O, &llvm::Instruction::insertBefore); @@ -1979,9 +1989,9 @@ CL_DEFUN llvm::Instruction* llvm_sys__replace_call(llvm::Function* func, llvm::I // FIXME: Should be made into a generic function or something. CL_LISPIFY_NAME(getCallingConv); -CL_EXTERN_DEFMETHOD(CallBase_O, (llvmo::ClaspCallingConv(llvm::CallBase::*)())&CallBase_O::ExternalType::getCallingConv); +CL_EXTERN_DEFMETHOD(CallBase_O, (llvmo::ClaspCallingConv (llvm::CallBase::*)())&CallBase_O::ExternalType::getCallingConv); CL_LISPIFY_NAME(setCallingConv); -CL_EXTERN_DEFMETHOD(CallBase_O, (void(llvm::CallBase::*)(llvmo::ClaspCallingConv)) & CallBase_O::ExternalType::setCallingConv); +CL_EXTERN_DEFMETHOD(CallBase_O, (void (llvm::CallBase::*)(llvmo::ClaspCallingConv))&CallBase_O::ExternalType::setCallingConv); core::List_sp CallBase_O::getArgumentList() const { ql::list l; @@ -2283,7 +2293,7 @@ CL_DEFUN APInt_sp APInt_O::makeAPIntWidth(core::Integer_sp value, uint width, bo for (size_t i = 0; i < size; ++i) words[i] = limbs[i]; // Note that APInt has its own storage, so it's fine that words expires. -#if LLVM_VERSION_MAJOR < 19 +#if LLVM_VERSION_MAJOR < 19 apint = llvm::APInt(width, llvm::makeArrayRef(words, size)); #else apint = llvm::APInt(width, llvm::ArrayRef(words, size)); @@ -2341,7 +2351,7 @@ namespace llvmo { CL_LISPIFY_NAME(CreateGlobalString); CL_EXTERN_DEFMETHOD(IRBuilderBase_O, &IRBuilderBase_O::ExternalType::CreateGlobalString); CL_PKG_NAME(LlvmoPkg,"SetInsertPointBasicBlock"); -CL_EXTERN_DEFMETHOD(IRBuilderBase_O, (void(llvm::IRBuilderBase::*)(llvm::BasicBlock*)) & llvm::IRBuilderBase::SetInsertPoint); +CL_EXTERN_DEFMETHOD(IRBuilderBase_O, (void (llvm::IRBuilderBase::*)(llvm::BasicBlock*))&llvm::IRBuilderBase::SetInsertPoint); CL_LISPIFY_NAME(GetInsertBlock); CL_EXTERN_DEFMETHOD(IRBuilderBase_O, &IRBuilderBase_O::ExternalType::GetInsertBlock); @@ -3254,21 +3264,21 @@ CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::setDoesNotThrow); CL_LISPIFY_NAME("isVarArg"); CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::isVarArg); CL_LISPIFY_NAME("addFnAttr"); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(Attribute::AttrKind Kind)) & llvm::Function::addFnAttr); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(Attribute::AttrKind Kind))&llvm::Function::addFnAttr); CL_LISPIFY_NAME("removeFnAttr"); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(Attribute::AttrKind Kind)) & llvm::Function::removeFnAttr); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(Attribute::AttrKind Kind))&llvm::Function::removeFnAttr); CL_LISPIFY_NAME("hasFnAttribute"); -CL_EXTERN_DEFMETHOD(Function_O, (bool(llvm::Function::*)(Attribute::AttrKind Kind) const) & llvm::Function::hasFnAttribute); +CL_EXTERN_DEFMETHOD(Function_O, (bool (llvm::Function::*)(Attribute::AttrKind Kind) const) & llvm::Function::hasFnAttribute); #if 0 CL_LISPIFY_NAME("addAttribute"); CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(unsigned i, typename llvm::Attribute::AttrKind Attr))&llvm::Function::addAttribute); #endif CL_LISPIFY_NAME("addParamAttr"); CL_EXTERN_DEFMETHOD(Function_O, - (void(llvm::Function::*)(unsigned i, typename llvm::Attribute::AttrKind Attr)) & llvm::Function::addParamAttr); + (void (llvm::Function::*)(unsigned i, typename llvm::Attribute::AttrKind Attr))&llvm::Function::addParamAttr); CL_LISPIFY_NAME("setSubprogram"); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(llvm::DISubprogram*)) & llvm::Function::setSubprogram); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(llvm::DISubprogram*))&llvm::Function::setSubprogram); CL_LISPIFY_NAME("addReturnAttr"); CL_DEFMETHOD void Function_O::addReturnAttr(typename llvm::Attribute::AttrKind Attr) {} @@ -3336,9 +3346,9 @@ CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::empty); CL_LISPIFY_NAME(arg_size); CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::arg_size); CL_LISPIFY_NAME(getCallingConv); -CL_EXTERN_DEFMETHOD(Function_O, (llvmo::ClaspCallingConv(llvm::Function::*)())&Function_O::ExternalType::getCallingConv); +CL_EXTERN_DEFMETHOD(Function_O, (llvmo::ClaspCallingConv (llvm::Function::*)())&Function_O::ExternalType::getCallingConv); CL_LISPIFY_NAME(setCallingConv); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(llvmo::ClaspCallingConv)) & Function_O::ExternalType::setCallingConv); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(llvmo::ClaspCallingConv))&Function_O::ExternalType::setCallingConv); CL_LISPIFY_NAME(setDoesNotThrow); CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::setDoesNotThrow); CL_LISPIFY_NAME(doesNotThrow); @@ -3350,12 +3360,12 @@ CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::doesNotReturn); CL_LISPIFY_NAME(setPersonalityFn); CL_EXTERN_DEFMETHOD(Function_O, &llvm::Function::setPersonalityFn); CL_LISPIFY_NAME(addFnAttr); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(llvm::Attribute::AttrKind)) & llvm::Function::addFnAttr); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(llvm::Attribute::AttrKind))&llvm::Function::addFnAttr); ; // CL_LISPIFY_NAME(addFnAttr1String); // CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(llvm::StringRef)) & llvm::Function::addFnAttr);; CL_LISPIFY_NAME(addFnAttr2String); -CL_EXTERN_DEFMETHOD(Function_O, (void(llvm::Function::*)(llvm::StringRef, llvm::StringRef)) & llvm::Function::addFnAttr); +CL_EXTERN_DEFMETHOD(Function_O, (void (llvm::Function::*)(llvm::StringRef, llvm::StringRef))&llvm::Function::addFnAttr); ; ; diff --git a/src/llvmo/runtimeJit.cc b/src/llvmo/runtimeJit.cc index 28b0764a3d..28358f708a 100644 --- a/src/llvmo/runtimeJit.cc +++ b/src/llvmo/runtimeJit.cc @@ -93,6 +93,7 @@ #include #else #include +#include #endif #include #include @@ -365,8 +366,12 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { if (!MR.getSymbols().count(PersonalitySymbol)) Config.PrePrunePasses.insert(Config.PrePrunePasses.begin(), [this](jitlink::LinkGraph& G) -> Error { for (auto ssym : G.defined_symbols()) { - std::string sssym(ssym->getName()); - if (strcmp(sssym.c_str(), "DW.ref.__gxx_personality_v0") == 0) { +#if LLVM_VERSION_MAJOR < 20 + std::string sname = ssym->getName().str(); +#else + std::string sname = (*ssym->getName()).str(); +#endif + if (sname == "DW.ref.__gxx_personality_v0") { DEBUG_OBJECT_FILES_PRINT( ("%s:%d:%s PrePrunePass found DW.ref.__gxx_personality_v0 setting Strong Linkage and Local scope\n", __FILE__, __LINE__, __FUNCTION__)); @@ -387,7 +392,11 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { } } for (auto ssym : G.defined_symbols()) { +#if LLVM_VERSION_MAJOR < 20 std::string sname = ssym->getName().str(); +#else + std::string sname = (*ssym->getName()).str(); +#endif #ifdef DEBUG_OBJECT_FILES if (ssym->getName().str() != "") { DEBUG_OBJECT_FILES_PRINT( @@ -489,7 +498,11 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { if ((sectionName.find(BSS_NAME) != string::npos) || (sectionName.find(DATA_NAME) != string::npos)) { llvm::jitlink::SectionRange range(S); for (auto& sym : S.symbols()) { - std::string name = sym->getName().str(); +#if LLVM_VERSION_MAJOR < 20 + std::string sname = sym->getName().str(); +#else + std::string sname = (*sym->getName()).str(); +#endif DEBUG_OBJECT_FILES_PRINT(("%s:%d:%s section: %s symbol: %s at %p size: %lu\n", __FILE__, __LINE__, __FUNCTION__, S.getName().str().c_str(), name.c_str(), address, size)); } @@ -517,7 +530,11 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { currentCode->_TextSectionStart, currentCode->_TextSectionEnd)); for (auto& sym : S.symbols()) { if (sym->isCallable() && sym->hasName()) { +#if LLVM_VERSION_MAJOR < 20 std::string name = sym->getName().str(); +#else + std::string name = (*sym->getName()).str(); +#endif void* address = (void*)sym->getAddress().getValue(); size_t size = sym->getSize(); core::core__jit_register_symbol(name, size, (void*)address); @@ -548,7 +565,11 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { printf("%s:%d:%s No executable region was found for the Code_O object for graph %s\n", __FILE__, __LINE__, __FUNCTION__, G.getName().c_str()); for (auto* Sym : G.external_symbols()) { +#if LLVM_VERSION_MAJOR < 20 printf(" Symbol: %s\n", Sym->getName().str().c_str()); +#else + printf(" Symbol: %s\n", (*Sym->getName()).str().c_str()); +#endif } } // @@ -556,7 +577,12 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { gctools::GCRootsInModule* roots; bool found_literals = false; for (auto ssym : G.defined_symbols()) { - if (ssym->getName() == "DW.ref.__gxx_personality_v0") { +#if LLVM_VERSION_MAJOR < 20 + std::string sname = ssym->getName().str(); +#else + std::string sname = (*ssym->getName()).str(); +#endif + if (sname == "DW.ref.__gxx_personality_v0") { DEBUG_OBJECT_FILES_PRINT( ("%s:%d:%s PrePrunePass found DW.ref.__gxx_personality_v0 setting Strong Linkage and Local scope\n", __FILE__, __LINE__, __FUNCTION__)); @@ -574,7 +600,11 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { } #endif if (ssym->hasName()) { +#if LLVM_VERSION_MAJOR < 20 std::string sname = ssym->getName().str(); +#else + std::string sname = (*ssym->getName()).str(); +#endif size_t pos; pos = sname.find(gcroots_in_module_name); if (pos != std::string::npos) { @@ -636,11 +666,16 @@ class ClaspPlugin : public llvm::orc::ObjectLinkingLayer::Plugin { gctools::clasp_gc_registerRoots(literalStart, literalCount); #ifdef DEBUG_OBJECT_FILES for (auto* Sym : G.external_symbols()) - if (Sym->getName() == "DW.ref.__gxx_personality_v0") { - DEBUG_OBJECT_FILES_PRINT(("%s:%d:%s Graph %s has external DW.ref.__gxx_personality_v0 reference.\n", __FILE__, __LINE__, - __FUNCTION__, G.getName().c_str())); - break; - } +#if LLVM_VERSION_MAJOR < 20 + std::string sname = Sym->getName().str(); +#else + std::string sname = (*Sym->getName()).str(); +#endif + if (sname == "DW.ref.__gxx_personality_v0") { + DEBUG_OBJECT_FILES_PRINT(("%s:%d:%s Graph %s has external DW.ref.__gxx_personality_v0 reference.\n", __FILE__, __LINE__, + __FUNCTION__, G.getName().c_str())); + break; + } #endif }