From cf710949a98aaac48a3d97660f7f6bb7d14f1ad7 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 6 Mar 2017 15:41:56 -0800 Subject: [PATCH] Revert "cmd/compile: improve error message if init is directly invoked" This reverts commit cb6e0639fb090ea0e129b1ddb956a7e645cff285. The fix is incorrect as it's perfectly fine to refer to an identifier 'init' inside a function, and 'init' may even be a variable of function value. Misspelling 'init' in that context would lead to an incorrect error message. Reopened #8481. Change-Id: I49787fdf7738213370ae6f0cab54013e9e3394a8 Reviewed-on: https://go-review.googlesource.com/37876 Run-TryBot: Robert Griesemer Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/typecheck.go | 16 ++++------------ test/fixedbugs/issue8481.go | 14 -------------- test/init.go | 4 ++-- 3 files changed, 6 insertions(+), 28 deletions(-) delete mode 100644 test/fixedbugs/issue8481.go diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go index 180bd70cc1..f49c4dd036 100644 --- a/src/cmd/compile/internal/gc/typecheck.go +++ b/src/cmd/compile/internal/gc/typecheck.go @@ -3667,19 +3667,11 @@ func typecheckdef(n *Node) *Node { lineno = n.Pos } - switch n.Sym.Name { - case "init": - // As per the spec at: - // https://golang.org/ref/spec#Program_initialization_and_execution - // init cannot be referred to in usercode. - // See https://golang.org/issues/8481. - yyerror("cannot refer to init functions") - default: - // Note: adderrorname looks for this string and - // adds context about the outer expression - yyerror("undefined: %v", n.Sym) - } + // Note: adderrorname looks for this string and + // adds context about the outer expression + yyerror("undefined: %v", n.Sym) } + return n } diff --git a/test/fixedbugs/issue8481.go b/test/fixedbugs/issue8481.go deleted file mode 100644 index a69296687a..0000000000 --- a/test/fixedbugs/issue8481.go +++ /dev/null @@ -1,14 +0,0 @@ -// errorcheck - -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -func init() { -} - -func main() { - init() // ERROR "cannot refer to init functions" -} diff --git a/test/init.go b/test/init.go index 1855b4ff56..f4689443cf 100644 --- a/test/init.go +++ b/test/init.go @@ -15,7 +15,7 @@ func init() { } func main() { - init() // ERROR "cannot refer to init functions" + init() // ERROR "undefined.*init" runtime.init() // ERROR "unexported.*runtime\.init" - var _ = init // ERROR "cannot refer to init functions" + var _ = init // ERROR "undefined.*init" } -- 2.48.1