summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-conformance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-conformance.cpp')
-rw-r--r--source/slang/slang-check-conformance.cpp13
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;
}