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:
Rémy Oudompheng 2012-01-14 17:00:14 +01:00 committed by Luuk van Dijk
parent a9e1f6d7a6
commit 6b72b07016
2 changed files with 31 additions and 1 deletions

View file

@ -540,7 +540,7 @@ loop:
}
// deal with the variables one-at-a-time
if(c0->type != Texprconst) {
if(!okforcmp[t->etype] || c0->type != Texprconst) {
a = exprbsw(c0, 1, arg);
cas = list(cas, a);
c0 = c0->link;

30
test/fixedbugs/bug393.go Normal file
View 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")
}