From e49b80a754c3df1a82d089a16a46ea8946d5a00b Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 20 Apr 2022 12:05:30 -0700 Subject: [PATCH] cmd/compile/internal/syntax: correct an error string When we have an error in a function type used in an expression we don't know until we see an opening { whether we have a function literal or a function type. Use "function type" as context because that's always correct in the specific error message. Change-Id: I9aad8fcddf31ae53daa53cebd2c2001f08eabde0 Reviewed-on: https://go-review.googlesource.com/c/go/+/401316 Reviewed-by: Ian Lance Taylor Run-TryBot: Robert Griesemer Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/syntax/parser.go | 2 +- src/cmd/compile/internal/syntax/testdata/issue48382.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 9de6d4f45e..fe1c76e81b 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -991,7 +991,7 @@ func (p *parser) operand(keep_parens bool) Expr { case _Func: pos := p.pos() p.next() - _, ftyp := p.funcType("function literal") + _, ftyp := p.funcType("function type") if p.tok == _Lbrace { p.xnest++ diff --git a/src/cmd/compile/internal/syntax/testdata/issue48382.go b/src/cmd/compile/internal/syntax/testdata/issue48382.go index c00fee6f82..7c024a051f 100644 --- a/src/cmd/compile/internal/syntax/testdata/issue48382.go +++ b/src/cmd/compile/internal/syntax/testdata/issue48382.go @@ -8,7 +8,8 @@ type _ func /* ERROR function type must have no type parameters */ [ /* ERROR em type _ func /* ERROR function type must have no type parameters */ [ x /* ERROR missing type constraint */ ]() type _ func /* ERROR function type must have no type parameters */ [P any]() -var _ = func /* ERROR function literal must have no type parameters */ [P any]() {} +var _ = (func /* ERROR function type must have no type parameters */ [P any]())(nil) +var _ = func /* ERROR function type must have no type parameters */ [P any]() {} type _ interface{ m /* ERROR interface method must have no type parameters */ [P any]()