From 63f5596788af3f126994a155319956c90f978f8d Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 5 Apr 2023 09:28:00 -0700 Subject: [PATCH] go/scanner: align line and column limit with the compiler's limit The compiler disallows line and column numbers > (1<<30) (cmd/compiler/internal/syntax.PosMax). Set the go/scanner limit to the same rather than off by one. For #59180 Change-Id: Ibf9e0e6826d6f6230b0d492543b7e906298a0524 Reviewed-on: https://go-review.googlesource.com/c/go/+/482595 TryBot-Result: Gopher Robot Reviewed-by: Matthew Dempsky Run-TryBot: Damien Neil --- src/cmd/compile/internal/syntax/pos.go | 2 ++ src/go/scanner/scanner.go | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/syntax/pos.go b/src/cmd/compile/internal/syntax/pos.go index b5e53d268bd247..dd25d4f249dee6 100644 --- a/src/cmd/compile/internal/syntax/pos.go +++ b/src/cmd/compile/internal/syntax/pos.go @@ -8,6 +8,8 @@ import "fmt" // PosMax is the largest line or column value that can be represented without loss. // Incoming values (arguments) larger than PosMax will be set to PosMax. +// +// Keep this consistent with maxLineCol in go/scanner. const PosMax = 1 << 30 // A Pos represents an absolute (line, col) source position diff --git a/src/go/scanner/scanner.go b/src/go/scanner/scanner.go index 0cd9f5901d0bba..75f835d3105d67 100644 --- a/src/go/scanner/scanner.go +++ b/src/go/scanner/scanner.go @@ -255,7 +255,8 @@ func (s *Scanner) updateLineInfo(next, offs int, text []byte) { // Put a cap on the maximum size of line and column numbers. // 30 bits allows for some additional space before wrapping an int32. - const maxLineCol = 1<<30 - 1 + // Keep this consistent with cmd/compile/internal/syntax.PosMax. + const maxLineCol = 1 << 30 var line, col int i2, n2, ok2 := trailingDigits(text[:i-1]) if ok2 {