From cef2a82c97eeef34fffe72b4cbc60239114dec26 Mon Sep 17 00:00:00 2001 From: Marco Manino Date: Tue, 13 Feb 2024 17:48:19 +0100 Subject: [PATCH] Checking for methodset existance --- interp/interpreter.go | 4 ++++ testdata/init.go | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/interp/interpreter.go b/interp/interpreter.go index 605f4d8fc..e0074ba26 100644 --- a/interp/interpreter.go +++ b/interp/interpreter.go @@ -427,6 +427,10 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent if err != nil { return nil, mem, r.errorAt(inst, err) } + if typecodePtr.offset() == 0 { + locals[inst.localIndex] = literalValue{uint8(0)} + break + } typecodePtrOffset, err := typecodePtr.addOffset(-int64(r.pointerSize)) if err != nil { return nil, mem, r.errorAt(inst, err) // unlikely diff --git a/testdata/init.go b/testdata/init.go index fa470fd54..8b34db3f3 100644 --- a/testdata/init.go +++ b/testdata/init.go @@ -109,3 +109,14 @@ func sliceString(s string, start, end int) string { func sliceSlice(s []int, start, end int) []int { return s[start:end] } + +type outside struct{} + +func init() { + _, _ = any(0).(interface{ DoesNotExist() }) + _, _ = any("").(interface{ DoesNotExist() }) + _, _ = any(outside{}).(interface{ DoesNotExist() }) + + type inside struct{} + _, _ = any(inside{}).(interface{ DoesNotExist() }) +}