mirror of
https://github.com/golang/go
synced 2024-11-21 23:54:40 -07:00
gc: do not compile switch on interface values into a binary search.
Fixes #2672. R=golang-dev, lvd CC=golang-dev, remy https://golang.org/cl/5543058
This commit is contained in:
parent
a9e1f6d7a6
commit
6b72b07016
@ -540,7 +540,7 @@ loop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// deal with the variables one-at-a-time
|
// deal with the variables one-at-a-time
|
||||||
if(c0->type != Texprconst) {
|
if(!okforcmp[t->etype] || c0->type != Texprconst) {
|
||||||
a = exprbsw(c0, 1, arg);
|
a = exprbsw(c0, 1, arg);
|
||||||
cas = list(cas, a);
|
cas = list(cas, a);
|
||||||
c0 = c0->link;
|
c0 = c0->link;
|
||||||
|
30
test/fixedbugs/bug393.go
Normal file
30
test/fixedbugs/bug393.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// $G $D/$F.go || echo BUG: bug393
|
||||||
|
|
||||||
|
// Copyright 2012 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 2672
|
||||||
|
// was trying binary search with an interface type
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func f(x interface{}) int {
|
||||||
|
switch x {
|
||||||
|
case 1:
|
||||||
|
return 1
|
||||||
|
case 2:
|
||||||
|
return 2
|
||||||
|
case 3:
|
||||||
|
return 3
|
||||||
|
case 4:
|
||||||
|
return 4
|
||||||
|
case "5":
|
||||||
|
return 5
|
||||||
|
case "6":
|
||||||
|
return 6
|
||||||
|
default:
|
||||||
|
return 7
|
||||||
|
}
|
||||||
|
panic("switch")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user