diff options
| author | ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> | 2024-04-16 22:01:06 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-16 19:01:06 -0700 |
| commit | 282da4ac94d60d3244f4d72085e66fb82cf5abd8 (patch) | |
| tree | d4c2b7d952ffbcb3f3e6debe6648bedb38b0fc66 /source/slang/slang-check-decl.cpp | |
| parent | d5d39dda2ec02c1dd21ba34a89f74b27092efcdd (diff) | |
Fix for unscoped enums circular reference causing an error, #3959 (#3962)
Diffstat (limited to 'source/slang/slang-check-decl.cpp')
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 11 |
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 |
