diff options
Diffstat (limited to 'source/slang/slang-check-conformance.cpp')
| -rw-r--r-- | source/slang/slang-check-conformance.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
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<ParameterBlockType>(type)) + { + // ParameterBlock types are non-addressable + return TypeTag::NonAddressable; + } if (auto parameterGroupType = as<UniformParameterGroupType>(type)) { auto elementTags = getTypeTags(parameterGroupType->getElementType()); @@ -372,7 +381,9 @@ TypeTag SemanticsVisitor::getTypeTags(Type* type) else if (auto declRefType = as<DeclRefType>(type)) { if (auto aggTypeDecl = as<AggTypeDecl>(declRefType->getDeclRef())) + { return aggTypeDecl.getDecl()->typeTags; + } } return TypeTag::None; } |
