From 96df31a9fa53e3d897a2b7c4eef021f37f421c91 Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Mon, 13 Oct 2025 23:14:45 +0900 Subject: Fix segfault on arrays of structs containing parameter blocks (#8555) Closes https://github.com/shader-slang/slang/issues/8154 However there is further design work to do on implementing the "NonAddressableType" suggestion --- source/slang/slang-check-conformance.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-check-conformance.cpp') diff --git a/source/slang/slang-check-conformance.cpp b/source/slang/slang-check-conformance.cpp index ba1b8ea55..40ab66e95 100644 --- a/source/slang/slang-check-conformance.cpp +++ b/source/slang/slang-check-conformance.cpp @@ -348,7 +348,11 @@ TypeTag SemanticsVisitor::getTypeTags(Type* type) typeTag = (TypeTag)((int)typeTag | (int)TypeTag::LinkTimeSized); } if (!sized) - typeTag = (TypeTag)((int)typeTag | (int)TypeTag::Unsized); + { + // Unbounded arrays are both Unsized and NonAddressable + typeTag = + (TypeTag)((int)typeTag | (int)TypeTag::Unsized | (int)TypeTag::NonAddressable); + } return typeTag; } @@ -356,6 +360,11 @@ TypeTag SemanticsVisitor::getTypeTags(Type* type) { return getTypeTags(modifiedType->getBase()); } + if (as(type)) + { + // ParameterBlock types are non-addressable + return TypeTag::NonAddressable; + } if (auto parameterGroupType = as(type)) { auto elementTags = getTypeTags(parameterGroupType->getElementType()); @@ -372,7 +381,9 @@ TypeTag SemanticsVisitor::getTypeTags(Type* type) else if (auto declRefType = as(type)) { if (auto aggTypeDecl = as(declRefType->getDeclRef())) + { return aggTypeDecl.getDecl()->typeTags; + } } return TypeTag::None; } -- cgit v1.2.3