mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-25 16:03:38 +00:00
We're seeing some chrome bots fail unittests in ways that suspiciously look like dynamic casts are doing Wrong Things. The ClassID::Of() logic depends on the linker folding away duplicate compilation unit definitions based on ODR rules. If we were to somehow end up with different definitions, then we'd have two or more different ClassIDs for the same T type - leading to issues similar to what we're seeing. I'm not entirely sure why/how this could happen - and we've so far been entirely unable to locally reproduce - but it _might_ have something to do with the goma cache. In an attempt to work around this, move the static symbol definition out of a header-local-static and into the .cc file for each of the types. Change-Id: If914d3045b9dac6fbe8824dac71153a768cfceb9 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34563 Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: Ben Clayton <bclayton@google.com>
67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
// Copyright 2020 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "src/ast/array_accessor_expression.h"
|
|
|
|
#include "src/ast/clone_context.h"
|
|
#include "src/ast/module.h"
|
|
|
|
TINT_INSTANTIATE_CLASS_ID(tint::ast::ArrayAccessorExpression);
|
|
|
|
namespace tint {
|
|
namespace ast {
|
|
|
|
ArrayAccessorExpression::ArrayAccessorExpression() : Base() {}
|
|
|
|
ArrayAccessorExpression::ArrayAccessorExpression(Expression* array,
|
|
Expression* idx_expr)
|
|
: Base(), array_(array), idx_expr_(idx_expr) {}
|
|
|
|
ArrayAccessorExpression::ArrayAccessorExpression(const Source& source,
|
|
Expression* array,
|
|
Expression* idx_expr)
|
|
: Base(source), array_(array), idx_expr_(idx_expr) {}
|
|
|
|
ArrayAccessorExpression::ArrayAccessorExpression(ArrayAccessorExpression&&) =
|
|
default;
|
|
|
|
ArrayAccessorExpression::~ArrayAccessorExpression() = default;
|
|
|
|
ArrayAccessorExpression* ArrayAccessorExpression::Clone(
|
|
CloneContext* ctx) const {
|
|
return ctx->mod->create<ArrayAccessorExpression>(ctx->Clone(array_),
|
|
ctx->Clone(idx_expr_));
|
|
}
|
|
|
|
bool ArrayAccessorExpression::IsValid() const {
|
|
if (array_ == nullptr || !array_->IsValid())
|
|
return false;
|
|
if (idx_expr_ == nullptr || !idx_expr_->IsValid())
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
void ArrayAccessorExpression::to_str(std::ostream& out, size_t indent) const {
|
|
make_indent(out, indent);
|
|
out << "ArrayAccessor[" << result_type_str() << "]{" << std::endl;
|
|
array_->to_str(out, indent + 2);
|
|
idx_expr_->to_str(out, indent + 2);
|
|
make_indent(out, indent);
|
|
out << "}" << std::endl;
|
|
}
|
|
|
|
} // namespace ast
|
|
} // namespace tint
|