From f6e6aca8d9fdd716f04da03b1a26da657fdfde3e Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sun, 21 Aug 2022 23:26:42 +0200 Subject: [PATCH] compiler: fix incorrect DWARF type in some generic parameters For some reason, the type of a function parameter can sometimes be of interface type, while it should be the underlying type. This might be a bug in the x/tools/go/ssa package but this is a simple workaround. --- compiler/compiler.go | 2 +- testdata/generics.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/compiler.go b/compiler/compiler.go index f477baa3..58a07c31 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -688,7 +688,7 @@ func (b *builder) getLocalVariable(variable *types.Var) llvm.Metadata { Name: param.Name(), File: b.getDIFile(pos.Filename), Line: pos.Line, - Type: b.getDIType(variable.Type()), + Type: b.getDIType(param.Type()), AlwaysPreserve: true, ArgNo: i + 1, }) diff --git a/testdata/generics.go b/testdata/generics.go index c2877dfd..bc7e5145 100644 --- a/testdata/generics.go +++ b/testdata/generics.go @@ -12,6 +12,8 @@ func main() { var c C[int] c.F() // issue 2951 + SliceOp([]int(nil)) // issue 3002 + testa.Test() testb.Test() } @@ -28,3 +30,6 @@ func Add[T Integer](a, b T) T { type C[V any] struct{} func (c *C[V]) F() {} + +// Test for https://github.com/tinygo-org/tinygo/issues/3002 +func SliceOp[S ~[]E, E any](s S) {}