Skip to content

cmd/compile: assertion failure when building syntax package with gotypesalias enabled #66873

Closed
@griesemer

Description

@griesemer

To reproduce:

  1. make.bash at tip
  2. comment out cmd/compile/internal/noder/irgen.go:91 (i.e., don't call os.Setenv)
  3. go install cmd/compile
  4. go build cmd/compile/internal/syntax

$ go build cmd/compile/internal/syntax
# cmd/compile/internal/syntax
cmd/compile/internal/syntax/tokens.go:7:6: internal compiler error: assertion failed

goroutine 1 [running]:
runtime/debug.Stack()
./runtime/debug/stack.go:26 +0x5e
cmd/compile/internal/base.FatalfAt({0x1853a40?, 0xc0?}, {0x69dcafc, 0x10}, {0x0, 0x0, 0x0})
cmd/compile/internal/base/print.go:225 +0x1d7
cmd/compile/internal/base.Fatalf(...)
cmd/compile/internal/base/print.go:194
cmd/compile/internal/base.Assert(...)
cmd/compile/internal/base/print.go:237
cmd/compile/internal/noder.assert(...)
cmd/compile/internal/noder/stencil.go:15
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:430
cmd/compile/internal/noder.(*reader).typWrapped(0xc0018537c0, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x156
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*reader).param(0xc0018537c0)
cmd/compile/internal/noder/reader.go:622 +0x18d
cmd/compile/internal/noder.(*reader).method(0xc0018537c0, 0xc001853900)
cmd/compile/internal/noder/reader.go:1022 +0x7c
cmd/compile/internal/noder.(*pkgReader).objIdxMayFail(0xc000ad56c0, 0x25, {0x0, 0x0, 0x0}, {0x721b420, 0x0, 0x0}, 0x0)
cmd/compile/internal/noder/reader.go:816 +0xd76
cmd/compile/internal/noder.(*pkgReader).objIdx(...)
cmd/compile/internal/noder/reader.go:670
cmd/compile/internal/noder.(*pkgReader).objInstIdx(0xc000ad56c0, {0xffffffff?, {0x721b420?, 0xc000600008?, 0xc0018468f0?}}, 0xc0017f5790, 0x0)
cmd/compile/internal/noder/reader.go:662 +0x96
cmd/compile/internal/noder.(*reader).obj(0xc001853400)
cmd/compile/internal/noder/reader.go:634 +0x46
cmd/compile/internal/noder.(*reader).doTyp(0xc001853400)
cmd/compile/internal/noder/reader.go:500 +0x72
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc001853040, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*pkgReader).objIdxMayFail(0xc000ad56c0, 0x24, {0x0, 0x0, 0x0}, {0x721b420, 0x0, 0x0}, 0x0)
cmd/compile/internal/noder/reader.go:744 +0xca5
cmd/compile/internal/noder.(*pkgReader).objIdx(...)
cmd/compile/internal/noder/reader.go:670
cmd/compile/internal/noder.(*pkgReader).objInstIdx(0xc000ad56c0, {0xffffffff?, {0x721b420?, 0xc000ccea40?, 0x60c1056?}}, 0xc0017f56c0, 0x0)
cmd/compile/internal/noder/reader.go:662 +0x96
cmd/compile/internal/noder.(*reader).obj(0xc001852c80)
cmd/compile/internal/noder/reader.go:634 +0x46
cmd/compile/internal/noder.(*reader).doTyp(0xc001852c80)
cmd/compile/internal/noder/reader.go:500 +0x72
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc001852b40, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*reader).structType(0xc001852b40)
cmd/compile/internal/noder/reader.go:589 +0xad
cmd/compile/internal/noder.(*reader).doTyp(0xc001852b40)
cmd/compile/internal/noder/reader.go:522 +0x37f
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc0018528c0, 0x0)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*pkgReader).objIdxMayFail(0xc000ad56c0, 0x23, {0x0, 0x0, 0x0}, {0x721b420, 0x0, 0x0}, 0x0)
cmd/compile/internal/noder/reader.go:805 +0x53c
cmd/compile/internal/noder.(*pkgReader).objIdx(...)
cmd/compile/internal/noder/reader.go:670
cmd/compile/internal/noder.(*pkgReader).objInstIdx(0xc000ad56c0, {0xffffffff?, {0x721b420?, 0x39300000005?, 0x0?}}, 0xc0017f4dd0, 0x0)
cmd/compile/internal/noder/reader.go:662 +0x96
cmd/compile/internal/noder.(*reader).obj(0xc001852500)
cmd/compile/internal/noder/reader.go:634 +0x46
cmd/compile/internal/noder.(*reader).doTyp(0xc001852500)
cmd/compile/internal/noder/reader.go:500 +0x72
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc0018523c0, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*reader).doTyp(0xc0018523c0)
cmd/compile/internal/noder/reader.go:516 +0xdb
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc001852280, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*reader).doTyp(0xc001852280)
cmd/compile/internal/noder/reader.go:520 +0x297
cmd/compile/internal/noder.(*pkgReader).typIdx(...)
cmd/compile/internal/noder/reader.go:429
cmd/compile/internal/noder.(*reader).typWrapped(0xc001844140, 0x1)
cmd/compile/internal/noder/reader.go:388 +0x125
cmd/compile/internal/noder.(*reader).typ(...)
cmd/compile/internal/noder/reader.go:382
cmd/compile/internal/noder.(*reader).param(...)
cmd/compile/internal/noder/reader.go:622
cmd/compile/internal/noder.(*reader).params(0xc001844140)
cmd/compile/internal/noder/reader.go:615 +0xad
cmd/compile/internal/noder.(*reader).signature(0xc001844140, 0xc001848870)
cmd/compile/internal/noder/reader.go:603 +0x5c
cmd/compile/internal/noder.(*reader).method(0xc001844140, 0xc001844280)
cmd/compile/internal/noder/reader.go:1023 +0x94
cmd/compile/internal/noder.(*pkgReader).objIdxMayFail(0xc000ad56c0, 0xcd, {0x0, 0x0, 0x0}, {0x721b420, 0x0, 0x0}, 0x0)
cmd/compile/internal/noder/reader.go:816 +0xd76
cmd/compile/internal/noder.(*pkgReader).objIdx(...)
cmd/compile/internal/noder/reader.go:670
cmd/compile/internal/noder.(*pkgReader).objInstIdx(0xc000ad56c0, {0xccf628?, {0x721b420?, 0x610d669?, 0x8?}}, 0x0, 0x0)
cmd/compile/internal/noder/reader.go:662 +0x96
cmd/compile/internal/noder.(*reader).obj(0xc000fed400)
cmd/compile/internal/noder/reader.go:634 +0x46
cmd/compile/internal/noder.(*reader).pkgObjs(0xc000fed400, 0xc000000240)
cmd/compile/internal/noder/reader.go:3314 +0x9d
cmd/compile/internal/noder.(*reader).pkgDecls(0xc000fed400, 0xc000000240)
cmd/compile/internal/noder/reader.go:3303 +0x18f
cmd/compile/internal/noder.(*reader).pkgInit(0xc000fed400, 0xc00007a320?, 0xc000000240)
cmd/compile/internal/noder/reader.go:3209 +0xe5
cmd/compile/internal/noder.unified({0x0?, {0x0?, 0x0?}}, {0xc000158380?, 0x6b64b00?, 0x0?})
cmd/compile/internal/noder/unified.go:188 +0x17c
cmd/compile/internal/noder.LoadPackage({0xc000022358, 0x10, 0x12})
cmd/compile/internal/noder/noder.go:77 +0x43a
cmd/compile/internal/gc.Main(0x6c18470)
cmd/compile/internal/gc/main.go:197 +0xbbd
main.main()
cmd/compile/main.go:57 +0xf9

Activity

added
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.
on Apr 17, 2024
added this to the Go1.23 milestone on Apr 17, 2024
griesemer

griesemer commented on Apr 17, 2024

@griesemer
ContributorAuthor

@adonovan for visibility

griesemer

griesemer commented on Apr 17, 2024

@griesemer
ContributorAuthor

The package object being compiled is checkBranches (cmd/compile/internal/syntax/branches.go) and then as part of it, (*labelScope).enclosingTarget.

griesemer

griesemer commented on Apr 18, 2024

@griesemer
ContributorAuthor

Follo-up: With pending CL 579935 (which may eventually get submitted), to enable type alias nodes, set the new types2.Config.EnableAlias flag in irgen.go.

gopherbot

gopherbot commented on May 2, 2024

@gopherbot
Contributor

Change https://go.dev/cl/568455 mentions this issue: cmd/compile: add test case for using Alias types

moved this to In Progress in Go Compiler / Runtimeon May 8, 2024
griesemer

griesemer commented on May 13, 2024

@griesemer
ContributorAuthor

Simple reproducer:

package p

func f(A) {}

type T int

type A = T

func (A) m() {}

Compiling this package (go tool compile p.go) with types2.Config.EnableAlias enabled causes the assertion failure. Changing the order of the declarations avoids the failure.

@mdempsky any insights?

cuonglm

cuonglm commented on May 13, 2024

@cuonglm
Member

See also my investigation here: #65893 (comment)

We should probably land CL https://go-review.googlesource.com/c/go/+/568455, so this is the only issue that track the problem.

26 remaining items

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

Metadata

Metadata

Labels

NeedsFixThe path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.

Type

No type

Projects

Status

Done

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @mdempsky@dmitshur@cuonglm@griesemer@gopherbot

      Issue actions

        cmd/compile: assertion failure when building syntax package with gotypesalias enabled · Issue #66873 · golang/go