From 4e215554aa0e76e534327b9e6721971b9e82c113 Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Thu, 12 Sep 2019 17:56:57 +1000 Subject: [PATCH] compress/lzw: clarify code invariants MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This follows on from https://go-review.googlesource.com/c/go/+/191358 which was submitted as a comment-only change. Benchmarks don't show any significant change: compress/lzw name old speed new speed delta Decoder/1e4-56 92.8MB/s ± 1% 92.7MB/s ± 1% ~ (p=1.000 n=5+5) Decoder/1e5-56 100MB/s ± 1% 100MB/s ± 1% ~ (p=0.746 n=5+5) Decoder/1e6-56 101MB/s ± 1% 101MB/s ± 1% ~ (p=0.381 n=5+5) image/gif name old speed new speed delta Decode-56 63.2MB/s ± 1% 63.2MB/s ± 1% ~ (p=0.690 n=5+5) Change-Id: Ic36b5410cb06ca258da32e40da1f1ff6c44cff86 Reviewed-on: https://go-review.googlesource.com/c/go/+/194938 Reviewed-by: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Gobot Gobot --- src/compress/lzw/reader.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/compress/lzw/reader.go b/src/compress/lzw/reader.go index 912b7d3f40..f08021190c 100644 --- a/src/compress/lzw/reader.go +++ b/src/compress/lzw/reader.go @@ -199,6 +199,9 @@ loop: } d.last, d.hi = code, d.hi+1 if d.hi >= d.overflow { + if d.hi > d.overflow { + panic("unreachable") + } if d.width == maxWidth { d.last = decoderInvalidCode // Undo the d.hi++ a few lines above, so that (1) we maintain @@ -207,7 +210,7 @@ loop: d.hi-- } else { d.width++ - d.overflow <<= 1 + d.overflow = 1 << d.width } } if d.o >= flushBuffer { -- 2.50.0