From e73697b710b2fd41b14336837ac6fd2585ad2a04 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 17 Nov 2020 22:54:13 -0500 Subject: [PATCH] cmd/go: fix failing gccgo cases in TestScript/build_overlay The 'go install' command does not support the -gccgo flag. (I'm not sure why, but it doesn't.) gccgo also uses system-native assembly syntax instead of cmd/compile's Plan 9 derivative. I've added an assembly file that seems to work on Linux, but I haven't tested it on other platforms; if it fails on other platforms, we can refine the test as needed. Fixes #42688 Change-Id: I0693a6a9eb58975f20cdc4160ef5f9a948563c88 Reviewed-on: https://go-review.googlesource.com/c/go/+/270978 Trust: Bryan C. Mills Reviewed-by: Michael Matloob --- src/cmd/go/testdata/script/build_overlay.txt | 69 +++++++++++--------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/src/cmd/go/testdata/script/build_overlay.txt b/src/cmd/go/testdata/script/build_overlay.txt index 5614b41578..b11cd96014 100644 --- a/src/cmd/go/testdata/script/build_overlay.txt +++ b/src/cmd/go/testdata/script/build_overlay.txt @@ -95,12 +95,6 @@ go build -compiler=gccgo -overlay overlay.json -o main_call_asm_gccgo$GOEXE ./ca exec ./main_call_asm_gccgo$GOEXE ! stdout . -go install -gccgo -overlay overlay.json ./test_cache -go list -gccgo -overlay overlay.json -f '{{.Stale}}' ./test_cache -stdout '^false$' -cp overlay/test_cache_different.go overlay/test_cache.go -go list -gccgo -overlay overlay.json -f '{{.Stale}}' ./test_cache -stdout '^true$' -- m/go.mod -- // TODO(matloob): how do overlays work with go.mod (especially if mod=readonly) @@ -128,7 +122,8 @@ the actual code is in the overlay "dir2/i.go": "overlay/dir2_i.go", "printpath/main.go": "overlay/printpath.go", "printpath/other.go": "overlay2/printpath2.go", - "call_asm/asm.s": "overlay/asm_file.s", + "call_asm/asm_gc.s": "overlay/asm_gc.s", + "call_asm/asm_gccgo.s": "overlay/asm_gccgo.s", "test_cache/main.go": "overlay/test_cache.go", "cgo_hello_replace/cgo_header.h": "overlay/cgo_head.h", "cgo_hello_replace/hello.c": "overlay/hello.c", @@ -242,17 +237,27 @@ void say_hello(); #include void say_hello() { puts("hello cgo\n"); fflush(stdout); } --- m/overlay/asm_file.s -- +-- m/overlay/asm_gc.s -- +// +build !gccgo + TEXT ·foo(SB),0,$0 RET +-- m/overlay/asm_gccgo.s -- +// +build gccgo + +.globl main.foo +.text +main.foo: + ret + -- m/overlay/test_cache.go -- package foo import "fmt" func bar() { - fmt.Println("something") + fmt.Println("something") } -- m/overlay/test_cache_different.go -- package foo @@ -260,7 +265,7 @@ package foo import "fmt" func bar() { - fmt.Println("different") + fmt.Println("different") } -- m/cgo_hello_quote/hello.c -- #include @@ -275,29 +280,29 @@ void say_hello() { puts("hello cgo\n"); fflush(stdout); } package main import ( - "fmt" - "io/ioutil" - "log" - "os" - "strings" + "fmt" + "io/ioutil" + "log" + "os" + "strings" ) func main() { - compiledGoFilesArg := os.Args[1] - b, err := ioutil.ReadFile(compiledGoFilesArg) - if err != nil { - log.Fatal(err) - } - compiledGoFiles := strings.Split(strings.TrimSpace(string(b)), "\n") - for _, f := range compiledGoFiles { - b, err := ioutil.ReadFile(f) - if err != nil { - log.Fatal(err) - } - for _, line := range strings.Split(string(b), "\n") { - if strings.HasPrefix(line, "#line") || strings.HasPrefix(line, "//line") { - fmt.Println(line) - } - } - } + compiledGoFilesArg := os.Args[1] + b, err := ioutil.ReadFile(compiledGoFilesArg) + if err != nil { + log.Fatal(err) + } + compiledGoFiles := strings.Split(strings.TrimSpace(string(b)), "\n") + for _, f := range compiledGoFiles { + b, err := ioutil.ReadFile(f) + if err != nil { + log.Fatal(err) + } + for _, line := range strings.Split(string(b), "\n") { + if strings.HasPrefix(line, "#line") || strings.HasPrefix(line, "//line") { + fmt.Println(line) + } + } + } } -- 2.50.0