pingcap / tiflow

This repo maintains DM (a data migration platform) and TiCDC (change data capture for TiDB)
Apache License 2.0
417 stars 274 forks source link

unit_test: go generate command trigger invalid memory address or nil pointer dereference #10938

Closed wk989898 closed 2 months ago

wk989898 commented 2 months ago

What did you do?

make unit_test

What did you expect to see?

No response

What did you see instead?

Log:

cd tools/check && GO111MODULE=on go build -mod=mod -o ../bin/failpoint-ctl github.com/pingcap/failpoint/failpoint-ctl
cd tools/check && GO111MODULE=on go build -mod=mod -o ../bin/mockgen github.com/golang/mock/mockgen
scripts/generate-mock.sh
cd tools/check && GO111MODULE=on go build -mod=mod -o ../bin/msgp github.com/tinylib/msgp
cd tools/check && GO111MODULE=on go build -mod=mod -o ../bin/stringer golang.org/x/tools/cmd/stringer
cd tools/check && GO111MODULE=on go build -mod=mod -o ../bin/mockery github.com/vektra/mockery/v2
go generate
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7c2c4f]

goroutine 6 [running]:
go/types.(*Checker).handleBailout(0xc00034c600, 0xc002273bd0)
        /usr/local/go/src/go/types/check.go:367 +0x88
panic({0x8ce2a0?, 0xd3c790?})
        /usr/local/go/src/runtime/panic.go:770 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0xa30a20, 0xd416e0})
        /usr/local/go/src/go/types/sizes.go:228 +0x30f
go/types.(*Config).sizeof(...)
        /usr/local/go/src/go/types/sizes.go:333
go/types.representableConst.func1({0xa30a20?, 0xd416e0?})
        /usr/local/go/src/go/types/const.go:76 +0x9e
go/types.representableConst({0xa332f0, 0xd193c0}, 0xc00034c600, 0xd416e0, 0xc00226f0c0)
        /usr/local/go/src/go/types/const.go:92 +0x192
go/types.(*Checker).representation(0xc00034c600, 0xc00195d600, 0xd416e0)
        /usr/local/go/src/go/types/const.go:256 +0x65
go/types.(*Checker).implicitTypeAndValue(0xc00034c600, 0xc00195d600, {0xa30a20, 0xd416e0})
        /usr/local/go/src/go/types/expr.go:375 +0x2d7
go/types.(*Checker).convertUntyped(0xc00034c600, 0xc00195d600, {0xa30a20, 0xd416e0})
        /usr/local/go/src/go/types/const.go:289 +0x3f
go/types.(*Checker).isValidIndex(0xc00034c600, 0xc00195d600, 0x34, {0x9412b5, 0x5}, 0x0)
        /usr/local/go/src/go/types/index.go:384 +0x86
go/types.(*Checker).index(0xc00034c600, {0xa32b68, 0xc000409940}, 0xffffffffffffffff)
        /usr/local/go/src/go/types/index.go:355 +0xc6
go/types.(*Checker).builtin(0xc00034c600, 0xc00195d540, 0xc00223fb00, 0x9)
        /usr/local/go/src/go/types/builtins.go:517 +0x62f6
go/types.(*Checker).callExpr(0xc00034c600, 0xc00195d540, 0xc00223fb00)
        /usr/local/go/src/go/types/call.go:236 +0xf85
go/types.(*Checker).exprInternal(0xc00034c600, 0x0, 0xc00195d540, {0xa32c28, 0xc00223fb00}, {0x0, 0x0})
        /usr/local/go/src/go/types/expr.go:1374 +0xf8
go/types.(*Checker).rawExpr(0xc00034c600, 0x0, 0xc00195d540, {0xa32c28?, 0xc00223fb00?}, {0x0?, 0x0?}, 0x0)
        /usr/local/go/src/go/types/expr.go:979 +0x19e
go/types.(*Checker).expr(0xc00034c600, 0xc00195d540?, 0xc00195d540, {0xa32c28?, 0xc00223fb00?})
        /usr/local/go/src/go/types/expr.go:1513 +0x30
go/types.(*Checker).exprInternal(0xc00034c600, 0x0, 0xc00195d540, {0xa32598, 0xc00223fd80}, {0x0, 0x0})
        /usr/local/go/src/go/types/expr.go:1162 +0x2469
go/types.(*Checker).rawExpr(0xc00034c600, 0x0, 0xc00195d540, {0xa32598?, 0xc00223fd80?}, {0x0?, 0x0?}, 0x0)
        /usr/local/go/src/go/types/expr.go:979 +0x19e
go/types.(*Checker).expr(0xc00034c600, 0xc002271cf8?, 0xc00195d540, {0xa32598?, 0xc00223fd80?})
        /usr/local/go/src/go/types/expr.go:1513 +0x30
go/types.(*Checker).unary(0xc00034c600, 0xc00195d540, 0xc0001440a0)
        /usr/local/go/src/go/types/expr.go:127 +0x4a
go/types.(*Checker).exprInternal(0xc00034c600, 0x0, 0xc00195d540, {0xa32688, 0xc0001440a0}, {0x0, 0x0})
        /usr/local/go/src/go/types/expr.go:1406 +0x18c5
go/types.(*Checker).rawExpr(0xc00034c600, 0x0, 0xc00195d540, {0xa32688?, 0xc0001440a0?}, {0x0?, 0x0?}, 0x0)
        /usr/local/go/src/go/types/expr.go:979 +0x19e
go/types.(*Checker).expr(0xc00034c600, 0x0?, 0xc00195d540, {0xa32688?, 0xc0001440a0?})
        /usr/local/go/src/go/types/expr.go:1513 +0x30
go/types.(*Checker).initVars(0xc00034c600, {0xc0021ad588, 0x1, 0x0?}, {0xc001fbb520, 0x1?, 0x0?}, {0x0, 0x0})
        /usr/local/go/src/go/types/assignments.go:381 +0x60b
go/types.(*Checker).shortVarDecl(0xc00034c600, {0xa2fc20, 0xc00069a4b0}, {0xc001fbb200, 0x1, 0xc00041ad58?}, {0xc001fbb520, 0x1, 0x1})
        /usr/local/go/src/go/types/assignments.go:556 +0x8f0
go/types.(*Checker).stmt(0xc00034c600, 0x0, {0xa32868, 0xc00223fdc0})
        /usr/local/go/src/go/types/stmt.go:473 +0x15ff
go/types.(*Checker).stmtList(0xc00034c600, 0x0, {0xc0002fd700?, 0xc000f02140?, 0xc000f0e0e0?})
        /usr/local/go/src/go/types/stmt.go:121 +0x85
go/types.(*Checker).funcBody(0xc00034c600, 0xa30890?, {0xc0013202e0?, 0xc000150070?}, 0xc0016ad240, 0xc000120ab0, {0x0?, 0x0?})
        /usr/local/go/src/go/types/stmt.go:41 +0x331
go/types.(*Checker).funcDecl.func1()
        /usr/local/go/src/go/types/decl.go:852 +0x3a
go/types.(*Checker).processDelayed(0xc00034c600, 0x0)
        /usr/local/go/src/go/types/check.go:467 +0x162
go/types.(*Checker).checkFiles(0xc00034c600, {0xc001b5cc30, 0x3, 0x3})
        /usr/local/go/src/go/types/check.go:411 +0x1cc
go/types.(*Checker).Files(...)
        /usr/local/go/src/go/types/check.go:372
golang.org/x/tools/go/packages.(*loader).loadPackage(0xc000142380, 0xc000be7110)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:1052 +0xa72
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1()
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:851 +0x1a9
sync.(*Once).doSlow(0x0?, 0x0?)
        /usr/local/go/src/sync/once.go:74 +0xc2
sync.(*Once).Do(...)
        /usr/local/go/src/sync/once.go:65
golang.org/x/tools/go/packages.(*loader).loadRecursive(0x0?, 0x0?)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:839 +0x4a
golang.org/x/tools/go/packages.(*loader).refine.func2(0x0?)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:774 +0x26
created by golang.org/x/tools/go/packages.(*loader).refine in goroutine 1
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:773 +0xccf
cdc/redo/writer/file/file.go:40: running "mockery": exit status 2
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x5a6cef]

goroutine 10 [running]:
go/types.(*Checker).handleBailout(0xc0000dec00, 0xc0004a7bd0)
        /usr/local/go/src/go/types/check.go:367 +0x88
panic({0x65dbc0?, 0x85c550?})
        /usr/local/go/src/runtime/panic.go:770 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0x6fcab0, 0x85f580})
        /usr/local/go/src/go/types/sizes.go:228 +0x30f
go/types.(*Config).sizeof(...)
        /usr/local/go/src/go/types/sizes.go:333
go/types.representableConst.func1({0x6fcab0?, 0x85f580?})
        /usr/local/go/src/go/types/const.go:76 +0x9e
go/types.representableConst({0x6fe630, 0xc000494c78}, 0xc0000dec00, 0x85f580, 0xc0004a6a28)
        /usr/local/go/src/go/types/const.go:92 +0x192
go/types.(*Checker).representation(0xc0000dec00, 0xc00027d600, 0x85f580)
        /usr/local/go/src/go/types/const.go:256 +0x65
go/types.(*Checker).implicitTypeAndValue(0xc0000dec00, 0xc00027d600, {0x6fd4d8, 0xc000341570})
        /usr/local/go/src/go/types/expr.go:375 +0x2d7
go/types.(*Checker).assignment(0xc0000dec00, 0xc00027d600, {0x6fd4d8, 0xc000341570}, {0x69ca70, 0xb})
        /usr/local/go/src/go/types/assignments.go:52 +0x2e5
go/types.(*Checker).exprInternal(0xc0000dec00, 0x0, 0xc00027d600, {0x6fdb98, 0xc00068b180}, {0x0, 0x0})
        /usr/local/go/src/go/types/expr.go:1268 +0x2b6c
go/types.(*Checker).rawExpr(0xc0000dec00, 0x0, 0xc00027d600, {0x6fdb98?, 0xc00068b180?}, {0x0?, 0x0?}, 0x0)
        /usr/local/go/src/go/types/expr.go:979 +0x19e
go/types.(*Checker).expr(0xc0000dec00, 0x0?, 0xc00027d600, {0x6fdb98?, 0xc00068b180?})
        /usr/local/go/src/go/types/expr.go:1513 +0x30
go/types.(*Checker).varDecl(0xc0000dec00, 0xc000663ce0, {0xc0004e2808, 0x1, 0x1}, {0x0, 0x0}, {0x6fdb98, 0xc00068b180})
        /usr/local/go/src/go/types/decl.go:521 +0x17b
go/types.(*Checker).objDecl(0xc0000dec00, {0x700d18, 0xc000663ce0}, 0x0)
        /usr/local/go/src/go/types/decl.go:194 +0x9e5
go/types.(*Checker).packageObjects(0xc0000dec00)
        /usr/local/go/src/go/types/resolver.go:693 +0x4dd
go/types.(*Checker).checkFiles(0xc0000dec00, {0xc000286400, 0x4, 0x4})
        /usr/local/go/src/go/types/check.go:408 +0x1a5
go/types.(*Checker).Files(...)
        /usr/local/go/src/go/types/check.go:372
golang.org/x/tools/go/packages.(*loader).loadPackage(0xc0000e2000, 0xc0003bd3b0)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:1052 +0xa72
golang.org/x/tools/go/packages.(*loader).loadRecursive.func1()
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:851 +0x1a9
sync.(*Once).doSlow(0xc0002daf98?, 0x405f37?)
        /usr/local/go/src/sync/once.go:74 +0xc2
sync.(*Once).Do(...)
        /usr/local/go/src/sync/once.go:65
golang.org/x/tools/go/packages.(*loader).loadRecursive(0x606c5e?, 0xc0002dafd0?)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:839 +0x4a
golang.org/x/tools/go/packages.(*loader).refine.func2(0x0?)
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:774 +0x26
created by golang.org/x/tools/go/packages.(*loader).refine in goroutine 1
        /root/go/pkg/mod/golang.org/x/tools@v0.7.0/go/packages/packages.go:773 +0xccf
dm/pkg/terror/terror.go:34: running "stringer": exit status 2
make: *** [Makefile:328: go-generate] Error 1

Versions of the cluster

TiCDC version (execute cdc version):

Release Version: v8.0.0-master-dirty
Git Commit Hash: fc5677843861c0863839f47b0230637851f66c08
Git Branch: kafka-version
UTC Build Time: 2024-04-08 12:20:09
Go Version: go version go1.22.1 linux/amd64

OS version:

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy
wk989898 commented 2 months ago

Solved by downgrading Go version to 1.21. Same issue: https://github.com/vektra/mockery/issues/752