// 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 // extern void doAdd(int, int); import "C" import ( "runtime" "sync" "testing" ) var sum struct { sync.Mutex i int } //export Add func Add(x int) { defer func() { recover() }() sum.Lock() sum.i += x sum.Unlock() var p *int *p = 2 } func testCthread(t *testing.T) { if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { t.Skip("the iOS exec wrapper is unable to properly handle the panic from Add") } sum.i = 0 C.doAdd(10, 6) want := 10 * (10 - 1) / 2 * 6 if sum.i != want { t.Fatalf("sum=%d, want %d", sum.i, want) } }