mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-13 03:41:11 +00:00

Per the comments, `hash_code` values "are not stable to save or persist", so are unsuitable for the module hash, which must persist across compilations for the implicit module hashes to match. Note that in practice, today, `hash_code` are stable. But this is an implementation detail, with a clear `FIXME` indicating we should switch to a per-execution seed. The stability of `MD5` also allows modules cross-compilation use-cases. The `size_t` underlying storage for `hash_code` varying across platforms could cause mismatching hashes when cross-compiling from a 64bit target to a 32bit target. Note that native endianness is still used for the hash computation. So hashes will differ between platforms of different endianness. Reviewed By: jansvoboda11 Differential Revision: https://reviews.llvm.org/D102943
74 lines
2.4 KiB
C++
74 lines
2.4 KiB
C++
//===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
|
|
#define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
|
|
|
|
#include "clang/Serialization/ModuleFileExtension.h"
|
|
#include "clang/Basic/LLVM.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Bitstream/BitstreamReader.h"
|
|
#include <string>
|
|
|
|
namespace clang {
|
|
|
|
/// A module file extension used for testing purposes.
|
|
class TestModuleFileExtension
|
|
: public llvm::RTTIExtends<TestModuleFileExtension, ModuleFileExtension> {
|
|
std::string BlockName;
|
|
unsigned MajorVersion;
|
|
unsigned MinorVersion;
|
|
bool Hashed;
|
|
std::string UserInfo;
|
|
|
|
class Writer : public ModuleFileExtensionWriter {
|
|
public:
|
|
Writer(ModuleFileExtension *Ext) : ModuleFileExtensionWriter(Ext) { }
|
|
~Writer() override;
|
|
|
|
void writeExtensionContents(Sema &SemaRef,
|
|
llvm::BitstreamWriter &Stream) override;
|
|
};
|
|
|
|
class Reader : public ModuleFileExtensionReader {
|
|
llvm::BitstreamCursor Stream;
|
|
|
|
public:
|
|
~Reader() override;
|
|
|
|
Reader(ModuleFileExtension *Ext, const llvm::BitstreamCursor &InStream);
|
|
};
|
|
|
|
public:
|
|
static char ID;
|
|
|
|
TestModuleFileExtension(StringRef BlockName, unsigned MajorVersion,
|
|
unsigned MinorVersion, bool Hashed,
|
|
StringRef UserInfo)
|
|
: BlockName(BlockName), MajorVersion(MajorVersion),
|
|
MinorVersion(MinorVersion), Hashed(Hashed), UserInfo(UserInfo) {}
|
|
~TestModuleFileExtension() override;
|
|
|
|
ModuleFileExtensionMetadata getExtensionMetadata() const override;
|
|
|
|
void hashExtension(ExtensionHashBuilder &HBuilder) const override;
|
|
|
|
std::unique_ptr<ModuleFileExtensionWriter>
|
|
createExtensionWriter(ASTWriter &Writer) override;
|
|
|
|
std::unique_ptr<ModuleFileExtensionReader>
|
|
createExtensionReader(const ModuleFileExtensionMetadata &Metadata,
|
|
ASTReader &Reader, serialization::ModuleFile &Mod,
|
|
const llvm::BitstreamCursor &Stream) override;
|
|
|
|
std::string str() const;
|
|
};
|
|
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
|