blob: 94afbffdc4c8ff1b8f9014182ef28ffa9f907e12 [file] [log] [blame]
// run
// Copyright 2020 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 main
type Setter interface {
Set(string)
}
func FromStrings[T Setter](s []string) []T {
result := make([]T, len(s))
for i, v := range s {
result[i].Set(v)
}
return result
}
type Settable int
func (p *Settable) Set(s string) {
*p = 0
}
func F() {
defer func() {
if recover() == nil {
panic("did not panic as expected")
}
}()
// This should type check but should panic at run time,
// because it will make a slice of *Settable and then call
// Set on a nil value.
FromStrings(*Settable)([]string{"1"})
}
func main() {
F()
}