File: utils.cpp

package info (click to toggle)
ldc 1%3A1.24.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 53,728 kB
  • sloc: cpp: 55,939; ansic: 10,599; sh: 958; makefile: 801; asm: 507; objc: 122; exp: 30; python: 12
file content (48 lines) | stat: -rw-r--r-- 1,384 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//===-- utils.cpp ---------------------------------------------------------===//
//
//                         LDC – the LLVM D compiler
//
// This file is distributed under the Boost Software License. See the LICENSE
// file for details.
//
//===----------------------------------------------------------------------===//

#include "utils.h"

#include <cassert>
#include <cstdio>
#include <cstdlib>

#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, "Dynamic compiler fatal: %s\n", reason.c_str());
    fflush(stderr);
    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);
  }
}