]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/syntax: more tolerant handling of missing function invocation...
authorRobert Griesemer <gri@golang.org>
Thu, 15 Feb 2018 00:57:28 +0000 (16:57 -0800)
committerRobert Griesemer <gri@golang.org>
Thu, 15 Feb 2018 01:48:16 +0000 (01:48 +0000)
Assume that an expression that is not a function call in a defer/go
statement is indeed a function that is just missing its invocation.
Report the error but continue with a sane syntax tree.

Fixes #23586.

Change-Id: Ib45ebac57c83b3e39ae4a1b137ffa291dec5b50d
Reviewed-on: https://go-review.googlesource.com/94156
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/syntax/parser.go
test/fixedbugs/issue23586.go [new file with mode: 0644]

index 832f991a6d3e711abd70d97f97e48c669bb5be3f..5b7ac6cc40602d07ec9f89022278940b497db067 100644 (file)
@@ -758,7 +758,7 @@ func (p *parser) callStmt() *CallStmt {
                // already progressed, no need to advance
                cx = new(CallExpr)
                cx.pos = x.Pos()
-               cx.Fun = p.bad()
+               cx.Fun = x // assume common error of missing parentheses (function invocation)
        }
 
        s.Call = cx
diff --git a/test/fixedbugs/issue23586.go b/test/fixedbugs/issue23586.go
new file mode 100644 (file)
index 0000000..c2d4c9f
--- /dev/null
@@ -0,0 +1,24 @@
+// errorcheck
+
+// Copyright 2018 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.
+
+// Test that we type-check deferred/go functions even
+// if they are not called (a common error). Specifically,
+// we don't want to see errors such as import or variable
+// declared but not used.
+
+package p
+
+import (
+       "fmt"
+       "math"
+)
+
+func f() {
+       var i int
+       defer func() { fmt.Println() } // ERROR "must be function call"
+       go func() { _ = math.Sin(0) }  // ERROR "must be function call"
+       go func() { _ = i}             // ERROR "must be function call"
+}