summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-decl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-decl.cpp')
-rw-r--r--source/slang/slang-check-decl.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index d35502235..131d30d98 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -2380,8 +2380,15 @@ namespace Slang
{
// check the type being inherited from
auto base = inheritanceDecl->base;
- CheckConstraintSubType(base);
- base = TranslateTypeNode(base);
+ Decl* toExclude = nullptr;
+ Decl* parent = getParentDecl(inheritanceDecl);
+ // We exclude in the case that a circular reference is possible. This is when a parent is a transparent decl.
+ // If we just blanket "block" all ensure's of a parent a generic may fail when trying to fetch a parent
+ if (parent->findModifier<TransparentModifier>())
+ toExclude = parent;
+ SemanticsDeclVisitorBase baseVistor(this->withDeclToExcludeFromLookup(toExclude));
+ baseVistor.CheckConstraintSubType(base);
+ base = baseVistor.TranslateTypeNode(base);
inheritanceDecl->base = base;
// Note: we do not check whether the type being inherited from