Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Compiler panics when building golang.org/x/sync/singleflight #1088

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
DaveHasteSpringer opened this issue Nov 16, 2021 · 5 comments
Closed

Comments

@DaveHasteSpringer
Copy link

Recent versions of golang.org/x/sync/singleflight cause a panic in the gopherjs compiler.

These are the versions of Go and GopherJS that I'm using:

$ go version
go version go1.17.2 darwin/amd64

$ gopherjs version
GopherJS 1.17.1+go1.17.3

This is the most concise test code I can use to reproduce the problem:

package main

import "golang.org/x/sync/singleflight"

func main() {
	var group singleflight.Group

	group.Do("key", func() (interface{}, error) {
		return nil, nil
	})
}

This is my go.mod file:

module gopherjs-test

go 1.17

require golang.org/x/sync v0.0.0-20210220032951-036812b2e83c

The code builds fine with the go compiler:

$ go build test.go
$ echo $?
0

However the GopherJS compiler panics:

$ gopherjs build test.go
[compiler panic]  Unhandled object: *types.Builtin


 Occurred while compiling statement at /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:5:
     0  *ast.GoStmt {
     1  .  Go: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:5
     2  .  Call: *ast.CallExpr {
     3  .  .  Fun: *ast.Ident {
     4  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:8
     5  .  .  .  Name: "panic"
     6  .  .  }
     7  .  .  Lparen: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:13
     8  .  .  Args: []ast.Expr (len = 1) {
     9  .  .  .  0: *ast.Ident {
    10  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:14
    11  .  .  .  .  Name: "e"
    12  .  .  .  .  Obj: *ast.Object {
    13  .  .  .  .  .  Kind: var
    14  .  .  .  .  .  Name: "e"
    15  .  .  .  .  .  Decl: *ast.AssignStmt {
    16  .  .  .  .  .  .  Lhs: []ast.Expr (len = 2) {
    17  .  .  .  .  .  .  .  0: *ast.Ident {
    18  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:6
    19  .  .  .  .  .  .  .  .  Name: "e"
    20  .  .  .  .  .  .  .  .  Obj: *(obj @ 12)
    21  .  .  .  .  .  .  .  }
    22  .  .  .  .  .  .  .  1: *ast.Ident {
    23  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:9
    24  .  .  .  .  .  .  .  .  Name: "ok"
    25  .  .  .  .  .  .  .  .  Obj: *ast.Object {
    26  .  .  .  .  .  .  .  .  .  Kind: var
    27  .  .  .  .  .  .  .  .  .  Name: "ok"
    28  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 15)
    29  .  .  .  .  .  .  .  .  }
    30  .  .  .  .  .  .  .  }
    31  .  .  .  .  .  .  }
    32  .  .  .  .  .  .  TokPos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:12
    33  .  .  .  .  .  .  Tok: :=
    34  .  .  .  .  .  .  Rhs: []ast.Expr (len = 1) {
    35  .  .  .  .  .  .  .  0: *ast.TypeAssertExpr {
    36  .  .  .  .  .  .  .  .  X: *ast.SelectorExpr {
    37  .  .  .  .  .  .  .  .  .  X: *ast.Ident {
    38  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:15
    39  .  .  .  .  .  .  .  .  .  .  Name: "c"
    40  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
    41  .  .  .  .  .  .  .  .  .  .  .  Kind: var
    42  .  .  .  .  .  .  .  .  .  .  .  Name: "c"
    43  .  .  .  .  .  .  .  .  .  .  .  Decl: *ast.Field {
    44  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
    45  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
    46  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:139:24
    47  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "c"
    48  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *(obj @ 40)
    49  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    50  .  .  .  .  .  .  .  .  .  .  .  .  }
    51  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.StarExpr {
    52  .  .  .  .  .  .  .  .  .  .  .  .  .  Star: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:139:26
    53  .  .  .  .  .  .  .  .  .  .  .  .  .  X: *ast.Ident {
    54  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:139:27
    55  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "call"
    56  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
    57  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: type
    58  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "call"
    59  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *ast.TypeSpec {
    60  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: *ast.Ident {
    61  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:47:6
    62  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "call"
    63  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *(obj @ 56)
    64  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    65  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Assign: -
    66  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.StructType {
    67  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Struct: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:47:11
    68  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Fields: *ast.FieldList {
    69  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:47:18
    70  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Field (len = 6) {
    71  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Field {
    72  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
    73  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
    74  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:48:2
    75  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "wg"
    76  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
    77  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
    78  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "wg"
    79  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 71)
    80  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    81  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    82  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    83  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.SelectorExpr {
    84  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  X: *ast.Ident {
    85  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:48:5
    86  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "sync"
    87  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    88  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Sel: *ast.Ident {
    89  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:48:10
    90  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "WaitGroup"
    91  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    92  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    93  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
    94  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Field {
    95  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Doc: *ast.CommentGroup {
    96  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Comment (len = 2) {
    97  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Comment {
    98  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:50:2
    99  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// These fields are written once before the WaitGroup is done"
   100  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   101  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Comment {
   102  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:51:2
   103  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// and are only read after the WaitGroup is done."
   104  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   105  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   106  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   107  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   108  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   109  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:52:2
   110  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "val"
   111  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   112  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   113  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "val"
   114  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 94)
   115  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   116  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   117  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   118  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.InterfaceType {
   119  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Interface: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:52:6
   120  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Methods: *ast.FieldList {
   121  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:52:15
   122  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:52:16
   123  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   124  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   125  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   126  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   127  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  2: *ast.Field {
   128  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   129  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   130  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:53:2
   131  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "err"
   132  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   133  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   134  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "err"
   135  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 127)
   136  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   137  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   138  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   139  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.Ident {
   140  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:53:6
   141  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "error"
   142  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   143  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   144  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  3: *ast.Field {
   145  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Doc: *ast.CommentGroup {
   146  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Comment (len = 2) {
   147  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Comment {
   148  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:55:2
   149  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// forgotten indicates whether Forget was called with this call's key"
   150  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   151  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Comment {
   152  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:56:2
   153  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// while the call was still in flight."
   154  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   155  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   156  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   157  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   158  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   159  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:57:2
   160  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "forgotten"
   161  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   162  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   163  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "forgotten"
   164  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 144)
   165  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   166  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   167  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   168  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.Ident {
   169  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:57:12
   170  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "bool"
   171  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   172  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   173  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  4: *ast.Field {
   174  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Doc: *ast.CommentGroup {
   175  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Comment (len = 3) {
   176  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Comment {
   177  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:59:2
   178  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// These fields are read and written with the singleflight"
   179  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   180  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Comment {
   181  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:60:2
   182  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// mutex held before the WaitGroup is done, and are read but"
   183  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   184  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  2: *ast.Comment {
   185  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Slash: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:61:2
   186  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Text: "// not written after the WaitGroup is done."
   187  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   188  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   189  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   190  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   191  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   192  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:62:2
   193  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "dups"
   194  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   195  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   196  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "dups"
   197  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 173)
   198  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   199  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   200  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   201  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.Ident {
   202  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:62:8
   203  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "int"
   204  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   205  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   206  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  5: *ast.Field {
   207  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   208  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   209  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:63:2
   210  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "chans"
   211  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   212  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   213  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "chans"
   214  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 206)
   215  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   216  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   217  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   218  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.ArrayType {
   219  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Lbrack: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:63:8
   220  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Elt: *ast.ChanType {
   221  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Begin: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:63:10
   222  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Arrow: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:63:14
   223  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Dir: 1
   224  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Value: *ast.Ident {
   225  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:63:17
   226  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Result"
   227  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   228  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: type
   229  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Result"
   230  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *ast.TypeSpec {
   231  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: *ast.Ident {
   232  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:75:6
   233  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Result"
   234  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *(obj @ 227)
   235  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   236  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Assign: -
   237  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.StructType {
   238  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Struct: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:75:13
   239  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Fields: *ast.FieldList {
   240  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:75:20
   241  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Field (len = 3) {
   242  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Field {
   243  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   244  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   245  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:76:2
   246  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Val"
   247  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   248  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   249  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Val"
   250  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 242)
   251  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   252  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   253  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   254  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.InterfaceType {
   255  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Interface: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:76:9
   256  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Methods: *ast.FieldList {
   257  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:76:18
   258  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:76:19
   259  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   260  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   261  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   262  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   263  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Field {
   264  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   265  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   266  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:77:2
   267  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Err"
   268  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   269  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   270  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Err"
   271  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 263)
   272  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   273  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   274  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   275  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.Ident {
   276  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:77:9
   277  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "error"
   278  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   279  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   280  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  2: *ast.Field {
   281  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   282  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   283  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:78:2
   284  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Shared"
   285  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   286  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   287  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "Shared"
   288  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 280)
   289  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   290  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   291  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   292  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.Ident {
   293  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:78:9
   294  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "bool"
   295  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   296  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   297  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   298  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:79:1
   299  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   300  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   301  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   302  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   303  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   304  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   305  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   306  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   307  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   308  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   309  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:64:1
   310  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   311  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   312  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   313  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   314  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   315  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   316  .  .  .  .  .  .  .  .  .  .  .  .  }
   317  .  .  .  .  .  .  .  .  .  .  .  }
   318  .  .  .  .  .  .  .  .  .  .  }
   319  .  .  .  .  .  .  .  .  .  }
   320  .  .  .  .  .  .  .  .  .  Sel: *ast.Ident {
   321  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:17
   322  .  .  .  .  .  .  .  .  .  .  Name: "err"
   323  .  .  .  .  .  .  .  .  .  }
   324  .  .  .  .  .  .  .  .  }
   325  .  .  .  .  .  .  .  .  Lparen: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:21
   326  .  .  .  .  .  .  .  .  Type: *ast.StarExpr {
   327  .  .  .  .  .  .  .  .  .  Star: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:22
   328  .  .  .  .  .  .  .  .  .  X: *ast.Ident {
   329  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:23
   330  .  .  .  .  .  .  .  .  .  .  Name: "panicError"
   331  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   332  .  .  .  .  .  .  .  .  .  .  .  Kind: type
   333  .  .  .  .  .  .  .  .  .  .  .  Name: "panicError"
   334  .  .  .  .  .  .  .  .  .  .  .  Decl: *ast.TypeSpec {
   335  .  .  .  .  .  .  .  .  .  .  .  .  Name: *ast.Ident {
   336  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:24:6
   337  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "panicError"
   338  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *(obj @ 331)
   339  .  .  .  .  .  .  .  .  .  .  .  .  }
   340  .  .  .  .  .  .  .  .  .  .  .  .  Assign: -
   341  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.StructType {
   342  .  .  .  .  .  .  .  .  .  .  .  .  .  Struct: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:24:17
   343  .  .  .  .  .  .  .  .  .  .  .  .  .  Fields: *ast.FieldList {
   344  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:24:24
   345  .  .  .  .  .  .  .  .  .  .  .  .  .  .  List: []*ast.Field (len = 2) {
   346  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Field {
   347  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   348  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   349  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:25:2
   350  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "value"
   351  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   352  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   353  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "value"
   354  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 346)
   355  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   356  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   357  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   358  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.InterfaceType {
   359  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Interface: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:25:8
   360  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Methods: *ast.FieldList {
   361  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Opening: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:25:17
   362  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:25:18
   363  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   364  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   365  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   366  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   367  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  1: *ast.Field {
   368  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Names: []*ast.Ident (len = 1) {
   369  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  0: *ast.Ident {
   370  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:26:2
   371  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "stack"
   372  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Obj: *ast.Object {
   373  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Kind: var
   374  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "stack"
   375  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Decl: *(obj @ 367)
   376  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   377  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   378  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   379  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Type: *ast.ArrayType {
   380  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Lbrack: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:26:8
   381  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Elt: *ast.Ident {
   382  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  NamePos: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:26:10
   383  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Name: "byte"
   384  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   385  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   386  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   387  .  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   388  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Closing: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:27:1
   389  .  .  .  .  .  .  .  .  .  .  .  .  .  }
   390  .  .  .  .  .  .  .  .  .  .  .  .  .  Incomplete: false
   391  .  .  .  .  .  .  .  .  .  .  .  .  }
   392  .  .  .  .  .  .  .  .  .  .  .  }
   393  .  .  .  .  .  .  .  .  .  .  }
   394  .  .  .  .  .  .  .  .  .  }
   395  .  .  .  .  .  .  .  .  }
   396  .  .  .  .  .  .  .  .  Rparen: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:158:33
   397  .  .  .  .  .  .  .  }
   398  .  .  .  .  .  .  }
   399  .  .  .  .  .  }
   400  .  .  .  .  }
   401  .  .  .  }
   402  .  .  }
   403  .  .  Ellipsis: -
   404  .  .  Rparen: /Users/hast02/code/go/pkg/mod/golang.org/x/[email protected]/singleflight/singleflight.go:162:15
   405  .  }
   406  }


 goroutine 1 [running]:
runtime/debug.Stack()
	/usr/local/Cellar/go/1.17.2/libexec/src/runtime/debug/stack.go:24 +0x65
github.com/gopherjs/gopherjs/compiler.bailout(...)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/utils.go:807
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt.func1()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:36 +0x7f
panic({0x1494c60, 0xc000e31e50})
	/usr/local/Cellar/go/1.17.2/libexec/src/runtime/panic.go:1047 +0x266
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateExpr(0xc00069a210, {0x16125e0, 0xc000cf14e0})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/expressions.go:767 +0x76d4
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt(0xc00069a210, {0x16125b0, 0xc000df8010}, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:499 +0x36a5
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmtList(0xc00069a210, {0xc000de4300, 0x2, 0xb})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:19 +0x79
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateBranchingStmt.func2()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:646 +0x6a
github.com/gopherjs/gopherjs/compiler.(*funcContext).Indent(...)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/utils.go:61
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateBranchingStmt(0xc00069a210, {0xc0006897c8, 0x0, 0x1}, 0xc000df7800, 0xa0, 0xc001162a00, 0x0, 0x1)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:645 +0x88e
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt(0xc00069a210, {0x1612610, 0xc000df6200}, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:73 +0x62ad
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmtList(0xc00069a210, {0xc000df8080, 0x1, 0xb})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:19 +0x79
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateBranchingStmt.func2()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:646 +0x6a
github.com/gopherjs/gopherjs/compiler.(*funcContext).Indent(...)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/utils.go:61
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateBranchingStmt(0xc00069a210, {0xc000e31c70, 0x2, 0x2}, 0xc000df7780, 0x1, 0xc0011635b8, 0x0, 0x1)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:645 +0x88e
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt(0xc00069a210, {0x1612610, 0xc000df62c0}, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:73 +0x62ad
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmtList(0xc00069a210, {0xc000de4320, 0x2, 0x1})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:19 +0x79
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt(0xc00069a210, {0x1612280, 0xc000dd33e0}, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:53 +0x3f8
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmtList(0xc00069a210, {0xc000da6f80, 0x6, 0xc000dfd5f0})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:19 +0x79
github.com/gopherjs/gopherjs/compiler.translateFunction.func1()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:771 +0x30b
github.com/gopherjs/gopherjs/compiler.(*funcContext).CatchOutput(0xc00069a210, 0x1, 0x1528fa1)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/utils.go:69 +0x78
github.com/gopherjs/gopherjs/compiler.translateFunction(0xc000704d08, 0x0, 0xc000dd3680, 0xc00069a0b0, 0xc00079aa20, 0xc000da7700, {0x0, 0x0})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:746 +0x4ba
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateExpr(0xc00069a0b0, {0x1612520, 0xc000df80d0})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/expressions.go:180 +0x4775
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmt(0xc00069a0b0, {0x1612400, 0xc000df80e0}, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:403 +0x73d
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateStmtList(0xc00069a0b0, {0xc000da7000, 0x5, 0xc001166a58})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/statements.go:19 +0x79
github.com/gopherjs/gopherjs/compiler.translateFunction.func1()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:771 +0x30b
github.com/gopherjs/gopherjs/compiler.(*funcContext).CatchOutput(0xc00069a0b0, 0x1, 0xc000db8640)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/utils.go:69 +0x78
github.com/gopherjs/gopherjs/compiler.translateFunction(0xc000705158, 0xc000cf0d60, 0xc000dd3800, 0xc0000fbb80, 0xc0007876e0, 0xc000da7600, {0xc000e03320, 0x1a})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:746 +0x4ba
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateToplevelFunction.func1({0xc000e03320, 0x1a})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:658 +0x79
github.com/gopherjs/gopherjs/compiler.(*funcContext).translateToplevelFunction(0xc0000fbb80, 0xc000dd3830, 0xc000da7600)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:687 +0x30c
github.com/gopherjs/gopherjs/compiler.Compile.func9()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:434 +0x31
github.com/gopherjs/gopherjs/compiler.Compile.func5(0xc001167928)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:322 +0x7e
github.com/gopherjs/gopherjs/compiler.Compile({0xc00023e060, 0x1e}, {0xc000289e58, 0x2f918a00, 0x1}, 0xc0010b6c80, 0xc000a64a00, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:433 +0x27d2
github.com/gopherjs/gopherjs/build.(*Session).BuildPackage(0xc000020e10, 0xc000228500)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/build/build.go:695 +0x3a9
github.com/gopherjs/gopherjs/build.(*Session).buildImportPathWithSrcDir(0xc000020e10, {0xc000024101, 0xc000024101}, {0xc000024080, 0x146781e})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/build/build.go:583 +0xca
github.com/gopherjs/gopherjs/build.(*Session).BuildPackage.func1({0xc000024101, 0x1e})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/build/build.go:687 +0x85
github.com/gopherjs/gopherjs/compiler.packageImporter.Import({0xc0000625c0, 0xc0000625d0}, {0xc000024101, 0xc0000625f0})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:112 +0x6b
go/types.(*Checker).importPackage(0xc00022c140, {0x16080c0, 0xc00006c3a0}, {0xc000024101, 0x1e}, {0xc00002a300, 0x20})
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/resolver.go:162 +0x265
go/types.(*Checker).collectObjects.func1({0x1609160, 0xc000020fc0})
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/resolver.go:262 +0xb11
go/types.(*Checker).walkDecl(0x800000000000, {0x1612580, 0xc000032580}, 0xc001168940)
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/decl.go:431 +0x1c7
go/types.(*Checker).walkDecls(0xc00002a300, {0xc00006c580, 0x2, 0xc00020aea0}, 0x1528563)
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/decl.go:418 +0x6a
go/types.(*Checker).collectObjects(0xc00022c140)
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/resolver.go:252 +0x225
go/types.(*Checker).checkFiles(0xc00022c140, {0xc000010128, 0xc000228280, 0x0})
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/check.go:263 +0xb5
go/types.(*Checker).Files(...)
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/check.go:250
go/types.(*Config).Check(0x1609040, {0x1528560, 0x4}, 0xc000208380, {0xc000010128, 0x1, 0x1}, 0xc000206bb0)
	/usr/local/Cellar/go/1.17.2/libexec/src/go/types/api.go:296 +0x85
github.com/gopherjs/gopherjs/compiler.Compile({0x1528560, 0x4}, {0xc000010128, 0x0, 0x1}, 0xc000032540, 0xc0000625c0, 0x0)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/compiler/package.go:179 +0x73d
github.com/gopherjs/gopherjs/build.(*Session).BuildPackage(0xc000020e10, 0xc000228050)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/build/build.go:695 +0x3a9
github.com/gopherjs/gopherjs/build.(*Session).BuildFiles(0xc000020e10, {0xc000062400, 0x1, 0x15280c4}, {0xc0000262e8, 0x7}, {0xc000024080, 0x20})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/build/build.go:559 +0x3c8
main.main.func1.1({0xc000062400, 0x1, 0x1}, 0xc000062190, 0xc000020e10, 0xc000032280)
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/tool.go:125 +0x5a5
main.main.func1(0xc000210000, {0xc000062400, 0x1, 0x1})
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/tool.go:164 +0x174
github.com/spf13/cobra.(*Command).execute(0xc000210000, {0xc0000623d0, 0x1, 0x1})
	/Users/hast02/code/go/pkg/mod/github.com/spf13/[email protected]/command.go:860 +0x5f8
github.com/spf13/cobra.(*Command).ExecuteC(0xc000211400)
	/Users/hast02/code/go/pkg/mod/github.com/spf13/[email protected]/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
	/Users/hast02/code/go/pkg/mod/github.com/spf13/[email protected]/command.go:902
main.main()
	/Users/hast02/code/go/pkg/mod/github.com/gopherjs/[email protected]/tool.go:586 +0x10b8

$ echo $?
1

From what I can tell, this is the line that provokes the GopherJS compiler panic: https://cs.opensource.google/go/x/sync/+/036812b2:singleflight/singleflight.go;l=162

@DaveHasteSpringer
Copy link
Author

DaveHasteSpringer commented Nov 16, 2021

As a workaround, it seems that changing go panic(e) to go func() { panic(e) }() in the singleflight library avoids the compiler panic.

(However, that's an awkward workaround; from a dependency-management perspective it would be preferable to use the upstream singleflight library directly, without having to adulterate it.)

@nevkontakte
Copy link
Member

@DaveHasteSpringer thanks for the report. Looks like the compiler doesn't expect the body of a goroutine to be a built-in function (such as panic), and this is indeed an odd way to write code. However, this is definitely a bug and I'll see of I can make a fix for it.

@nevkontakte nevkontakte self-assigned this Nov 21, 2021
@nevkontakte nevkontakte added this to the Go spec compliance milestone Nov 21, 2021
@nevkontakte
Copy link
Member

There's another flavor of the same bug:

func TestGoroutineJsObject(t *testing.T) {
	o := js.Global.Get("Object").New()
	go o.Set("x", "y") // TypeError: Cannot read property 'apply' of undefined
}

The root cause of the bug is similar: certain methods of js.Object type are normally compiled into JS expressions other than function calls, but it doesn't happen in conjunction with the go keyword.

A similar bug was fixed for defer here: #998.

@nevkontakte
Copy link
Member

Looks like this issue has been reported earlier: #547. I'm going to close this one in favor of the older one and continue there.

@DaveHasteSpringer
Copy link
Author

@nevkontakte Ah yes, that does look like the same type of issue. Thanks for looking into it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants