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 --- tests/bugs/ptr-extension-this-type.slang | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tests/bugs/ptr-extension-this-type.slang (limited to 'tests/bugs') diff --git a/tests/bugs/ptr-extension-this-type.slang b/tests/bugs/ptr-extension-this-type.slang new file mode 100644 index 000000000..627db5302 --- /dev/null +++ b/tests/bugs/ptr-extension-this-type.slang @@ -0,0 +1,28 @@ +//TEST:INTERPRET(filecheck=CHECK): + +// Test for issue #7656: Compiler segfault with Ptr extension referring to This +// This test ensures that the compiler doesn't segfault when 'This' is used in Ptr extensions + +public interface IThing +{ + int f(This other); +} + +public extension Ptr: IThing +{ + public int f(This other) + { + // Test that 'This' refers to Ptr, not the pointed-to type int + return sizeof(This) - sizeof(Ptr) + 1; + } +} + +void main() +{ + Ptr p; + Ptr other; + int result = p.f(other); + + // CHECK: 1 + printf("%d\n", result); +} \ No newline at end of file -- cgit v1.2.3