validation: Allow storage atomics without structs
Fixed: tint:1409
Change-Id: I169fe23ff697e5c997742caba8a37a54867cd3f6
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/85526
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/resolver/atomics_validation_test.cc b/src/tint/resolver/atomics_validation_test.cc
index dad3559..c241da1 100644
--- a/src/tint/resolver/atomics_validation_test.cc
+++ b/src/tint/resolver/atomics_validation_test.cc
@@ -34,6 +34,14 @@
}
TEST_F(ResolverAtomicValidationTest, StorageClass_Storage) {
+ Global("g", ty.atomic(Source{{12, 34}}, ty.i32()),
+ ast::StorageClass::kStorage, ast::Access::kReadWrite,
+ GroupAndBinding(0, 0));
+
+ EXPECT_TRUE(r()->Resolve()) << r()->error();
+}
+
+TEST_F(ResolverAtomicValidationTest, StorageClass_Storage_Struct) {
auto* s =
Structure("s", {Member("a", ty.atomic(Source{{12, 34}}, ty.i32()))});
Global("g", ty.Of(s), ast::StorageClass::kStorage, ast::Access::kReadWrite,
diff --git a/src/tint/resolver/resolver_validation.cc b/src/tint/resolver/resolver_validation.cc
index 57cfb47..02ec786 100644
--- a/src/tint/resolver/resolver_validation.cc
+++ b/src/tint/resolver/resolver_validation.cc
@@ -517,7 +517,8 @@
auto source = decl->type ? decl->type->source : decl->source;
if (type->Is<sem::Atomic>()) {
- if (sc != ast::StorageClass::kWorkgroup) {
+ if (sc != ast::StorageClass::kWorkgroup &&
+ sc != ast::StorageClass::kStorage) {
AddError(
"atomic variables must have <storage> or <workgroup> storage class",
source);