From: Shenghou Ma Date: Thu, 19 Sep 2013 05:20:02 +0000 (-0400) Subject: cmd/go: fix missing __mingw_fprintf symbol for cgo on windows X-Git-Tag: go1.2rc2~168 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=db71e1557b0f17921bbca101243f0fdec691d75c;p=gostls13.git cmd/go: fix missing __mingw_fprintf symbol for cgo on windows Fixes #5986. R=golang-dev, rsc, alex.brainman CC=golang-dev https://golang.org/cl/13261055 --- diff --git a/misc/cgo/test/cgo_test.go b/misc/cgo/test/cgo_test.go index 38151abca8..799536c544 100644 --- a/misc/cgo/test/cgo_test.go +++ b/misc/cgo/test/cgo_test.go @@ -47,5 +47,6 @@ func TestCallbackStack(t *testing.T) { testCallbackStack(t) } func TestFpVar(t *testing.T) { testFpVar(t) } func Test4339(t *testing.T) { test4339(t) } func Test6390(t *testing.T) { test6390(t) } +func Test5986(t *testing.T) { test5986(t) } func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) } diff --git a/misc/cgo/test/issue5986.go b/misc/cgo/test/issue5986.go new file mode 100644 index 0000000000..4f772cdb96 --- /dev/null +++ b/misc/cgo/test/issue5986.go @@ -0,0 +1,32 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cgotest + +/* +#cgo LDFLAGS: -lm +#include +#include + +static void output5986() +{ + int current_row = 0, row_count = 0; + double sum_squares = 0; + do { + if (current_row == 10) { + current_row = 0; + } + ++row_count; + } + while (current_row++ != 1); + double d = sqrt(sum_squares / row_count); + printf("sqrt is: %g\n", d); +} +*/ +import "C" +import "testing" + +func test5986(t *testing.T) { + C.output5986() +} diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 6f35a87f1e..07d8f9ddc4 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -2034,8 +2034,9 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string, gxxfile var staticLibs []string if goos == "windows" { - // libmingw32 and libmingwex might also use libgcc, so libgcc must come last - staticLibs = []string{"-lmingwex", "-lmingw32"} + // libmingw32 and libmingwex might also use libgcc, so libgcc must come last, + // and they also have some inter-dependencies, so must use linker groups. + staticLibs = []string{"-Wl,--start-group", "-lmingwex", "-lmingw32", "-Wl,--end-group"} } if cgoLibGccFile != "" { staticLibs = append(staticLibs, cgoLibGccFile)