mirror of
https://github.com/golang/go
synced 2024-11-23 20:20:01 -07:00
6e0adde1e9
We reuse a value for the same selector on the same arg. But if the value is already marked dead, don't reuse it. A use of an OpInvalid will confuse the compiler. Fixes #48916. Change-Id: I15b9e15b49f6e1991fe91df246cd12a193385e85 Reviewed-on: https://go-review.googlesource.com/c/go/+/355409 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Go Bot <gobot@golang.org>
38 lines
535 B
Go
38 lines
535 B
Go
// 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.
|
|
|
|
// Issue 48916: expand_calls pass crashes due to a (dead)
|
|
// use of an OpInvalid value.
|
|
|
|
package p
|
|
|
|
type T struct {
|
|
num int64
|
|
}
|
|
|
|
func foo(vs map[T]struct{}, d T) error {
|
|
_, ok := vs[d]
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
switch d.num {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
var num float64
|
|
if num != 0 {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|