From: Russ Cox Date: Fri, 21 May 2010 05:57:08 +0000 (-0700) Subject: gc: handle use of builtin function outside function call X-Git-Tag: weekly.2010-05-27~54 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=709c5b248115ed8763d876737a6a6104be661211;p=gostls13.git gc: handle use of builtin function outside function call tweaks & tests of last bug fix too. R=ken2 CC=golang-dev https://golang.org/cl/1207044 --- diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 707546b109..b6940d412b 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -89,6 +89,10 @@ typecheck(Node **np, int top) redo: lno = setlineno(n); if(n->sym) { + if(n->op == ONAME && n->etype != 0) { + yyerror("use of builtin %S not in function call", n->sym); + goto error; + } walkdef(n); if(n->op == ONONAME) goto error; diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 3098fa525e..21bd0b56ea 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -221,7 +221,9 @@ walkdef(Node *n) if(n->op == ONONAME) { if(!n->diag) { n->diag = 1; - yyerrorl(n->lineno, "undefined: %S", n->sym); + if(n->lineno != 0) + lineno = n->lineno; + yyerror("undefined: %S", n->sym); } return; } diff --git a/test/fixedbugs/bug208.go b/test/fixedbugs/bug208.go index 0a05d80c1a..13b0400848 100644 --- a/test/fixedbugs/bug208.go +++ b/test/fixedbugs/bug208.go @@ -11,10 +11,10 @@ type T struct f int; } -var _ = T{f: 1} - // 6g used to get confused by the f:1 above // and allow uses of f that would be silently // dropped during the compilation. var _ = f; // ERROR "undefined" +var _ = T{f: 1} + diff --git a/test/varerr.go b/test/varerr.go new file mode 100644 index 0000000000..32f33ecc77 --- /dev/null +++ b/test/varerr.go @@ -0,0 +1,14 @@ +// errchk $G $D/$F.go + +// Copyright 2010 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 main() { + _ = asdf // ERROR "undefined: asdf" + + new = 1 // ERROR "use of builtin new not in function call" +} +