You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
bradfitz@go:~/go/src/unicode/utf8$ go version
go version devel +8515d9cf65 Tue Apr 23 17:58:12 2019 +0000 linux/amd64
bradfitz@go:~/go/src/unicode/utf8$ git di
diff --git a/src/unicode/utf8/utf8.go b/src/unicode/utf8/utf8.go
index db845ab2f2..b2b5308311 100644
--- a/src/unicode/utf8/utf8.go
+++ b/src/unicode/utf8/utf8.go
@@ -147,10 +147,19 @@ func FullRuneInString(s string) bool {
// out of range, or is not the shortest possible UTF-8 encoding for the
// value. No other validation is performed.
func DecodeRune(p []byte) (r rune, size int) {
- n := len(p)
- if n < 1 {
- return RuneError, 0
+ if len(p) != 0 {
+ r = rune(p[0])
+ if r < 127 {
+ size = 1
+ return
+ }
}
+ return decodeRuneSlow(&p)
+}
+
+func decodeRuneSlow(pp *[]byte) (r rune, size int) {
+ p := *pp
+ n := len(p)
p0 := p[0]
x := first[p0]
if x >= as {
bradfitz@go:~/go/src/unicode/utf8$ go tool compile -m -h utf8.go
utf8.go:102:6: can inline FullRune
utf8.go:122:6: can inline FullRuneInString
utf8.go:454:6: can inline RuneStart
utf8.go:272:15: inlining call to RuneStart
utf8.go:312:15: inlining call to RuneStart
utf8.go:328:6: can inline RuneLen
utf8.go:522:6: can inline ValidRune
utf8.go:102:15: FullRune p does not escape
utf8.go:122:23: FullRuneInString s does not escape
utf8.go:160:21: decodeRuneSlow pp does not escape
utf8.go:149:17: DecodeRune p does not escape
utf8.go:206:25: DecodeRuneInString s does not escape
utf8.go:254:21: DecodeLastRune p does not escape
utf8.go:294:29: DecodeLastRuneInString s does not escape
utf8.go:348:17: EncodeRune p does not escape
utf8.go:380:16: RuneCount p does not escape
utf8.go:417:24: RuneCountInString s does not escape
utf8.go:457:12: Valid p does not escape
utf8.go:489:18: ValidString s does not escape
utf8.go:107:12: index bounds check elided
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc855cb]
goroutine 1 [running]:
cmd/compile/internal/gc.hcrash()
/home/bradfitz/go/src/cmd/compile/internal/gc/subr.go:99 +0x4b
cmd/compile/internal/gc.Warn(0xde8c59, 0x19, 0x0, 0x0, 0x0)
/home/bradfitz/go/src/cmd/compile/internal/gc/subr.go:164 +0x64
cmd/compile/internal/gc.walkexpr(0xc00039cd00, 0xc0003355b0, 0xc00039a500)
/home/bradfitz/go/src/cmd/compile/internal/gc/walk.go:1050 +0x6a35
cmd/compile/internal/gc.walkexpr(0xc00039cb80, 0xc0003355b0, 0x0)
/home/bradfitz/go/src/cmd/compile/internal/gc/walk.go:642 +0x18f9
cmd/compile/internal/gc.walkstmt(0xc00039cb80, 0xc00039cd80)
/home/bradfitz/go/src/cmd/compile/internal/gc/walk.go:159 +0xd94
cmd/compile/internal/gc.walkstmtlist(0xc00044e800, 0xa, 0x10)
/home/bradfitz/go/src/cmd/compile/internal/gc/walk.go:79 +0x46
cmd/compile/internal/gc.walk(0xc0002d0160)
/home/bradfitz/go/src/cmd/compile/internal/gc/walk.go:63 +0x3da
cmd/compile/internal/gc.compile(0xc0002d0160)
/home/bradfitz/go/src/cmd/compile/internal/gc/pgen.go:235 +0x6b
cmd/compile/internal/gc.funccompile(0xc0002d0160)
/home/bradfitz/go/src/cmd/compile/internal/gc/pgen.go:221 +0xc1
cmd/compile/internal/gc.Main(0xdfe308)
/home/bradfitz/go/src/cmd/compile/internal/gc/main.go:668 +0x307a
main.main()
/home/bradfitz/go/src/cmd/compile/main.go:51 +0xac
Just hit this compiler crash....
/cc @josharian @mdempsky @griesemer
The text was updated successfully, but these errors were encountered: