]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix missing __mingw_fprintf symbol for cgo on windows
authorShenghou Ma <minux.ma@gmail.com>
Thu, 19 Sep 2013 05:20:02 +0000 (01:20 -0400)
committerShenghou Ma <minux.ma@gmail.com>
Thu, 19 Sep 2013 05:20:02 +0000 (01:20 -0400)
Fixes #5986.

R=golang-dev, rsc, alex.brainman
CC=golang-dev
https://golang.org/cl/13261055

misc/cgo/test/cgo_test.go
misc/cgo/test/issue5986.go [new file with mode: 0644]
src/cmd/go/build.go

index 38151abca8456ea61f8bd6ffd57bc456e5887853..799536c544feff065b23f62eb39a9f50af7e1a3c 100644 (file)
@@ -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 (file)
index 0000000..4f772cd
--- /dev/null
@@ -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 <stdio.h>
+#include <math.h>
+
+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()
+}
index 6f35a87f1e6b7e2f04fcf77a5573eada06906b0a..07d8f9ddc43b6007d73f05a1c884b70e0b4e386f 100644 (file)
@@ -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)