diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp index 1ab3aa5b0d..bca2f75871 100644 --- a/source/slang/slang-check-overload.cpp +++ b/source/slang/slang-check-overload.cpp @@ -2167,7 +2167,8 @@ void SemanticsVisitor::AddTypeOverloadCandidates(Type* type, OverloadResolveCont // from a value of the same type. There is no need in Slang for // "copy constructors" but the core module currently has to define // some just to make code that does, e.g., `float(1.0f)` work.) - + LookupOptions options = + LookupOptions(uint8_t(LookupOptions::IgnoreInheritance) | uint8_t(LookupOptions::NoDeref)); LookupResult initializers = lookUpMember( m_astBuilder, this, @@ -2175,7 +2176,7 @@ void SemanticsVisitor::AddTypeOverloadCandidates(Type* type, OverloadResolveCont type, context.sourceScope, LookupMask::Default, - LookupOptions::NoDeref); + options); AddOverloadCandidates(initializers, context); } diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp index 3667e2cd2d..72fbed581c 100644 --- a/source/slang/slang-lookup.cpp +++ b/source/slang/slang-lookup.cpp @@ -436,7 +436,7 @@ static void _lookupMembersInSuperTypeFacets( continue; } - auto extensionFacet = as(facet.getImpl()->getDeclRef().getDecl()); + // If we are looking up in an interface, and the lookup request told us // to skip interfaces, we should do so here. if (auto baseInterfaceDeclRef = containerDeclRef.as()) @@ -448,10 +448,22 @@ static void _lookupMembersInSuperTypeFacets( // "Self" else if ( int(request.options) & int(LookupOptions::IgnoreInheritance) && - (facet.getImpl()->directness != Facet::Directness::Self && - (!extensionFacet || !extensionFacet->targetType.type->equals(selfType)))) + (facet.getImpl()->directness != Facet::Directness::Self)) { - continue; + if (auto extensionDeclRef = facet.getImpl()->getDeclRef().as()) + { + if (auto targetType = getTargetType(astBuilder, extensionDeclRef)) + { + if (!targetType->equals(selfType)) + { + // If the extension is to the same type as the one we are looking up in, we + // should include it in the lookup. + continue; + } + } + } + else + continue; } // Some things that are syntactically `InheritanceDecl`s don't actually