diff --git a/src/valid/function.rs b/src/valid/function.rs index 06aa27c84b..998f873c08 100644 --- a/src/valid/function.rs +++ b/src/valid/function.rs @@ -948,10 +948,7 @@ impl super::Validator { .types .get(var.ty.index()) .ok_or(LocalVariableError::InvalidType(var.ty))?; - if !type_info - .flags - .contains(super::TypeFlags::DATA | super::TypeFlags::SIZED) - { + if !type_info.flags.contains(super::TypeFlags::CONSTRUCTIBLE) { return Err(LocalVariableError::InvalidType(var.ty)); } diff --git a/src/valid/interface.rs b/src/valid/interface.rs index ef88a46a86..7c6c5244e4 100644 --- a/src/valid/interface.rs +++ b/src/valid/interface.rs @@ -541,9 +541,8 @@ impl super::Validator { (TypeFlags::empty(), true) } - crate::AddressSpace::Private | crate::AddressSpace::WorkGroup => { - (TypeFlags::DATA | TypeFlags::SIZED, false) - } + crate::AddressSpace::Private => (TypeFlags::CONSTRUCTIBLE, false), + crate::AddressSpace::WorkGroup => (TypeFlags::DATA | TypeFlags::SIZED, false), crate::AddressSpace::PushConstant => { if !self.capabilities.contains(Capabilities::PUSH_CONSTANT) { return Err(GlobalVariableError::UnsupportedCapability( diff --git a/src/valid/type.rs b/src/valid/type.rs index f8ceb463c6..c0d8a12956 100644 --- a/src/valid/type.rs +++ b/src/valid/type.rs @@ -566,7 +566,10 @@ impl super::Validator { } Ti::RayQuery => { self.require_type_capability(Capabilities::RAY_QUERY)?; - TypeInfo::new(TypeFlags::DATA | TypeFlags::SIZED, Alignment::ONE) + TypeInfo::new( + TypeFlags::DATA | TypeFlags::CONSTRUCTIBLE | TypeFlags::SIZED, + Alignment::ONE, + ) } Ti::BindingArray { base, size } => { if base >= handle { diff --git a/tests/wgsl-errors.rs b/tests/wgsl-errors.rs index b164f69557..cbab660269 100644 --- a/tests/wgsl-errors.rs +++ b/tests/wgsl-errors.rs @@ -1342,6 +1342,23 @@ fn invalid_local_vars() { }) if local_var_name == "not_okay" } + + check_validation! { + " + fn f() { + var x: atomic; + } + ": + Err(naga::valid::ValidationError::Function { + source: naga::valid::FunctionError::LocalVariable { + name: local_var_name, + source: naga::valid::LocalVariableError::InvalidType(_), + .. + }, + .. + }) + if local_var_name == "x" + } } #[test]