mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 17:43:35 +03:00
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#include "utils.h"
|
|
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <cassert>
|
|
|
|
#include "llvm/IR/Module.h"
|
|
#include "llvm/IR/Verifier.h"
|
|
|
|
#include "context.h"
|
|
|
|
|
|
void fatal(const Context &context, const std::string &reason)
|
|
{
|
|
if (nullptr != context.fatalHandler) {
|
|
context.fatalHandler(context.fatalHandlerData,
|
|
reason.c_str());
|
|
}
|
|
else {
|
|
fprintf(stderr, "Runtime compiler fatal: %s\n", reason.c_str());
|
|
abort();
|
|
}
|
|
}
|
|
|
|
void interruptPoint(const Context &context, const char *desc, const char *object)
|
|
{
|
|
assert(nullptr != desc);
|
|
if (nullptr != context.interruptPointHandler) {
|
|
context.interruptPointHandler(context.interruptPointHandlerData,
|
|
desc,
|
|
object);
|
|
}
|
|
}
|
|
|
|
void verifyModule(const Context &context, llvm::Module &module)
|
|
{
|
|
std::string err;
|
|
llvm::raw_string_ostream errstream(err);
|
|
if (llvm::verifyModule(module, &errstream)) {
|
|
std::string desc = std::string("module verification failed:") +
|
|
errstream.str();
|
|
fatal(context, desc);
|
|
}
|
|
}
|