From: Robert Griesemer Date: Mon, 7 Nov 2016 18:43:25 +0000 (-0800) Subject: go/constant: improved fatal error messages X-Git-Tag: go1.8beta1~280 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4eb9832724e94d04cd737ac2554cf02a79d87f23;p=gostls13.git go/constant: improved fatal error messages Fixes #17812. Change-Id: I08202165dd3f72ae04420e7b6129b8b689e74f5c Reviewed-on: https://go-review.googlesource.com/32870 Reviewed-by: Alan Donovan --- diff --git a/src/go/constant/value.go b/src/go/constant/value.go index 85f53b4d16..005b999007 100644 --- a/src/go/constant/value.go +++ b/src/go/constant/value.go @@ -848,6 +848,8 @@ Error: func ord(x Value) int { switch x.(type) { + default: + return -1 // force invalid value into "x position" in match case unknownVal: return 0 case boolVal, stringVal: @@ -862,8 +864,6 @@ func ord(x Value) int { return 5 case complexVal: return 6 - default: - panic("unreachable") } } @@ -880,9 +880,6 @@ func match(x, y Value) (_, _ Value) { // ord(x) <= ord(y) switch x := x.(type) { - case unknownVal: - return x, x - case boolVal, stringVal, complexVal: return x, y @@ -921,6 +918,7 @@ func match(x, y Value) (_, _ Value) { case complexVal: return vtoc(x), y } + case floatVal: switch y := y.(type) { case floatVal: @@ -930,7 +928,7 @@ func match(x, y Value) (_, _ Value) { } } - panic("unreachable") + return x, x // force unknown and invalid values into "x position" in callers of match } // BinaryOp returns the result of the binary expression x op y. @@ -1171,7 +1169,7 @@ func cmpZero(x int, op token.Token) bool { case token.GEQ: return x >= 0 } - panic("unreachable") + panic(fmt.Sprintf("invalid comparison %v %s 0", x, op)) } // Compare returns the result of the comparison x op y.