1
0
mirror of https://github.com/golang/go synced 2024-11-06 02:26:17 -07:00
go/test/fixedbugs/issue29612.dir/main.go
Matthew Dempsky 115e4c9c14 test: add test coverage for type-switch hash collisions
This CL expands the test for #29612 to check that type switches also
work correctly when type hashes collide.

Change-Id: Ia153743e6ea0736c1a33191acfe4d8ba890be527
Reviewed-on: https://go-review.googlesource.com/c/go/+/195782
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-09-16 22:14:49 +00:00

50 lines
819 B
Go

// run
// Copyright 2019 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.
// Do not panic on conversion to anonymous interface, which
// is similar-looking interface types in different packages.
package main
import (
"fmt"
ssa1 "./p1/ssa"
ssa2 "./p2/ssa"
)
func main() {
v1 := &ssa1.T{}
_ = v1
v2 := &ssa2.T{}
ssa2.Works(v2)
ssa2.Panics(v2) // This call must not panic
swt(v1, 1)
swt(v2, 2)
}
//go:noinline
func swt(i interface{}, want int) {
var got int
switch i.(type) {
case *ssa1.T:
got = 1
case *ssa2.T:
got = 2
case int8, int16, int32, int64:
got = 3
case uint8, uint16, uint32, uint64:
got = 4
}
if got != want {
panic(fmt.Sprintf("switch %v: got %d, want %d", i, got, want))
}
}