Andrea Baldini
Andrea Baldini

Reputation: 1057

What causes this runtime internal error about "previous declaration at" when building with Go 1.14 after upgrading from Go 1.13?

After upgrading my go installation folder to Go 1.14

sudo tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz

I am receiving a runtime error every time I try to build a program:

~/playground/go/src/hello  go build hello
# runtime/internal/atomic
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:18:6: Load redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:16:24
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:24:6: Loadp redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:22:32
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:30:6: Load64 redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:28:26
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:36:6: LoadAcq redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:34:27
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:41:6: Xadd redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:39:37
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:44:6: Xadd64 redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:42:39
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:47:6: Xadduintptr redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:45:47
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:50:6: Xchg redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:48:36
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:53:6: Xchg64 redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:51:38
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:56:6: Xchguintptr redeclared in this block
    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:54:45
/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:56:6: too many errors

I tried to downgrade to version 1.13.8 and build and run go fine.

sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz

~  go version
go version go1.13.8 linux/amd64

~/go  go build hello && go run hello
hello, world

My OS is Linux Mint 19.2.

Upvotes: 17

Views: 9998

Answers (1)

Andrea Baldini
Andrea Baldini

Reputation: 1057

This error is reproducible and occurs when the target directory has been already used for older Go installations and some files have been renamed (compared to previous version).

For instance:

in Go 1.13.8 file go/src/runtime/internal/atomic/atomic_amd64x.go has been moved to go/src/runtime/internal/atomic/atomic_amd64.go in Go 1.14.

Extracting without cleaning target directory triggers "previous declaration" error because func Xchguintptr is declared both in go/src/runtime/internal/atomic/atomic_amd64x.go and go/src/runtime/internal/atomic/atomic_amd64.go

To avoid this type of error remove the installation folder (/usr/local/go) and reinstall Go 1.14.

sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz

Test again:

~/go/src/hello  go version
go version go1.14 linux/amd64
~/go/src/hello  go build hello && go run hello
hello, world

Upvotes: 57

Related Questions