LLVM 20.0.0git
TpiHashing.h
Go to the documentation of this file.
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
13#include "llvm/Support/Error.h"
14
15namespace llvm {
16namespace pdb {
17
18Expected<uint32_t> hashTypeRecord(const llvm::codeview::CVType &Type);
19
22 uint32_t Forward)
23 : FullRecordHash(Full), ForwardDeclHash(Forward), Class(std::move(CR)) {
24 State = 0;
25 }
26
28 uint32_t Forward)
29 : FullRecordHash(Full), ForwardDeclHash(Forward), Enum(std::move(ER)) {
30 State = 1;
31 }
32
34 uint32_t Forward)
35 : FullRecordHash(Full), ForwardDeclHash(Forward), Union(std::move(UR)) {
36 State = 2;
37 }
38
41
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
54private:
55 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.
67
68} // end namespace pdb
69} // end namespace llvm
70
71#endif // LLVM_DEBUGINFO_PDB_NATIVE_TPIHASHING_H
Tagged union holding either a T or a Error.
Definition: Error.h:481
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Expected< uint32_t > hashTypeRecord(const llvm::codeview::CVType &Type)
Definition: TpiHashing.cpp:105
Expected< TagRecordHash > hashTagRecord(const codeview::CVType &Type)
Given a CVType referring to a class, structure, union, or enum, compute the hash of its forward decl ...
Definition: TpiHashing.cpp:88
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1856
Implement std::hash so that hash_code can be used in STL containers.
Definition: BitVector.h:858
codeview::ClassRecord Class
Definition: TpiHashing.h:56
codeview::EnumRecord Enum
Definition: TpiHashing.h:57
TagRecordHash(codeview::UnionRecord UR, uint32_t Full, uint32_t Forward)
Definition: TpiHashing.h:33
TagRecordHash(codeview::EnumRecord ER, uint32_t Full, uint32_t Forward)
Definition: TpiHashing.h:27
codeview::TagRecord & getRecord()
Definition: TpiHashing.h:42
codeview::UnionRecord Union
Definition: TpiHashing.h:58
TagRecordHash(codeview::ClassRecord CR, uint32_t Full, uint32_t Forward)
Definition: TpiHashing.h:21