]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix wrong type in SSA generation for OSLICE2ARRPTR
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Thu, 24 Jun 2021 18:45:32 +0000 (01:45 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Thu, 24 Jun 2021 18:58:27 +0000 (18:58 +0000)
Fixes #46907

Change-Id: I6a2728d2f2159df583b32f40f6100d3e90c34dd7
Reviewed-on: https://go-review.googlesource.com/c/go/+/330672
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/ssagen/ssa.go
test/fixedbugs/issue46907.go [new file with mode: 0644]

index 004e084f72848946c34288c025dec508cf3beca3..f1dc56e729739771414e0eb9f21c2f83af60f739 100644 (file)
@@ -3174,7 +3174,7 @@ func (s *state) expr(n ir.Node) *ssa.Value {
                arrlen := s.constInt(types.Types[types.TINT], n.Type().Elem().NumElem())
                cap := s.newValue1(ssa.OpSliceLen, types.Types[types.TINT], v)
                s.boundsCheck(arrlen, cap, ssa.BoundsConvert, false)
-               return s.newValue1(ssa.OpSlicePtrUnchecked, types.Types[types.TINT], v)
+               return s.newValue1(ssa.OpSlicePtrUnchecked, n.Type(), v)
 
        case ir.OCALLFUNC:
                n := n.(*ir.CallExpr)
diff --git a/test/fixedbugs/issue46907.go b/test/fixedbugs/issue46907.go
new file mode 100644 (file)
index 0000000..bd82f4f
--- /dev/null
@@ -0,0 +1,11 @@
+// compile
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+func f(b []byte) []byte {
+       return (*[32]byte)(b[:32])[:]
+}