]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add TestCgoDLLImports
authorAlex Brainman <alex.brainman@gmail.com>
Mon, 16 Mar 2015 04:46:22 +0000 (15:46 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 24 Mar 2015 05:39:28 +0000 (05:39 +0000)
The test is a simple reproduction of issue 9356.

Update #8948.
Update #9356.

Change-Id: Ia77bc36d12ed0c3c4a8b1214cade8be181c9ad55
Reviewed-on: https://go-review.googlesource.com/7618
Reviewed-by: Minux Ma <minux@golang.org>
src/runtime/crash_cgo_test.go
src/runtime/crash_test.go

index f3b69efe7500d90f9ec277a45aa3b56992c4616f..01ffed93db7da4ef8f8e9e9e7677edff7d6827a8 100644 (file)
@@ -82,6 +82,18 @@ func TestCgoExternalThreadSIGPROF(t *testing.T) {
        }
 }
 
+func TestCgoDLLImports(t *testing.T) {
+       // test issue 9356
+       if runtime.GOOS != "windows" {
+               t.Skip("skipping windows specific test")
+       }
+       got := executeTest(t, cgoDLLImportsMainSource, nil, "a/a.go", cgoDLLImportsPkgSource)
+       want := "OK\n"
+       if got != want {
+               t.Fatalf("expected %q, but got %v", want, got)
+       }
+}
+
 const cgoSignalDeadlockSource = `
 package main
 
@@ -269,3 +281,43 @@ func main() {
        println("OK")
 }
 `
+
+const cgoDLLImportsMainSource = `
+package main
+
+/*
+#include <windows.h>
+
+DWORD getthread() {
+       return GetCurrentThreadId();
+}
+*/
+import "C"
+
+import "./a"
+
+func main() {
+       C.getthread()
+       a.GetThread()
+       println("OK")
+}
+`
+
+const cgoDLLImportsPkgSource = `
+package a
+
+/*
+#cgo CFLAGS: -mnop-fun-dllimport
+
+#include <windows.h>
+
+DWORD agetthread() {
+       return GetCurrentThreadId();
+}
+*/
+import "C"
+
+func GetThread() uint32 {
+       return uint32(C.agetthread())
+}
+`
index 5e26de36ac015c43a851b83a139162f602e43372..7bb3d288712685b756e77578978e486656892aa8 100644 (file)
@@ -72,7 +72,14 @@ func executeTest(t *testing.T, templ string, data interface{}, extra ...string)
        }
 
        for i := 0; i < len(extra); i += 2 {
-               if err := ioutil.WriteFile(filepath.Join(dir, extra[i]), []byte(extra[i+1]), 0666); err != nil {
+               fname := extra[i]
+               contents := extra[i+1]
+               if d, _ := filepath.Split(fname); d != "" {
+                       if err := os.Mkdir(filepath.Join(dir, d), 0755); err != nil {
+                               t.Fatal(err)
+                       }
+               }
+               if err := ioutil.WriteFile(filepath.Join(dir, fname), []byte(contents), 0666); err != nil {
                        t.Fatal(err)
                }
        }