diff --git a/include/Nazara/Shader/Ast/Attribute.hpp b/include/Nazara/Shader/Ast/Attribute.hpp index ec3bf6667..3394e64bc 100644 --- a/include/Nazara/Shader/Ast/Attribute.hpp +++ b/include/Nazara/Shader/Ast/Attribute.hpp @@ -39,6 +39,8 @@ namespace Nz::ShaderAst bool HasValue() const; + void Reset(); + ExpressionValue& operator=(const ExpressionValue&) = default; ExpressionValue& operator=(ExpressionValue&&) noexcept = default; diff --git a/include/Nazara/Shader/Ast/Attribute.inl b/include/Nazara/Shader/Ast/Attribute.inl index a7ea1e475..0b5793e0f 100644 --- a/include/Nazara/Shader/Ast/Attribute.inl +++ b/include/Nazara/Shader/Ast/Attribute.inl @@ -67,6 +67,12 @@ namespace Nz::ShaderAst { return !std::holds_alternative(m_value); } + + template + void ExpressionValue::Reset() + { + m_value = {}; + } } #include diff --git a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp index 86dace007..ed7523bdb 100644 --- a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp +++ b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp @@ -887,9 +887,11 @@ namespace Nz::ShaderAst } if (node.returnType.HasValue()) + { clone->returnType = ResolveType(node.returnType); - else - clone->returnType = ExpressionType{ NoType{} }; + if (clone->returnType.HasValue() && IsNoType(clone->returnType.GetResultingValue())) + clone->returnType.Reset(); //< handle void as no return type + } if (node.depthWrite.HasValue()) clone->depthWrite = ComputeExprValue(node.depthWrite);