Skip to content

cmd/go: allow import paths ending with '+' (for executable like g++ or clang++) #44776

@ianamason

Description

@ianamason

What version of Go are you using (go version)?

$ go version
go version go1.16 linux/amd64

Does this issue reproduce with the latest release?

It seems to be caused by the latest release. Everything works fine and dandy in 1.15

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCACHE="/home/vagrant/.cache/go-build"
GOENV="/home/vagrant/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/vagrant/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/vagrant/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.16"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/vagrant/gllvm/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build4236193755=/tmp/go-build -gno-record-gcc-switches"

What did you do?

So I maintain a tool set for building LLVM bitcode for any reasonable project.

https://github.com/SRI-CSL/gllvm

It consists of several executables, two of which are compiler wrappers.
One wraps clang, and is called gclang
The other wraps clang++ and is called gclang++

The executables live in:

vagrant@ubuntu-focal:~/gllvm$ tree cmd
cmd
├── gclang
│   └── main.go
├── gclang++
│   └── main.go
├── get-bc
│   └── main.go
├── gparse
│   └── main.go
└── gsanity-check
    └── main.go

5 directories, 5 files

People used to install them via:

go get github.com/SRI-CSL/gllvm/cmd/...

What did you expect to see?

This used to work just fine.

What did you see instead?

Now we get:

 go get github.com/SRI-CSL/gllvm/cmd/...
github.com/SRI-CSL/gllvm/cmd/gclang++: malformed import path "github.com/SRI-CSL/gllvm/cmd/gclang++": invalid char '+'

I understand that modules are in my future and that this may be related. But when I try make a module
file:

vagrant@ubuntu-focal:~/gllvm$ go mod init github.com/SRI-CSL/gllvm
go: creating new go.mod: module github.com/SRI-CSL/gllvm
go: to add module requirements and sums:
	go mod tidy
vagrant@ubuntu-focal:~/gllvm$ go mod tidy
github.com/SRI-CSL/gllvm/cmd/gclang++: malformed import path "github.com/SRI-CSL/gllvm/cmd/gclang++": invalid char '+'
vagrant@ubuntu-focal:~/gllvm$

I am fearing that go no longer tolerates '+' in the name of an executable. Maybe by accident?

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeGoCommandcmd/goNeedsFixThe path to resolution is known, but the work has not been done.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions