#include "clang/AST/GlobalDecl.h"
#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
#include "llvm/Support/Error.h"
#include <memory>
/// Link a dynamic library
llvm::Error LoadDynamicLibrary(const char *name);
- /// \returns the \c JITTargetAddress of a \c GlobalDecl. This interface uses
+ /// \returns the \c ExecutorAddr of a \c GlobalDecl. This interface uses
/// the CodeGenModule's internal mangling cache to avoid recomputing the
/// mangled name.
- llvm::Expected<llvm::JITTargetAddress> getSymbolAddress(GlobalDecl GD) const;
+ llvm::Expected<llvm::orc::ExecutorAddr> getSymbolAddress(GlobalDecl GD) const;
- /// \returns the \c JITTargetAddress of a given name as written in the IR.
- llvm::Expected<llvm::JITTargetAddress>
+ /// \returns the \c ExecutorAddr of a given name as written in the IR.
+ llvm::Expected<llvm::orc::ExecutorAddr>
getSymbolAddress(llvm::StringRef IRName) const;
- /// \returns the \c JITTargetAddress of a given name as written in the object
+ /// \returns the \c ExecutorAddr of a given name as written in the object
/// file.
- llvm::Expected<llvm::JITTargetAddress>
+ llvm::Expected<llvm::orc::ExecutorAddr>
getSymbolAddressFromLinkerName(llvm::StringRef LinkerName) const;
};
} // namespace clang
return Jit->initialize(Jit->getMainJITDylib());
}
-llvm::Expected<llvm::JITTargetAddress>
+llvm::Expected<llvm::orc::ExecutorAddr>
IncrementalExecutor::getSymbolAddress(llvm::StringRef Name,
SymbolNameKind NameKind) const {
auto Sym = (NameKind == LinkerName) ? Jit->lookupLinkerMangled(Name)
if (!Sym)
return Sym.takeError();
- return Sym->getValue();
+ return Sym;
}
} // end namespace clang
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
+#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
#include <memory>
llvm::Error removeModule(PartialTranslationUnit &PTU);
llvm::Error runCtors() const;
llvm::Error cleanUp();
- llvm::Expected<llvm::JITTargetAddress>
+ llvm::Expected<llvm::orc::ExecutorAddr>
getSymbolAddress(llvm::StringRef Name, SymbolNameKind NameKind) const;
llvm::orc::LLJIT &GetExecutionEngine() { return *Jit; }
return llvm::Error::success();
}
-llvm::Expected<llvm::JITTargetAddress>
+llvm::Expected<llvm::orc::ExecutorAddr>
Interpreter::getSymbolAddress(GlobalDecl GD) const {
if (!IncrExecutor)
return llvm::make_error<llvm::StringError>("Operation failed. "
return getSymbolAddress(MangledName);
}
-llvm::Expected<llvm::JITTargetAddress>
+llvm::Expected<llvm::orc::ExecutorAddr>
Interpreter::getSymbolAddress(llvm::StringRef IRName) const {
if (!IncrExecutor)
return llvm::make_error<llvm::StringError>("Operation failed. "
return IncrExecutor->getSymbolAddress(IRName, IncrementalExecutor::IRName);
}
-llvm::Expected<llvm::JITTargetAddress>
+llvm::Expected<llvm::orc::ExecutorAddr>
Interpreter::getSymbolAddressFromLinkerName(llvm::StringRef Name) const {
if (!IncrExecutor)
return llvm::make_error<llvm::StringError>("Operation failed. "
#include "llvm/ExecutionEngine/Orc/LLJIT.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/TargetSelect.h"
-#include "llvm-c/Error.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
llvm::cantFail(Interp->ParseAndExecute(ExceptionCode));
testing::internal::CaptureStdout();
auto ThrowException =
- (int (*)())llvm::cantFail(Interp->getSymbolAddress("throw_exception"));
+ llvm::cantFail(Interp->getSymbolAddress("throw_exception"))
+ .toPtr<int (*)()>();
EXPECT_ANY_THROW(ThrowException());
std::string CapturedStdOut = testing::internal::GetCapturedStdout();
EXPECT_EQ(CapturedStdOut, "Caught: 'To be caught in JIT'\n");
std::string MangledName = MangleName(FD);
auto Addr = cantFail(Interp->getSymbolAddress(MangledName));
- EXPECT_NE(0U, Addr);
+ EXPECT_NE(0U, Addr.getValue());
GlobalDecl GD(FD);
EXPECT_EQ(Addr, cantFail(Interp->getSymbolAddress(GD)));
}
std::string MangledName = MangleName(TmpltSpec);
typedef int (*TemplateSpecFn)(void *);
- auto fn = (TemplateSpecFn)cantFail(Interp->getSymbolAddress(MangledName));
+ auto fn =
+ cantFail(Interp->getSymbolAddress(MangledName)).toPtr<TemplateSpecFn>();
EXPECT_EQ(42, fn(NewA));
free(NewA);
}