Commit a6df299e authored by Russ Cox's avatar Russ Cox

cmd/go: detect Go assembly before assembling with gcc

Avoids confusing errors from the GNU assembler
processing Go assembly source code.

Fixes #19448.

Change-Id: Ic2c68b2521847cca5a3d078a092e5c60ec340840
Reviewed-on: https://go-review.googlesource.com/46423
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 53e4b8fc
...@@ -2310,6 +2310,19 @@ func TestCoverageWithCgo(t *testing.T) { ...@@ -2310,6 +2310,19 @@ func TestCoverageWithCgo(t *testing.T) {
} }
} }
func TestCgoAsmError(t *testing.T) {
if !canCgo {
t.Skip("skipping because cgo not enabled")
}
tg := testgo(t)
tg.parallel()
defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.runFail("build", "cgoasm")
tg.grepBoth("package using cgo has Go assembly file", "did not detect Go assembly file")
}
func TestCgoDependsOnSyscall(t *testing.T) { func TestCgoDependsOnSyscall(t *testing.T) {
if testing.Short() { if testing.Short() {
t.Skip("skipping test that removes $GOROOT/pkg/*_race in short mode") t.Skip("skipping test that removes $GOROOT/pkg/*_race in short mode")
......
...@@ -1333,6 +1333,16 @@ func (b *Builder) build(a *Action) (err error) { ...@@ -1333,6 +1333,16 @@ func (b *Builder) build(a *Action) (err error) {
} }
sfiles, gccfiles = filter(sfiles, sfiles[:0], gccfiles) sfiles, gccfiles = filter(sfiles, sfiles[:0], gccfiles)
} else { } else {
for _, sfile := range sfiles {
data, err := ioutil.ReadFile(filepath.Join(a.Package.Dir, sfile))
if err == nil {
if bytes.HasPrefix(data, []byte("TEXT")) || bytes.Contains(data, []byte("\nTEXT")) ||
bytes.HasPrefix(data, []byte("DATA")) || bytes.Contains(data, []byte("\nDATA")) ||
bytes.HasPrefix(data, []byte("GLOBL")) || bytes.Contains(data, []byte("\nGLOBL")) {
return fmt.Errorf("package using cgo has Go assembly file %s", sfile)
}
}
}
gccfiles = append(gccfiles, sfiles...) gccfiles = append(gccfiles, sfiles...)
sfiles = nil sfiles = nil
} }
......
package p
/*
// hi
*/
import "C"
func F() {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment