From 243f522a9087a807d2dadbb3ef201694b6897bf7 Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 11 Jul 2025 15:24:41 -0700 Subject: Fix segfault with Ptr extension using 'This' type reference (#7719) * Fix segfault with Ptr extension using 'This' type reference Set LookupOptions::NoDeref when looking up target type members within extension declarations to prevent automatic pointer dereferencing that was causing breadcrumb handling issues and segfaults. Fixes #7656 Co-authored-by: Yong He * Enhance test for ptr-extension-this-type to verify correctness with interpreter - Changed function to return sizeof(This) - sizeof(Ptr) + 1 - Modified test to use interpreter with filecheck to verify result equals 1 - Added main() function that calls the extension method and prints result - Verifies that 'This' correctly refers to Ptr in extension context Co-authored-by: Yong He --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yong He --- source/slang/slang-lookup.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'source') diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp index 604cee2b7..a9b472776 100644 --- a/source/slang/slang-lookup.cpp +++ b/source/slang/slang-lookup.cpp @@ -959,7 +959,23 @@ static void _lookUpInScopes( } } - _lookUpMembersInType(astBuilder, name, type, request, result, breadcrumbPtr); + // When looking up in an extension declaration, we should not automatically + // dereference pointer types, as the 'This' type should refer to the + // extension target type itself, not the pointed-to type. + LookupRequest modifiedRequest = request; + if (aggTypeDeclBaseRef.as()) + { + modifiedRequest.options = (LookupOptions)((uint32_t)modifiedRequest.options | + (uint32_t)LookupOptions::NoDeref); + } + + _lookUpMembersInType( + astBuilder, + name, + type, + modifiedRequest, + result, + breadcrumbPtr); } else { -- cgit v1.2.3