summaryrefslogtreecommitdiff
path: root/misc/cgo
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2011-09-13 13:11:55 +0200
committerOndřej Surý <ondrej@sury.org>2011-09-13 13:11:55 +0200
commit80f18fc933cf3f3e829c5455a1023d69f7b86e52 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /misc/cgo
parent28592ee1ea1f5cdffcf85472f9de0285d928cf12 (diff)
downloadgolang-80f18fc933cf3f3e829c5455a1023d69f7b86e52.tar.gz
Imported Upstream version 60
Diffstat (limited to 'misc/cgo')
-rw-r--r--misc/cgo/gmp/Makefile38
-rw-r--r--misc/cgo/gmp/fib.go43
-rw-r--r--misc/cgo/gmp/gmp.go371
-rw-r--r--misc/cgo/gmp/pi.go104
-rw-r--r--misc/cgo/life/Makefile21
-rw-r--r--misc/cgo/life/c-life.c56
-rw-r--r--misc/cgo/life/golden.out17
-rw-r--r--misc/cgo/life/life.go39
-rw-r--r--misc/cgo/life/life.h7
-rw-r--r--misc/cgo/life/main.go44
-rwxr-xr-xmisc/cgo/life/test.bash11
-rw-r--r--misc/cgo/stdio/Makefile17
-rw-r--r--misc/cgo/stdio/chain.go43
-rw-r--r--misc/cgo/stdio/fib.go47
-rw-r--r--misc/cgo/stdio/file.go44
-rw-r--r--misc/cgo/stdio/golden.out150
-rw-r--r--misc/cgo/stdio/hello.go11
-rwxr-xr-xmisc/cgo/stdio/test.bash15
-rw-r--r--misc/cgo/test/Makefile24
-rw-r--r--misc/cgo/test/align.go72
-rw-r--r--misc/cgo/test/basic.go134
-rw-r--r--misc/cgo/test/callback.go136
-rw-r--r--misc/cgo/test/callback_c.c12
-rw-r--r--misc/cgo/test/cgo_test.go28
-rw-r--r--misc/cgo/test/env.go32
-rw-r--r--misc/cgo/test/issue1222.go29
-rw-r--r--misc/cgo/test/issue1328.go30
-rw-r--r--misc/cgo/test/issue1560.go46
-rw-r--r--misc/cgo/test/runtime.c21
29 files changed, 0 insertions, 1642 deletions
diff --git a/misc/cgo/gmp/Makefile b/misc/cgo/gmp/Makefile
deleted file mode 100644
index fc6209f27..000000000
--- a/misc/cgo/gmp/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2009 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.
-
-include ../../../src/Make.inc
-
-TARG=gmp
-
-# Can have plain GOFILES too, but this example doesn't.
-
-CGOFILES=\
- gmp.go
-
-CGO_LDFLAGS=-lgmp
-
-# To add flags necessary for locating the library or its include files,
-# set CGO_CFLAGS or CGO_LDFLAGS. For example, to use an
-# alternate installation of the library:
-# CGO_CFLAGS=-I/home/rsc/gmp32/include
-# CGO_LDFLAGS+=-L/home/rsc/gmp32/lib
-# Note the += on the second line.
-
-CLEANFILES+=pi fib
-
-include ../../../src/Make.pkg
-
-# Simple test programs
-
-# Computes 1000 digits of pi; single-threaded.
-pi: install pi.go
- $(GC) pi.go
- $(LD) -o $@ pi.$O
-
-# Computes 200 Fibonacci numbers; multi-threaded.
-fib: install fib.go
- $(GC) fib.go
- $(LD) -o $@ fib.$O
-
diff --git a/misc/cgo/gmp/fib.go b/misc/cgo/gmp/fib.go
deleted file mode 100644
index 3eda39e17..000000000
--- a/misc/cgo/gmp/fib.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2009 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.
-
-// Compute Fibonacci numbers with two goroutines
-// that pass integers back and forth. No actual
-// concurrency, just threads and synchronization
-// and foreign code on multiple pthreads.
-
-package main
-
-import (
- big "gmp"
- "runtime"
-)
-
-func fibber(c chan *big.Int, out chan string, n int64) {
- // Keep the fibbers in dedicated operating system
- // threads, so that this program tests coordination
- // between pthreads and not just goroutines.
- runtime.LockOSThread()
-
- i := big.NewInt(n)
- if n == 0 {
- c <- i
- }
- for {
- j := <-c
- out <- j.String()
- i.Add(i, j)
- c <- i
- }
-}
-
-func main() {
- c := make(chan *big.Int)
- out := make(chan string)
- go fibber(c, out, 0)
- go fibber(c, out, 1)
- for i := 0; i < 200; i++ {
- println(<-out)
- }
-}
diff --git a/misc/cgo/gmp/gmp.go b/misc/cgo/gmp/gmp.go
deleted file mode 100644
index 7faa71b69..000000000
--- a/misc/cgo/gmp/gmp.go
+++ /dev/null
@@ -1,371 +0,0 @@
-// Copyright 2009 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.
-
-/*
-An example of wrapping a C library in Go. This is the GNU
-multiprecision library gmp's integer type mpz_t wrapped to look like
-the Go package big's integer type Int.
-
-This is a syntactically valid Go program—it can be parsed with the Go
-parser and processed by godoc—but it is not compiled directly by 6g.
-Instead, a separate tool, cgo, processes it to produce three output
-files. The first two, 6g.go and 6c.c, are a Go source file for 6g and
-a C source file for 6c; both compile as part of the named package
-(gmp, in this example). The third, gcc.c, is a C source file for gcc;
-it compiles into a shared object (.so) that is dynamically linked into
-any 6.out that imports the first two files.
-
-The stanza
-
- // #include <gmp.h>
- import "C"
-
-is a signal to cgo. The doc comment on the import of "C" provides
-additional context for the C file. Here it is just a single #include
-but it could contain arbitrary C definitions to be imported and used.
-
-Cgo recognizes any use of a qualified identifier C.xxx and uses gcc to
-find the definition of xxx. If xxx is a type, cgo replaces C.xxx with
-a Go translation. C arithmetic types translate to precisely-sized Go
-arithmetic types. A C struct translates to a Go struct, field by
-field; unrepresentable fields are replaced with opaque byte arrays. A
-C union translates into a struct containing the first union member and
-perhaps additional padding. C arrays become Go arrays. C pointers
-become Go pointers. C function pointers become Go's uintptr.
-C void pointer's become Go's unsafe.Pointer.
-
-For example, mpz_t is defined in <gmp.h> as:
-
- typedef unsigned long int mp_limb_t;
-
- typedef struct
- {
- int _mp_alloc;
- int _mp_size;
- mp_limb_t *_mp_d;
- } __mpz_struct;
-
- typedef __mpz_struct mpz_t[1];
-
-Cgo generates:
-
- type _C_int int32
- type _C_mp_limb_t uint64
- type _C___mpz_struct struct {
- _mp_alloc _C_int;
- _mp_size _C_int;
- _mp_d *_C_mp_limb_t;
- }
- type _C_mpz_t [1]_C___mpz_struct
-
-and then replaces each occurrence of a type C.xxx with _C_xxx.
-
-If xxx is data, cgo arranges for C.xxx to refer to the C variable,
-with the type translated as described above. To do this, cgo must
-introduce a Go variable that points at the C variable (the linker can
-be told to initialize this pointer). For example, if the gmp library
-provided
-
- mpz_t zero;
-
-then cgo would rewrite a reference to C.zero by introducing
-
- var _C_zero *C.mpz_t
-
-and then replacing all instances of C.zero with (*_C_zero).
-
-Cgo's most interesting translation is for functions. If xxx is a C
-function, then cgo rewrites C.xxx into a new function _C_xxx that
-calls the C xxx in a standard pthread. The new function translates
-its arguments, calls xxx, and translates the return value.
-
-Translation of parameters and the return value follows the type
-translation above except that arrays passed as parameters translate
-explicitly in Go to pointers to arrays, as they do (implicitly) in C.
-
-Garbage collection is the big problem. It is fine for the Go world to
-have pointers into the C world and to free those pointers when they
-are no longer needed. To help, the Go code can define Go objects
-holding the C pointers and use runtime.SetFinalizer on those Go objects.
-
-It is much more difficult for the C world to have pointers into the Go
-world, because the Go garbage collector is unaware of the memory
-allocated by C. The most important consideration is not to
-constrain future implementations, so the rule is that Go code can
-hand a Go pointer to C code but must separately arrange for
-Go to hang on to a reference to the pointer until C is done with it.
-*/
-package gmp
-
-// #include <gmp.h>
-// #include <stdlib.h>
-import "C"
-
-import (
- "os"
- "unsafe"
-)
-
-/*
- * one of a kind
- */
-
-// An Int represents a signed multi-precision integer.
-// The zero value for an Int represents the value 0.
-type Int struct {
- i C.mpz_t
- init bool
-}
-
-// NewInt returns a new Int initialized to x.
-func NewInt(x int64) *Int { return new(Int).SetInt64(x) }
-
-// Int promises that the zero value is a 0, but in gmp
-// the zero value is a crash. To bridge the gap, the
-// init bool says whether this is a valid gmp value.
-// doinit initializes z.i if it needs it. This is not inherent
-// to FFI, just a mismatch between Go's convention of
-// making zero values useful and gmp's decision not to.
-func (z *Int) doinit() {
- if z.init {
- return
- }
- z.init = true
- C.mpz_init(&z.i[0])
-}
-
-// Bytes returns z's representation as a big-endian byte array.
-func (z *Int) Bytes() []byte {
- b := make([]byte, (z.Len()+7)/8)
- n := C.size_t(len(b))
- C.mpz_export(unsafe.Pointer(&b[0]), &n, 1, 1, 1, 0, &z.i[0])
- return b[0:n]
-}
-
-// Len returns the length of z in bits. 0 is considered to have length 1.
-func (z *Int) Len() int {
- z.doinit()
- return int(C.mpz_sizeinbase(&z.i[0], 2))
-}
-
-// Set sets z = x and returns z.
-func (z *Int) Set(x *Int) *Int {
- z.doinit()
- C.mpz_set(&z.i[0], &x.i[0])
- return z
-}
-
-// SetBytes interprets b as the bytes of a big-endian integer
-// and sets z to that value.
-func (z *Int) SetBytes(b []byte) *Int {
- z.doinit()
- if len(b) == 0 {
- z.SetInt64(0)
- } else {
- C.mpz_import(&z.i[0], C.size_t(len(b)), 1, 1, 1, 0, unsafe.Pointer(&b[0]))
- }
- return z
-}
-
-// SetInt64 sets z = x and returns z.
-func (z *Int) SetInt64(x int64) *Int {
- z.doinit()
- // TODO(rsc): more work on 32-bit platforms
- C.mpz_set_si(&z.i[0], C.long(x))
- return z
-}
-
-// SetString interprets s as a number in the given base
-// and sets z to that value. The base must be in the range [2,36].
-// SetString returns an error if s cannot be parsed or the base is invalid.
-func (z *Int) SetString(s string, base int) os.Error {
- z.doinit()
- if base < 2 || base > 36 {
- return os.EINVAL
- }
- p := C.CString(s)
- defer C.free(unsafe.Pointer(p))
- if C.mpz_set_str(&z.i[0], p, C.int(base)) < 0 {
- return os.EINVAL
- }
- return nil
-}
-
-// String returns the decimal representation of z.
-func (z *Int) String() string {
- if z == nil {
- return "nil"
- }
- z.doinit()
- p := C.mpz_get_str(nil, 10, &z.i[0])
- s := C.GoString(p)
- C.free(unsafe.Pointer(p))
- return s
-}
-
-func (z *Int) destroy() {
- if z.init {
- C.mpz_clear(&z.i[0])
- }
- z.init = false
-}
-
-
-/*
- * arithmetic
- */
-
-// Add sets z = x + y and returns z.
-func (z *Int) Add(x, y *Int) *Int {
- x.doinit()
- y.doinit()
- z.doinit()
- C.mpz_add(&z.i[0], &x.i[0], &y.i[0])
- return z
-}
-
-// Sub sets z = x - y and returns z.
-func (z *Int) Sub(x, y *Int) *Int {
- x.doinit()
- y.doinit()
- z.doinit()
- C.mpz_sub(&z.i[0], &x.i[0], &y.i[0])
- return z
-}
-
-// Mul sets z = x * y and returns z.
-func (z *Int) Mul(x, y *Int) *Int {
- x.doinit()
- y.doinit()
- z.doinit()
- C.mpz_mul(&z.i[0], &x.i[0], &y.i[0])
- return z
-}
-
-// Div sets z = x / y, rounding toward zero, and returns z.
-func (z *Int) Div(x, y *Int) *Int {
- x.doinit()
- y.doinit()
- z.doinit()
- C.mpz_tdiv_q(&z.i[0], &x.i[0], &y.i[0])
- return z
-}
-
-// Mod sets z = x % y and returns z.
-// Like the result of the Go % operator, z has the same sign as x.
-func (z *Int) Mod(x, y *Int) *Int {
- x.doinit()
- y.doinit()
- z.doinit()
- C.mpz_tdiv_r(&z.i[0], &x.i[0], &y.i[0])
- return z
-}
-
-// Lsh sets z = x << s and returns z.
-func (z *Int) Lsh(x *Int, s uint) *Int {
- x.doinit()
- z.doinit()
- C.mpz_mul_2exp(&z.i[0], &x.i[0], C.ulong(s))
- return z
-}
-
-// Rsh sets z = x >> s and returns z.
-func (z *Int) Rsh(x *Int, s uint) *Int {
- x.doinit()
- z.doinit()
- C.mpz_div_2exp(&z.i[0], &x.i[0], C.ulong(s))
- return z
-}
-
-// Exp sets z = x^y % m and returns z.
-// If m == nil, Exp sets z = x^y.
-func (z *Int) Exp(x, y, m *Int) *Int {
- m.doinit()
- x.doinit()
- y.doinit()
- z.doinit()
- if m == nil {
- C.mpz_pow_ui(&z.i[0], &x.i[0], C.mpz_get_ui(&y.i[0]))
- } else {
- C.mpz_powm(&z.i[0], &x.i[0], &y.i[0], &m.i[0])
- }
- return z
-}
-
-func (z *Int) Int64() int64 {
- if !z.init {
- return 0
- }
- return int64(C.mpz_get_si(&z.i[0]))
-}
-
-
-// Neg sets z = -x and returns z.
-func (z *Int) Neg(x *Int) *Int {
- x.doinit()
- z.doinit()
- C.mpz_neg(&z.i[0], &x.i[0])
- return z
-}
-
-// Abs sets z to the absolute value of x and returns z.
-func (z *Int) Abs(x *Int) *Int {
- x.doinit()
- z.doinit()
- C.mpz_abs(&z.i[0], &x.i[0])
- return z
-}
-
-
-/*
- * functions without a clear receiver
- */
-
-// CmpInt compares x and y. The result is
-//
-// -1 if x < y
-// 0 if x == y
-// +1 if x > y
-//
-func CmpInt(x, y *Int) int {
- x.doinit()
- y.doinit()
- switch cmp := C.mpz_cmp(&x.i[0], &y.i[0]); {
- case cmp < 0:
- return -1
- case cmp == 0:
- return 0
- }
- return +1
-}
-
-// DivModInt sets q = x / y and r = x % y.
-func DivModInt(q, r, x, y *Int) {
- q.doinit()
- r.doinit()
- x.doinit()
- y.doinit()
- C.mpz_tdiv_qr(&q.i[0], &r.i[0], &x.i[0], &y.i[0])
-}
-
-// GcdInt sets d to the greatest common divisor of a and b,
-// which must be positive numbers.
-// If x and y are not nil, GcdInt sets x and y such that d = a*x + b*y.
-// If either a or b is not positive, GcdInt sets d = x = y = 0.
-func GcdInt(d, x, y, a, b *Int) {
- d.doinit()
- x.doinit()
- y.doinit()
- a.doinit()
- b.doinit()
- C.mpz_gcdext(&d.i[0], &x.i[0], &y.i[0], &a.i[0], &b.i[0])
-}
-
-// ProbablyPrime performs n Miller-Rabin tests to check whether z is prime.
-// If it returns true, z is prime with probability 1 - 1/4^n.
-// If it returns false, z is not prime.
-func (z *Int) ProbablyPrime(n int) bool {
- z.doinit()
- return int(C.mpz_probab_prime_p(&z.i[0], C.int(n))) > 0
-}
diff --git a/misc/cgo/gmp/pi.go b/misc/cgo/gmp/pi.go
deleted file mode 100644
index 45f61abbd..000000000
--- a/misc/cgo/gmp/pi.go
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of "The Computer Language Benchmarks Game" nor the
- name of "The Computer Language Shootout Benchmarks" nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* The Computer Language Benchmarks Game
- * http://shootout.alioth.debian.org/
- *
- * contributed by The Go Authors.
- * based on pidigits.c (by Paolo Bonzini & Sean Bartlett,
- * modified by Michael Mellor)
- */
-
-package main
-
-import (
- big "gmp"
- "fmt"
- "runtime"
-)
-
-var (
- tmp1 = big.NewInt(0)
- tmp2 = big.NewInt(0)
- numer = big.NewInt(1)
- accum = big.NewInt(0)
- denom = big.NewInt(1)
- ten = big.NewInt(10)
-)
-
-func extractDigit() int64 {
- if big.CmpInt(numer, accum) > 0 {
- return -1
- }
- tmp1.Lsh(numer, 1).Add(tmp1, numer).Add(tmp1, accum)
- big.DivModInt(tmp1, tmp2, tmp1, denom)
- tmp2.Add(tmp2, numer)
- if big.CmpInt(tmp2, denom) >= 0 {
- return -1
- }
- return tmp1.Int64()
-}
-
-func nextTerm(k int64) {
- y2 := k*2 + 1
- accum.Add(accum, tmp1.Lsh(numer, 1))
- accum.Mul(accum, tmp1.SetInt64(y2))
- numer.Mul(numer, tmp1.SetInt64(k))
- denom.Mul(denom, tmp1.SetInt64(y2))
-}
-
-func eliminateDigit(d int64) {
- accum.Sub(accum, tmp1.Mul(denom, tmp1.SetInt64(d)))
- accum.Mul(accum, ten)
- numer.Mul(numer, ten)
-}
-
-func main() {
- i := 0
- k := int64(0)
- for {
- d := int64(-1)
- for d < 0 {
- k++
- nextTerm(k)
- d = extractDigit()
- }
- eliminateDigit(d)
- fmt.Printf("%c", d+'0')
-
- if i++; i%50 == 0 {
- fmt.Printf("\n")
- if i >= 1000 {
- break
- }
- }
- }
-
- fmt.Printf("\n%d calls; bit sizes: %d %d %d\n", runtime.Cgocalls(), numer.Len(), accum.Len(), denom.Len())
-}
diff --git a/misc/cgo/life/Makefile b/misc/cgo/life/Makefile
deleted file mode 100644
index 5a10380ed..000000000
--- a/misc/cgo/life/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2010 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.
-
-include ../../../src/Make.inc
-
-TARG=life
-
-CGOFILES=\
- life.go\
-
-CGO_OFILES=\
- c-life.o\
-
-CLEANFILES+=life
-
-include ../../../src/Make.pkg
-
-life: install main.go
- $(GC) main.go
- $(LD) -o $@ main.$O
diff --git a/misc/cgo/life/c-life.c b/misc/cgo/life/c-life.c
deleted file mode 100644
index 657245595..000000000
--- a/misc/cgo/life/c-life.c
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2010 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.
-
-#include <assert.h>
-#include "life.h"
-#include "_cgo_export.h"
-
-const int MYCONST = 0;
-
-// Do the actual manipulation of the life board in C. This could be
-// done easily in Go, we are just using C for demonstration
-// purposes.
-void
-Step(int x, int y, int *a, int *n)
-{
- struct GoStart_return r;
-
- // Use Go to start 4 goroutines each of which handles 1/4 of the
- // board.
- r = GoStart(0, x, y, 0, x / 2, 0, y / 2, a, n);
- assert(r.r0 == 0 && r.r1 == 100); // test multiple returns
- r = GoStart(1, x, y, x / 2, x, 0, y / 2, a, n);
- assert(r.r0 == 1 && r.r1 == 101); // test multiple returns
- GoStart(2, x, y, 0, x / 2, y / 2, y, a, n);
- GoStart(3, x, y, x / 2, x, y / 2, y, a, n);
- GoWait(0);
- GoWait(1);
- GoWait(2);
- GoWait(3);
-}
-
-// The actual computation. This is called in parallel.
-void
-DoStep(int xdim, int ydim, int xstart, int xend, int ystart, int yend, int *a, int *n)
-{
- int x, y, c, i, j;
-
- for(x = xstart; x < xend; x++) {
- for(y = ystart; y < yend; y++) {
- c = 0;
- for(i = -1; i <= 1; i++) {
- for(j = -1; j <= 1; j++) {
- if(x+i >= 0 && x+i < xdim &&
- y+j >= 0 && y+j < ydim &&
- (i != 0 || j != 0))
- c += a[(x+i)*xdim + (y+j)] != 0;
- }
- }
- if(c == 3 || (c == 2 && a[x*xdim + y] != 0))
- n[x*xdim + y] = 1;
- else
- n[x*xdim + y] = 0;
- }
- }
-}
diff --git a/misc/cgo/life/golden.out b/misc/cgo/life/golden.out
deleted file mode 100644
index 539d2106d..000000000
--- a/misc/cgo/life/golden.out
+++ /dev/null
@@ -1,17 +0,0 @@
-* life
-
-
- XXX XXX
-
-
-
-
-
-
-
- XXX XXX
-
-
-
-
-
diff --git a/misc/cgo/life/life.go b/misc/cgo/life/life.go
deleted file mode 100644
index ec000ce3a..000000000
--- a/misc/cgo/life/life.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2010 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 life
-
-// #include "life.h"
-import "C"
-
-import "unsafe"
-
-func Run(gen, x, y int, a []int) {
- n := make([]int, x*y)
- for i := 0; i < gen; i++ {
- C.Step(C.int(x), C.int(y), (*C.int)(unsafe.Pointer(&a[0])), (*C.int)(unsafe.Pointer(&n[0])))
- copy(a, n)
- }
-}
-
-// Keep the channels visible from Go.
-var chans [4]chan bool
-
-//export GoStart
-// Double return value is just for testing.
-func GoStart(i, xdim, ydim, xstart, xend, ystart, yend C.int, a *C.int, n *C.int) (int, int) {
- c := make(chan bool, int(C.MYCONST))
- go func() {
- C.DoStep(xdim, ydim, xstart, xend, ystart, yend, a, n)
- c <- true
- }()
- chans[i] = c
- return int(i), int(i + 100)
-}
-
-//export GoWait
-func GoWait(i C.int) {
- <-chans[i]
- chans[i] = nil
-}
diff --git a/misc/cgo/life/life.h b/misc/cgo/life/life.h
deleted file mode 100644
index b2011b25f..000000000
--- a/misc/cgo/life/life.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2010 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.
-
-extern void Step(int, int, int *, int *);
-extern void DoStep(int, int, int, int, int, int, int *, int *);
-extern const int MYCONST;
diff --git a/misc/cgo/life/main.go b/misc/cgo/life/main.go
deleted file mode 100644
index 9cfed434b..000000000
--- a/misc/cgo/life/main.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2010 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.
-
-// Run the game of life in C using Go for parallelization.
-
-package main
-
-import (
- "flag"
- "fmt"
- "life"
-)
-
-const MAXDIM = 100
-
-var dim = flag.Int("dim", 16, "board dimensions")
-var gen = flag.Int("gen", 10, "generations")
-
-func main() {
- flag.Parse()
-
- var a [MAXDIM * MAXDIM]int
- for i := 2; i < *dim; i += 8 {
- for j := 2; j < *dim-3; j += 8 {
- for y := 0; y < 3; y++ {
- a[i**dim+j+y] = 1
- }
- }
- }
-
- life.Run(*gen, *dim, *dim, a[:])
-
- for i := 0; i < *dim; i++ {
- for j := 0; j < *dim; j++ {
- if a[i**dim+j] == 0 {
- fmt.Print(" ")
- } else {
- fmt.Print("X")
- }
- }
- fmt.Print("\n")
- }
-}
diff --git a/misc/cgo/life/test.bash b/misc/cgo/life/test.bash
deleted file mode 100755
index 5c5fba1a9..000000000
--- a/misc/cgo/life/test.bash
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-# Copyright 2010 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.
-
-set -e
-gomake life
-echo '*' life >run.out
-./life >>run.out
-diff run.out golden.out
-gomake clean
diff --git a/misc/cgo/stdio/Makefile b/misc/cgo/stdio/Makefile
deleted file mode 100644
index 3f7a4c01c..000000000
--- a/misc/cgo/stdio/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2009 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.
-
-include ../../../src/Make.inc
-
-TARG=stdio
-CGOFILES=\
- file.go\
-
-CLEANFILES+=hello fib chain run.out
-
-include ../../../src/Make.pkg
-
-%: install %.go
- $(GC) $*.go
- $(LD) -o $@ $*.$O
diff --git a/misc/cgo/stdio/chain.go b/misc/cgo/stdio/chain.go
deleted file mode 100644
index c188b2dd9..000000000
--- a/misc/cgo/stdio/chain.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2009 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.
-
-// Pass numbers along a chain of threads.
-
-package main
-
-import (
- "runtime"
- "stdio"
- "strconv"
-)
-
-const N = 10
-const R = 5
-
-func link(left chan<- int, right <-chan int) {
- // Keep the links in dedicated operating system
- // threads, so that this program tests coordination
- // between pthreads and not just goroutines.
- runtime.LockOSThread()
- for {
- v := <-right
- stdio.Stdout.WriteString(strconv.Itoa(v) + "\n")
- left <- 1 + v
- }
-}
-
-func main() {
- leftmost := make(chan int)
- var left chan int
- right := leftmost
- for i := 0; i < N; i++ {
- left, right = right, make(chan int)
- go link(left, right)
- }
- for i := 0; i < R; i++ {
- right <- 0
- x := <-leftmost
- stdio.Stdout.WriteString(strconv.Itoa(x) + "\n")
- }
-}
diff --git a/misc/cgo/stdio/fib.go b/misc/cgo/stdio/fib.go
deleted file mode 100644
index c02e31fd8..000000000
--- a/misc/cgo/stdio/fib.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2009 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.
-
-// Compute Fibonacci numbers with two goroutines
-// that pass integers back and forth. No actual
-// concurrency, just threads and synchronization
-// and foreign code on multiple pthreads.
-
-package main
-
-import (
- "runtime"
- "stdio"
- "strconv"
-)
-
-func fibber(c, out chan int64, i int64) {
- // Keep the fibbers in dedicated operating system
- // threads, so that this program tests coordination
- // between pthreads and not just goroutines.
- runtime.LockOSThread()
-
- if i == 0 {
- c <- i
- }
- for {
- j := <-c
- stdio.Stdout.WriteString(strconv.Itoa64(j) + "\n")
- out <- j
- <-out
- i += j
- c <- i
- }
-}
-
-func main() {
- c := make(chan int64)
- out := make(chan int64)
- go fibber(c, out, 0)
- go fibber(c, out, 1)
- <-out
- for i := 0; i < 90; i++ {
- out <- 1
- <-out
- }
-}
diff --git a/misc/cgo/stdio/file.go b/misc/cgo/stdio/file.go
deleted file mode 100644
index 021cbf909..000000000
--- a/misc/cgo/stdio/file.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2009 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.
-
-/*
-A trivial example of wrapping a C library in Go.
-For a more complex example and explanation,
-see ../gmp/gmp.go.
-*/
-
-package stdio
-
-/*
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-char* greeting = "hello, world";
-*/
-import "C"
-import "unsafe"
-
-type File C.FILE
-
-var Stdout = (*File)(C.stdout)
-var Stderr = (*File)(C.stderr)
-
-// Test reference to library symbol.
-// Stdout and stderr are too special to be a reliable test.
-var myerr = C.sys_errlist
-
-func (f *File) WriteString(s string) {
- p := C.CString(s)
- C.fputs(p, (*C.FILE)(f))
- C.free(unsafe.Pointer(p))
- f.Flush()
-}
-
-func (f *File) Flush() {
- C.fflush((*C.FILE)(f))
-}
-
-var Greeting = C.GoString(C.greeting)
diff --git a/misc/cgo/stdio/golden.out b/misc/cgo/stdio/golden.out
deleted file mode 100644
index c0e496547..000000000
--- a/misc/cgo/stdio/golden.out
+++ /dev/null
@@ -1,150 +0,0 @@
-* hello
-hello, world
-* fib
-0
-1
-1
-2
-3
-5
-8
-13
-21
-34
-55
-89
-144
-233
-377
-610
-987
-1597
-2584
-4181
-6765
-10946
-17711
-28657
-46368
-75025
-121393
-196418
-317811
-514229
-832040
-1346269
-2178309
-3524578
-5702887
-9227465
-14930352
-24157817
-39088169
-63245986
-102334155
-165580141
-267914296
-433494437
-701408733
-1134903170
-1836311903
-2971215073
-4807526976
-7778742049
-12586269025
-20365011074
-32951280099
-53316291173
-86267571272
-139583862445
-225851433717
-365435296162
-591286729879
-956722026041
-1548008755920
-2504730781961
-4052739537881
-6557470319842
-10610209857723
-17167680177565
-27777890035288
-44945570212853
-72723460248141
-117669030460994
-190392490709135
-308061521170129
-498454011879264
-806515533049393
-1304969544928657
-2111485077978050
-3416454622906707
-5527939700884757
-8944394323791464
-14472334024676221
-23416728348467685
-37889062373143906
-61305790721611591
-99194853094755497
-160500643816367088
-259695496911122585
-420196140727489673
-679891637638612258
-1100087778366101931
-1779979416004714189
-2880067194370816120
-* chain
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
diff --git a/misc/cgo/stdio/hello.go b/misc/cgo/stdio/hello.go
deleted file mode 100644
index 58fc6d574..000000000
--- a/misc/cgo/stdio/hello.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2009 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 main
-
-import "stdio"
-
-func main() {
- stdio.Stdout.WriteString(stdio.Greeting + "\n")
-}
diff --git a/misc/cgo/stdio/test.bash b/misc/cgo/stdio/test.bash
deleted file mode 100755
index 82e3f7b45..000000000
--- a/misc/cgo/stdio/test.bash
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-# Copyright 2009 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.
-
-set -e
-gomake hello fib chain
-echo '*' hello >run.out
-./hello >>run.out
-echo '*' fib >>run.out
-./fib >>run.out
-echo '*' chain >>run.out
-./chain >>run.out
-diff run.out golden.out
-gomake clean
diff --git a/misc/cgo/test/Makefile b/misc/cgo/test/Makefile
deleted file mode 100644
index 43c45f416..000000000
--- a/misc/cgo/test/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2011 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.
-
-include ../../../src/Make.inc
-
-TARG=runtime/cgotest
-
-CGOFILES=\
- align.go\
- basic.go\
- callback.go\
- env.go\
- issue1222.go\
- issue1328.go\
- issue1560.go\
-
-CGO_OFILES=\
- callback_c.o\
-
-OFILES=\
- runtime.$O\
-
-include ../../../src/Make.pkg
diff --git a/misc/cgo/test/align.go b/misc/cgo/test/align.go
deleted file mode 100644
index 07ab9ef50..000000000
--- a/misc/cgo/test/align.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package cgotest
-
-/*
-#include <stdio.h>
-
-typedef unsigned char Uint8;
-typedef unsigned short Uint16;
-
-typedef enum {
- MOD1 = 0x0000,
- MODX = 0x8000
-} SDLMod;
-
-typedef enum {
- A = 1,
- B = 322,
- SDLK_LAST
-} SDLKey;
-
-typedef struct SDL_keysym {
- Uint8 scancode;
- SDLKey sym;
- SDLMod mod;
- Uint16 unicode;
-} SDL_keysym;
-
-typedef struct SDL_KeyboardEvent {
- Uint8 typ;
- Uint8 which;
- Uint8 state;
- SDL_keysym keysym;
-} SDL_KeyboardEvent;
-
-void makeEvent(SDL_KeyboardEvent *event) {
- unsigned char *p;
- int i;
-
- p = (unsigned char*)event;
- for (i=0; i<sizeof *event; i++) {
- p[i] = i;
- }
-}
-
-int same(SDL_KeyboardEvent* e, Uint8 typ, Uint8 which, Uint8 state, Uint8 scan, SDLKey sym, SDLMod mod, Uint16 uni) {
- return e->typ == typ && e->which == which && e->state == state && e->keysym.scancode == scan && e->keysym.sym == sym && e->keysym.mod == mod && e->keysym.unicode == uni;
-}
-
-void cTest(SDL_KeyboardEvent *event) {
- printf("C: %#x %#x %#x %#x %#x %#x %#x\n", event->typ, event->which, event->state,
- event->keysym.scancode, event->keysym.sym, event->keysym.mod, event->keysym.unicode);
- fflush(stdout);
-}
-
-*/
-import "C"
-
-import (
- "testing"
-)
-
-func testAlign(t *testing.T) {
- var evt C.SDL_KeyboardEvent
- C.makeEvent(&evt)
- if C.same(&evt, evt.typ, evt.which, evt.state, evt.keysym.scancode, evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode) == 0 {
- t.Error("*** bad alignment")
- C.cTest(&evt)
- t.Errorf("Go: %#x %#x %#x %#x %#x %#x %#x\n",
- evt.typ, evt.which, evt.state, evt.keysym.scancode,
- evt.keysym.sym, evt.keysym.mod, evt.keysym.unicode)
- t.Error(evt)
- }
-}
diff --git a/misc/cgo/test/basic.go b/misc/cgo/test/basic.go
deleted file mode 100644
index b9d0953bd..000000000
--- a/misc/cgo/test/basic.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2010 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.
-
-// Basic test cases for cgo.
-
-package cgotest
-
-/*
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-#define SHIFT(x, y) ((x)<<(y))
-#define KILO SHIFT(1, 10)
-
-enum E {
- Enum1 = 1,
- Enum2 = 2,
-};
-
-typedef unsigned char uuid_t[20];
-
-void uuid_generate(uuid_t x) {
- x[0] = 0;
-}
-
-struct S {
- int x;
-};
-
-extern enum E myConstFunc(struct S* const ctx, int const id, struct S **const filter);
-
-enum E myConstFunc(struct S *const ctx, int const id, struct S **const filter) { return 0; }
-
-// issue 1222
-typedef union {
- long align;
-} xxpthread_mutex_t;
-
-struct ibv_async_event {
- union {
- int x;
- } element;
-};
-
-struct ibv_context {
- xxpthread_mutex_t mutex;
-};
-*/
-import "C"
-import (
- "os"
- "testing"
- "unsafe"
-)
-
-const EINVAL = C.EINVAL /* test #define */
-
-var KILO = C.KILO
-
-func uuidgen() {
- var uuid C.uuid_t
- C.uuid_generate(&uuid[0])
-}
-
-func Size(name string) (int64, os.Error) {
- var st C.struct_stat
- p := C.CString(name)
- _, err := C.stat(p, &st)
- C.free(unsafe.Pointer(p))
- if err != nil {
- return 0, err
- }
- return int64(C.ulong(st.st_size)), nil
-}
-
-func Strtol(s string, base int) (int, os.Error) {
- p := C.CString(s)
- n, err := C.strtol(p, nil, C.int(base))
- C.free(unsafe.Pointer(p))
- return int(n), err
-}
-
-func Atol(s string) int {
- p := C.CString(s)
- n := C.atol(p)
- C.free(unsafe.Pointer(p))
- return int(n)
-}
-
-func testConst(t *testing.T) {
- C.myConstFunc(nil, 0, nil)
-}
-
-func testEnum(t *testing.T) {
- if C.Enum1 != 1 || C.Enum2 != 2 {
- t.Error("bad enum", C.Enum1, C.Enum2)
- }
-}
-
-func testAtol(t *testing.T) {
- l := Atol("123")
- if l != 123 {
- t.Error("Atol 123: ", l)
- }
-}
-
-func testErrno(t *testing.T) {
- n, err := Strtol("asdf", 123)
- if n != 0 || err != os.EINVAL {
- t.Error("Strtol: ", n, err)
- }
-}
-
-func testMultipleAssign(t *testing.T) {
- p := C.CString("234")
- n, m := C.strtol(p, nil, 345), C.strtol(p, nil, 10)
- if n != 0 || m != 234 {
- t.Fatal("Strtol x2: ", n, m)
- }
- C.free(unsafe.Pointer(p))
-}
-
-var (
- uint = (C.uint)(0)
- ulong C.ulong
- char C.char
-)
-
-type Context struct {
- ctx *C.struct_ibv_context
-}
diff --git a/misc/cgo/test/callback.go b/misc/cgo/test/callback.go
deleted file mode 100644
index 3edee9758..000000000
--- a/misc/cgo/test/callback.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package cgotest
-
-/*
-void callback(void *f);
-void callGoFoo(void) {
- extern void goFoo(void);
- goFoo();
-}
-*/
-import "C"
-
-import (
- "runtime"
- "testing"
- "unsafe"
-)
-
-// nestedCall calls into C, back into Go, and finally to f.
-func nestedCall(f func()) {
- // NOTE: Depends on representation of f.
- // callback(x) calls goCallback(x)
- C.callback(*(*unsafe.Pointer)(unsafe.Pointer(&f)))
-}
-
-//export goCallback
-func goCallback(p unsafe.Pointer) {
- (*(*func())(unsafe.Pointer(&p)))()
-}
-
-func testCallback(t *testing.T) {
- var x = false
- nestedCall(func() { x = true })
- if !x {
- t.Fatal("nestedCall did not call func")
- }
-}
-
-func testCallbackGC(t *testing.T) {
- nestedCall(runtime.GC)
-}
-
-func lockedOSThread() bool // in runtime.c
-
-func testCallbackPanic(t *testing.T) {
- // Make sure panic during callback unwinds properly.
- if lockedOSThread() {
- t.Fatal("locked OS thread on entry to TestCallbackPanic")
- }
- defer func() {
- s := recover()
- if s == nil {
- t.Fatal("did not panic")
- }
- if s.(string) != "callback panic" {
- t.Fatal("wrong panic:", s)
- }
- if lockedOSThread() {
- t.Fatal("locked OS thread on exit from TestCallbackPanic")
- }
- }()
- nestedCall(func() { panic("callback panic") })
- panic("nestedCall returned")
-}
-
-func testCallbackPanicLoop(t *testing.T) {
- // Make sure we don't blow out m->g0 stack.
- for i := 0; i < 100000; i++ {
- TestCallbackPanic(t)
- }
-}
-
-func testCallbackPanicLocked(t *testing.T) {
- runtime.LockOSThread()
- defer runtime.UnlockOSThread()
-
- if !lockedOSThread() {
- t.Fatal("runtime.LockOSThread didn't")
- }
- defer func() {
- s := recover()
- if s == nil {
- t.Fatal("did not panic")
- }
- if s.(string) != "callback panic" {
- t.Fatal("wrong panic:", s)
- }
- if !lockedOSThread() {
- t.Fatal("lost lock on OS thread after panic")
- }
- }()
- nestedCall(func() { panic("callback panic") })
- panic("nestedCall returned")
-}
-
-// Callback with zero arguments used to make the stack misaligned,
-// which broke the garbage collector and other things.
-func testZeroArgCallback(t *testing.T) {
- defer func() {
- s := recover()
- if s != nil {
- t.Fatal("panic during callback:", s)
- }
- }()
- C.callGoFoo()
-}
-
-//export goFoo
-func goFoo() {
- x := 1
- for i := 0; i < 10000; i++ {
- // variadic call mallocs + writes to
- variadic(x, x, x)
- if x != 1 {
- panic("bad x")
- }
- }
-}
-
-func variadic(x ...interface{}) {}
-
-func testBlocking(t *testing.T) {
- c := make(chan int)
- go func() {
- for i := 0; i < 10; i++ {
- c <- <-c
- }
- }()
- nestedCall(func() {
- for i := 0; i < 10; i++ {
- c <- i
- if j := <-c; j != i {
- t.Errorf("out of sync %d != %d", j, i)
- }
- }
- })
-}
diff --git a/misc/cgo/test/callback_c.c b/misc/cgo/test/callback_c.c
deleted file mode 100644
index 5983a5e11..000000000
--- a/misc/cgo/test/callback_c.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2011 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.
-
-#include <sys/types.h>
-#include "_cgo_export.h"
-
-void
-callback(void *f)
-{
- goCallback(f);
-}
diff --git a/misc/cgo/test/cgo_test.go b/misc/cgo/test/cgo_test.go
deleted file mode 100644
index 94fba15db..000000000
--- a/misc/cgo/test/cgo_test.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2011 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
-
-import "testing"
-
-// The actual test functions are in non-_test.go files
-// so that they can use cgo (import "C").
-// These wrappers are here for gotest to find.
-
-func TestAlign(t *testing.T) { testAlign(t) }
-func TestConst(t *testing.T) { testConst(t) }
-func TestEnum(t *testing.T) { testEnum(t) }
-func TestAtol(t *testing.T) { testAtol(t) }
-func TestErrno(t *testing.T) { testErrno(t) }
-func TestMultipleAssign(t *testing.T) { testMultipleAssign(t) }
-func TestCallback(t *testing.T) { testCallback(t) }
-func TestCallbackGC(t *testing.T) { testCallbackGC(t) }
-func TestCallbackPanic(t *testing.T) { testCallbackPanic(t) }
-func TestCallbackPanicLoop(t *testing.T) { testCallbackPanicLoop(t) }
-func TestCallbackPanicLocked(t *testing.T) { testCallbackPanicLocked(t) }
-func TestZeroArgCallback(t *testing.T) { testZeroArgCallback(t) }
-func TestBlocking(t *testing.T) { testBlocking(t) }
-func Test1328(t *testing.T) { test1328(t) }
-func TestParallelSleep(t *testing.T) { testParallelSleep(t) }
-func TestSetEnv(t *testing.T) { testSetEnv(t) }
diff --git a/misc/cgo/test/env.go b/misc/cgo/test/env.go
deleted file mode 100644
index 1fb4e684c..000000000
--- a/misc/cgo/test/env.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2011 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
-
-/*
-#include <stdlib.h>
-*/
-import "C"
-import (
- "os"
- "testing"
- "unsafe"
-)
-
-// This is really an os package test but here for convenience.
-func testSetEnv(t *testing.T) {
- const key = "CGO_OS_TEST_KEY"
- const val = "CGO_OS_TEST_VALUE"
- os.Setenv(key, val)
- keyc := C.CString(key)
- defer C.free(unsafe.Pointer(keyc))
- v := C.getenv(keyc)
- if v == (*C.char)(unsafe.Pointer(uintptr(0))) {
- t.Fatal("getenv returned NULL")
- }
- vs := C.GoString(v)
- if vs != val {
- t.Fatalf("getenv() = %q; want %q", vs, val)
- }
-}
diff --git a/misc/cgo/test/issue1222.go b/misc/cgo/test/issue1222.go
deleted file mode 100644
index c396a0c41..000000000
--- a/misc/cgo/test/issue1222.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2010 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.
-
-// This file contains test cases for cgo.
-
-package cgotest
-
-/*
-// issue 1222
-typedef union {
- long align;
-} xxpthread_mutex_t;
-
-struct ibv_async_event {
- union {
- int x;
- } element;
-};
-
-struct ibv_context {
- xxpthread_mutex_t mutex;
-};
-*/
-import "C"
-
-type AsyncEvent struct {
- event C.struct_ibv_async_event
-}
diff --git a/misc/cgo/test/issue1328.go b/misc/cgo/test/issue1328.go
deleted file mode 100644
index e01207dd9..000000000
--- a/misc/cgo/test/issue1328.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2011 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
-
-import "testing"
-
-// extern void BackIntoGo(void);
-// void IntoC() { BackIntoGo(); }
-import "C"
-
-//export BackIntoGo
-func BackIntoGo() {
- x := 1
-
- for i := 0; i < 10000; i++ {
- xvariadic(x)
- if x != 1 {
- panic("x is not 1?")
- }
- }
-}
-
-func xvariadic(x ...interface{}) {
-}
-
-func test1328(t *testing.T) {
- C.IntoC()
-}
diff --git a/misc/cgo/test/issue1560.go b/misc/cgo/test/issue1560.go
deleted file mode 100644
index e534cce47..000000000
--- a/misc/cgo/test/issue1560.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2011 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
-
-/*
-#include <unistd.h>
-
-extern void BackgroundSleep(int);
-void twoSleep(int n) {
- BackgroundSleep(n);
- sleep(n);
-}
-*/
-import "C"
-
-import (
- "testing"
- "time"
-)
-
-var sleepDone = make(chan bool)
-
-func parallelSleep(n int) {
- C.twoSleep(C.int(n))
- <-sleepDone
-}
-
-//export BackgroundSleep
-func BackgroundSleep(n int) {
- go func() {
- C.sleep(C.uint(n))
- sleepDone <- true
- }()
-}
-
-func testParallelSleep(t *testing.T) {
- dt := -time.Nanoseconds()
- parallelSleep(1)
- dt += time.Nanoseconds()
- // bug used to run sleeps in serial, producing a 2-second delay.
- if dt >= 1.3e9 {
- t.Fatalf("parallel 1-second sleeps slept for %f seconds", float64(dt)/1e9)
- }
-}
diff --git a/misc/cgo/test/runtime.c b/misc/cgo/test/runtime.c
deleted file mode 100644
index e087c7622..000000000
--- a/misc/cgo/test/runtime.c
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2011 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.
-
-// Expose some runtime functions for testing.
-
-typedef char bool;
-
-bool runtime·lockedOSThread(void);
-
-static void
-FLUSH(void*)
-{
-}
-
-void
-·lockedOSThread(bool b)
-{
- b = runtime·lockedOSThread();
- FLUSH(&b);
-}