Coverage Report

Created: 2020-02-25 14:32

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/AST/Interp/Disasm.cpp
Line
Count
Source (jump to first uncovered line)
1
//===--- Disasm.cpp - Disassembler for bytecode functions -------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Dump method for Function which disassembles the bytecode.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "Function.h"
14
#include "Opcode.h"
15
#include "PrimType.h"
16
#include "Program.h"
17
#include "clang/AST/DeclCXX.h"
18
#include "llvm/Support/Compiler.h"
19
20
using namespace clang;
21
using namespace clang::interp;
22
23
0
LLVM_DUMP_METHOD void Function::dump() const { dump(llvm::errs()); }
24
25
0
LLVM_DUMP_METHOD void Function::dump(llvm::raw_ostream &OS) const {
26
0
  if (F) {
27
0
    if (auto *Cons = dyn_cast<CXXConstructorDecl>(F)) {
28
0
      const std::string &Name = Cons->getParent()->getNameAsString();
29
0
      OS << Name << "::" << Name << ":\n";
30
0
    } else {
31
0
      OS << F->getNameAsString() << ":\n";
32
0
    }
33
0
  } else {
34
0
    OS << "<<expr>>\n";
35
0
  }
36
0
37
0
  OS << "frame size: " << getFrameSize() << "\n";
38
0
  OS << "arg size:   " << getArgSize() << "\n";
39
0
  OS << "rvo:        " << hasRVO() << "\n";
40
0
41
0
  auto PrintName = [&OS](const char *Name) {
42
0
    OS << Name;
43
0
    for (long I = 0, N = strlen(Name); I < 30 - N; ++I) {
44
0
      OS << ' ';
45
0
    }
46
0
  };
47
0
48
0
  for (CodePtr Start = getCodeBegin(), PC = Start; PC != getCodeEnd();) {
49
0
    size_t Addr = PC - Start;
50
0
    auto Op = PC.read<Opcode>();
51
0
    OS << llvm::format("%8d", Addr) << " ";
52
0
    switch (Op) {
53
0
#define GET_DISASM
54
0
#include "Opcodes.inc"
55
0
#undef GET_DISASM
56
0
    }
57
0
  }
58
0
}
59
60
0
LLVM_DUMP_METHOD void Program::dump() const { dump(llvm::errs()); }
61
62
0
LLVM_DUMP_METHOD void Program::dump(llvm::raw_ostream &OS) const {
63
0
  for (auto &Func : Funcs) {
64
0
    Func.second->dump();
65
0
  }
66
0
  for (auto &Anon : AnonFuncs) {
67
0
    Anon->dump();
68
0
  }
69
0
}