Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- TpiHashing.h ---------------------------------------------*- 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
#ifndef LLVM_DEBUGINFO_PDB_NATIVE_TPIHASHING_H
10
#define LLVM_DEBUGINFO_PDB_NATIVE_TPIHASHING_H
11
 
12
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
13
#include "llvm/Support/Error.h"
14
 
15
namespace llvm {
16
namespace pdb {
17
 
18
Expected<uint32_t> hashTypeRecord(const llvm::codeview::CVType &Type);
19
 
20
struct TagRecordHash {
21
  explicit TagRecordHash(codeview::ClassRecord CR, uint32_t Full,
22
                         uint32_t Forward)
23
      : FullRecordHash(Full), ForwardDeclHash(Forward), Class(std::move(CR)) {
24
    State = 0;
25
  }
26
 
27
  explicit TagRecordHash(codeview::EnumRecord ER, uint32_t Full,
28
                         uint32_t Forward)
29
      : FullRecordHash(Full), ForwardDeclHash(Forward), Enum(std::move(ER)) {
30
    State = 1;
31
  }
32
 
33
  explicit TagRecordHash(codeview::UnionRecord UR, uint32_t Full,
34
                         uint32_t Forward)
35
      : FullRecordHash(Full), ForwardDeclHash(Forward), Union(std::move(UR)) {
36
    State = 2;
37
  }
38
 
39
  uint32_t FullRecordHash;
40
  uint32_t ForwardDeclHash;
41
 
42
  codeview::TagRecord &getRecord() {
43
    switch (State) {
44
    case 0:
45
      return Class;
46
    case 1:
47
      return Enum;
48
    case 2:
49
      return Union;
50
    }
51
    llvm_unreachable("unreachable!");
52
  }
53
 
54
private:
55
  union {
56
    codeview::ClassRecord Class;
57
    codeview::EnumRecord Enum;
58
    codeview::UnionRecord Union;
59
  };
60
 
61
  uint8_t State = 0;
62
};
63
 
64
/// Given a CVType referring to a class, structure, union, or enum, compute
65
/// the hash of its forward decl and full decl.
66
Expected<TagRecordHash> hashTagRecord(const codeview::CVType &Type);
67
 
68
} // end namespace pdb
69
} // end namespace llvm
70
 
71
#endif // LLVM_DEBUGINFO_PDB_NATIVE_TPIHASHING_H