tint/sem: Add const to StructMember 'type'.

This should be immutable once the sem tree is built.
Add a hacky const_cast in Resolver for now, as this is preferable to
having some things non-const in sem.

Bug: tint:745
Change-Id: I67ebce76730347c9543875ab8e1c21a47d71fd56
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/97584
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Ben Clayton 2022-07-29 14:32:51 +00:00 committed by Dawn LUCI CQ
parent 8e0368e554
commit 6fb5d379c2
5 changed files with 12 additions and 11 deletions

View File

@ -361,7 +361,7 @@ const Constant* ZeroValue(ProgramBuilder& builder, const sem::Type* type) {
return nullptr;
},
[&](const sem::Struct* s) -> const Constant* {
std::unordered_map<sem::Type*, const Constant*> zero_by_type;
std::unordered_map<const sem::Type*, const Constant*> zero_by_type;
utils::Vector<const sem::Constant*, 4> zeros;
zeros.Reserve(s->Members().size());
for (auto* member : s->Members()) {

View File

@ -2803,7 +2803,7 @@ bool Resolver::ApplyStorageClassUsageToType(ast::StorageClass sc,
str->AddUsage(sc);
for (auto* member : str->Members()) {
if (!ApplyStorageClassUsageToType(sc, member->Type(), usage)) {
if (!ApplyStorageClassUsageToType(sc, const_cast<sem::Type*>(member->Type()), usage)) {
std::stringstream err;
err << "while analysing structure member " << sem_.TypeNameOf(str) << "."
<< builder_->Symbols().NameFor(member->Declaration()->symbol);

View File

@ -157,7 +157,7 @@ bool Struct::IsConstructible() const {
StructMember::StructMember(const ast::StructMember* declaration,
Symbol name,
sem::Type* type,
const sem::Type* type,
uint32_t index,
uint32_t offset,
uint32_t align,

View File

@ -182,7 +182,7 @@ class StructMember final : public Castable<StructMember, Node> {
/// @param size the byte size of the member
StructMember(const ast::StructMember* declaration,
Symbol name,
sem::Type* type,
const sem::Type* type,
uint32_t index,
uint32_t offset,
uint32_t align,
@ -205,7 +205,7 @@ class StructMember final : public Castable<StructMember, Node> {
const sem::Struct* Struct() const { return struct_; }
/// @returns the type of the member
sem::Type* Type() const { return type_; }
const sem::Type* Type() const { return type_; }
/// @returns the member index
uint32_t Index() const { return index_; }
@ -223,7 +223,7 @@ class StructMember final : public Castable<StructMember, Node> {
const ast::StructMember* const declaration_;
const Symbol name_;
const sem::Struct* struct_;
sem::Type* const type_;
const sem::Type* type_;
const uint32_t index_;
const uint32_t offset_;
const uint32_t align_;

View File

@ -105,10 +105,11 @@ DecomposeStridedMatrix::~DecomposeStridedMatrix() = default;
bool DecomposeStridedMatrix::ShouldRun(const Program* program, const DataMap&) const {
bool should_run = false;
GatherCustomStrideMatrixMembers(program, [&](const sem::StructMember*, sem::Matrix*, uint32_t) {
should_run = true;
return GatherResult::kStop;
});
GatherCustomStrideMatrixMembers(program,
[&](const sem::StructMember*, const sem::Matrix*, uint32_t) {
should_run = true;
return GatherResult::kStop;
});
return should_run;
}
@ -118,7 +119,7 @@ void DecomposeStridedMatrix::Run(CloneContext& ctx, const DataMap&, DataMap&) co
// and populate the `decomposed` map with the members that have been replaced.
std::unordered_map<const ast::StructMember*, MatrixInfo> decomposed;
GatherCustomStrideMatrixMembers(
ctx.src, [&](const sem::StructMember* member, sem::Matrix* matrix, uint32_t stride) {
ctx.src, [&](const sem::StructMember* member, const sem::Matrix* matrix, uint32_t stride) {
// We've got ourselves a struct member of a matrix type with a custom
// stride. Replace this with an array of column vectors.
MatrixInfo info{stride, matrix};