Commit 7202341d authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

cmd/compile: only SSA [0]T when T is SSA-able

Almost never happens in practice.
The compiler will generate reasonable code anyway,
since assignments involving [0]T never do any work.

Fixes #19696
Fixes #19671

Change-Id: I350d2e0c5bb326c4789c74a046ab0486b2cee49c
Reviewed-on: https://go-review.googlesource.com/38599
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: 's avatarKeith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 6652572b
......@@ -3294,10 +3294,7 @@ func canSSAType(t *Type) bool {
// We can't do larger arrays because dynamic indexing is
// not supported on SSA variables.
// TODO: allow if all indexes are constant.
if t.NumElem() == 0 {
return true
}
if t.NumElem() == 1 {
if t.NumElem() <= 1 {
return canSSAType(t.Elem())
}
return false
......
// compile
// Copyright 2017 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.
// Used to crash when compiling assignments involving [0]T,
// where T is not SSA-able.
package a
func f() {
var i int
arr := [0][2]int{}
arr[i][0] = 0
}
// compile
// Copyright 2017 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.
// Used to crash when compiling assignments involving [0]T,
// where T is not SSA-able.
package p
type s struct {
a, b, c, d, e int
}
func f() {
var i int
arr := [0]s{}
arr[i].a++
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment