Commit cf9f3804 authored by Russ Cox's avatar Russ Cox

gc: unsafe.Alignof, unsafe.Offsetof, unsafe.Sizeof now return uintptr

R=ken2
CC=golang-dev
https://golang.org/cl/4640045
parent b96ff845
...@@ -103,9 +103,9 @@ char *unsafeimport = ...@@ -103,9 +103,9 @@ char *unsafeimport =
"package unsafe\n" "package unsafe\n"
"import runtime \"runtime\"\n" "import runtime \"runtime\"\n"
"type \"\".Pointer uintptr\n" "type \"\".Pointer uintptr\n"
"func \"\".Offsetof (? any) int\n" "func \"\".Offsetof (? any) uintptr\n"
"func \"\".Sizeof (? any) int\n" "func \"\".Sizeof (? any) uintptr\n"
"func \"\".Alignof (? any) int\n" "func \"\".Alignof (? any) uintptr\n"
"func \"\".Typeof (i interface { }) interface { }\n" "func \"\".Typeof (i interface { }) interface { }\n"
"func \"\".Reflect (i interface { }) (typ interface { }, addr \"\".Pointer)\n" "func \"\".Reflect (i interface { }) (typ interface { }, addr \"\".Pointer)\n"
"func \"\".Unreflect (typ interface { }, addr \"\".Pointer) interface { }\n" "func \"\".Unreflect (typ interface { }, addr \"\".Pointer) interface { }\n"
......
...@@ -92,6 +92,6 @@ ret: ...@@ -92,6 +92,6 @@ ret:
mpmovecfix(val.u.xval, v); mpmovecfix(val.u.xval, v);
n = nod(OLITERAL, N, N); n = nod(OLITERAL, N, N);
n->val = val; n->val = val;
n->type = types[TINT]; n->type = types[TUINTPTR];
return n; return n;
} }
...@@ -10,9 +10,11 @@ package PACKAGE ...@@ -10,9 +10,11 @@ package PACKAGE
type Pointer uintptr // not really; filled in by compiler type Pointer uintptr // not really; filled in by compiler
func Offsetof(any) int // return types here are ignored; see unsafe.c
func Sizeof(any) int func Offsetof(any) uintptr
func Alignof(any) int func Sizeof(any) uintptr
func Alignof(any) uintptr
func Typeof(i interface{}) (typ interface{}) func Typeof(i interface{}) (typ interface{})
func Reflect(i interface{}) (typ interface{}, addr Pointer) func Reflect(i interface{}) (typ interface{}, addr Pointer)
func Unreflect(typ interface{}, addr Pointer) (ret interface{}) func Unreflect(typ interface{}, addr Pointer) (ret interface{})
......
...@@ -367,7 +367,7 @@ func decComplex64(i *decInstr, state *decoderState, p unsafe.Pointer) { ...@@ -367,7 +367,7 @@ func decComplex64(i *decInstr, state *decoderState, p unsafe.Pointer) {
p = *(*unsafe.Pointer)(p) p = *(*unsafe.Pointer)(p)
} }
storeFloat32(i, state, p) storeFloat32(i, state, p)
storeFloat32(i, state, unsafe.Pointer(uintptr(p)+uintptr(unsafe.Sizeof(float32(0))))) storeFloat32(i, state, unsafe.Pointer(uintptr(p)+unsafe.Sizeof(float32(0))))
} }
// decComplex128 decodes a pair of unsigned integers, treats them as a // decComplex128 decodes a pair of unsigned integers, treats them as a
......
...@@ -11,7 +11,7 @@ import ( ...@@ -11,7 +11,7 @@ import (
"unsafe" "unsafe"
) )
const uint64Size = unsafe.Sizeof(uint64(0)) const uint64Size = int(unsafe.Sizeof(uint64(0)))
// encoderState is the global execution state of an instance of the encoder. // encoderState is the global execution state of an instance of the encoder.
// Field numbers are delta encoded and always increase. The field // Field numbers are delta encoded and always increase. The field
......
...@@ -11,7 +11,6 @@ import ( ...@@ -11,7 +11,6 @@ import (
"encoding/binary" "encoding/binary"
"hash" "hash"
"os" "os"
"unsafe"
) )
type ( type (
...@@ -102,31 +101,31 @@ func (s *sum64a) Write(data []byte) (int, os.Error) { ...@@ -102,31 +101,31 @@ func (s *sum64a) Write(data []byte) (int, os.Error) {
return len(data), nil return len(data), nil
} }
func (s *sum32) Size() int { return unsafe.Sizeof(*s) } func (s *sum32) Size() int { return 4 }
func (s *sum32a) Size() int { return unsafe.Sizeof(*s) } func (s *sum32a) Size() int { return 4 }
func (s *sum64) Size() int { return unsafe.Sizeof(*s) } func (s *sum64) Size() int { return 8 }
func (s *sum64a) Size() int { return unsafe.Sizeof(*s) } func (s *sum64a) Size() int { return 8 }
func (s *sum32) Sum() []byte { func (s *sum32) Sum() []byte {
a := make([]byte, unsafe.Sizeof(*s)) a := make([]byte, 4)
binary.BigEndian.PutUint32(a, uint32(*s)) binary.BigEndian.PutUint32(a, uint32(*s))
return a return a
} }
func (s *sum32a) Sum() []byte { func (s *sum32a) Sum() []byte {
a := make([]byte, unsafe.Sizeof(*s)) a := make([]byte, 4)
binary.BigEndian.PutUint32(a, uint32(*s)) binary.BigEndian.PutUint32(a, uint32(*s))
return a return a
} }
func (s *sum64) Sum() []byte { func (s *sum64) Sum() []byte {
a := make([]byte, unsafe.Sizeof(*s)) a := make([]byte, 8)
binary.BigEndian.PutUint64(a, uint64(*s)) binary.BigEndian.PutUint64(a, uint64(*s))
return a return a
} }
func (s *sum64a) Sum() []byte { func (s *sum64a) Sum() []byte {
a := make([]byte, unsafe.Sizeof(*s)) a := make([]byte, 8)
binary.BigEndian.PutUint64(a, uint64(*s)) binary.BigEndian.PutUint64(a, uint64(*s))
return a return a
} }
...@@ -827,7 +827,7 @@ func (t *commonType) runtimeType() *runtime.Type { ...@@ -827,7 +827,7 @@ func (t *commonType) runtimeType() *runtime.Type {
i runtime.Type i runtime.Type
ct commonType ct commonType
} }
return (*runtime.Type)(unsafe.Pointer(uintptr(unsafe.Pointer(t)) - uintptr(unsafe.Offsetof(rt.ct)))) return (*runtime.Type)(unsafe.Pointer(uintptr(unsafe.Pointer(t)) - unsafe.Offsetof(rt.ct)))
} }
// PtrTo returns the pointer type with element t. // PtrTo returns the pointer type with element t.
...@@ -888,7 +888,7 @@ func PtrTo(t Type) Type { ...@@ -888,7 +888,7 @@ func PtrTo(t Type) Type {
p.uncommonType = nil p.uncommonType = nil
p.ptrToThis = nil p.ptrToThis = nil
p.elem = (*runtime.Type)(unsafe.Pointer(uintptr(unsafe.Pointer(ct)) - uintptr(unsafe.Offsetof(rt.ptrType)))) p.elem = (*runtime.Type)(unsafe.Pointer(uintptr(unsafe.Pointer(ct)) - unsafe.Offsetof(rt.ptrType)))
ptrMap.m[ct] = p ptrMap.m[ct] = p
ptrMap.Unlock() ptrMap.Unlock()
......
...@@ -11,7 +11,7 @@ import ( ...@@ -11,7 +11,7 @@ import (
"unsafe" "unsafe"
) )
const ptrSize = uintptr(unsafe.Sizeof((*byte)(nil))) const ptrSize = unsafe.Sizeof((*byte)(nil))
const cannotSet = "cannot set value obtained from unexported struct field" const cannotSet = "cannot set value obtained from unexported struct field"
// TODO: This will have to go away when // TODO: This will have to go away when
......
...@@ -229,7 +229,7 @@ runtime·allocmcache(void) ...@@ -229,7 +229,7 @@ runtime·allocmcache(void)
return c; return c;
} }
int32 runtime·sizeof_C_MStats = sizeof(MStats); uintptr runtime·sizeof_C_MStats = sizeof(MStats);
#define MaxArena32 (2U<<30) #define MaxArena32 (2U<<30)
......
...@@ -52,7 +52,7 @@ type MemStatsType struct { ...@@ -52,7 +52,7 @@ type MemStatsType struct {
} }
} }
var sizeof_C_MStats int // filled in by malloc.goc var sizeof_C_MStats uintptr // filled in by malloc.goc
func init() { func init() {
if sizeof_C_MStats != unsafe.Sizeof(MemStats) { if sizeof_C_MStats != unsafe.Sizeof(MemStats) {
......
...@@ -43,7 +43,7 @@ func TestCPUProfile(t *testing.T) { ...@@ -43,7 +43,7 @@ func TestCPUProfile(t *testing.T) {
// Convert []byte to []uintptr. // Convert []byte to []uintptr.
bytes := prof.Bytes() bytes := prof.Bytes()
val := *(*[]uintptr)(unsafe.Pointer(&bytes)) val := *(*[]uintptr)(unsafe.Pointer(&bytes))
val = val[:len(bytes)/unsafe.Sizeof(uintptr(0))] val = val[:len(bytes)/int(unsafe.Sizeof(uintptr(0)))]
if len(val) < 10 { if len(val) < 10 {
t.Fatalf("profile too short: %#x", val) t.Fatalf("profile too short: %#x", val)
......
...@@ -249,7 +249,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr ...@@ -249,7 +249,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
childerror: childerror:
// send error code on pipe // send error code on pipe
RawSyscall(SYS_WRITE, uintptr(pipe), uintptr(unsafe.Pointer(&err1)), uintptr(unsafe.Sizeof(err1))) RawSyscall(SYS_WRITE, uintptr(pipe), uintptr(unsafe.Pointer(&err1)), unsafe.Sizeof(err1))
for { for {
RawSyscall(SYS_EXIT, 253, 0, 0) RawSyscall(SYS_EXIT, 253, 0, 0)
} }
...@@ -343,10 +343,10 @@ func forkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err int) { ...@@ -343,10 +343,10 @@ func forkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err int) {
// Read child error status from pipe. // Read child error status from pipe.
Close(p[1]) Close(p[1])
n, err = read(p[0], (*byte)(unsafe.Pointer(&err1)), unsafe.Sizeof(err1)) n, err = read(p[0], (*byte)(unsafe.Pointer(&err1)), int(unsafe.Sizeof(err1)))
Close(p[0]) Close(p[0])
if err != 0 || n != 0 { if err != 0 || n != 0 {
if n == unsafe.Sizeof(err1) { if n == int(unsafe.Sizeof(err1)) {
err = int(err1) err = int(err1)
} }
if err == 0 { if err == 0 {
......
...@@ -155,7 +155,7 @@ func Sleep(ns int64) (errno int) { ...@@ -155,7 +155,7 @@ func Sleep(ns int64) (errno int) {
//sys connect(s int, addr uintptr, addrlen _Socklen) (errno int) //sys connect(s int, addr uintptr, addrlen _Socklen) (errno int)
//sysnb socket(domain int, typ int, proto int) (fd int, errno int) //sysnb socket(domain int, typ int, proto int) (fd int, errno int)
//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int) //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int)
//sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) //sys setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int)
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
//sys Shutdown(s int, how int) (errno int) //sys Shutdown(s int, how int) (errno int)
...@@ -451,7 +451,7 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno ...@@ -451,7 +451,7 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno
// Translate "kern.hostname" to []_C_int{0,1,2,3}. // Translate "kern.hostname" to []_C_int{0,1,2,3}.
func nametomib(name string) (mib []_C_int, errno int) { func nametomib(name string) (mib []_C_int, errno int) {
const siz = uintptr(unsafe.Sizeof(mib[0])) const siz = unsafe.Sizeof(mib[0])
// NOTE(rsc): It seems strange to set the buffer to have // NOTE(rsc): It seems strange to set the buffer to have
// size CTL_MAXNAME+2 but use only CTL_MAXNAME // size CTL_MAXNAME+2 but use only CTL_MAXNAME
......
...@@ -472,7 +472,7 @@ func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (errno int) { ...@@ -472,7 +472,7 @@ func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (errno int) {
} }
func SetsockoptString(fd, level, opt int, s string) (errno int) { func SetsockoptString(fd, level, opt int, s string) (errno int) {
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&[]byte(s)[0])), len(s)) return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&[]byte(s)[0])), uintptr(len(s)))
} }
func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, errno int) { func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, errno int) {
......
...@@ -146,8 +146,8 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -146,8 +146,8 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
return return
} }
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, errno = socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, errno = socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
return return
} }
...@@ -190,13 +190,13 @@ func Shutdown(s, how int) (errno int) { ...@@ -190,13 +190,13 @@ func Shutdown(s, how int) (errno int) {
} }
func Fstatfs(fd int, buf *Statfs_t) (errno int) { func Fstatfs(fd int, buf *Statfs_t) (errno int) {
_, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Sizeof(*buf)), uintptr(unsafe.Pointer(buf))) _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
errno = int(e1) errno = int(e1)
return return
} }
func Statfs(path string, buf *Statfs_t) (errno int) { func Statfs(path string, buf *Statfs_t) (errno int) {
_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Sizeof(*buf)), uintptr(unsafe.Pointer(buf))) _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(StringBytePtr(path))), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
errno = int(e1) errno = int(e1)
return return
} }
......
...@@ -42,7 +42,7 @@ package syscall ...@@ -42,7 +42,7 @@ package syscall
//sysnb getgroups(n int, list *_Gid_t) (nn int, errno int) //sysnb getgroups(n int, list *_Gid_t) (nn int, errno int)
//sysnb setgroups(n int, list *_Gid_t) (errno int) //sysnb setgroups(n int, list *_Gid_t) (errno int)
//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int) //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int)
//sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) //sys setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int)
//sysnb socket(domain int, typ int, proto int) (fd int, errno int) //sysnb socket(domain int, typ int, proto int) (fd int, errno int)
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int) (errno int) //sysnb socketpair(domain int, typ int, proto int, fd *[2]int) (errno int)
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
......
...@@ -71,7 +71,7 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, errno int) ...@@ -71,7 +71,7 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, errno int)
//sysnb getgroups(n int, list *_Gid_t) (nn int, errno int) = SYS_GETGROUPS32 //sysnb getgroups(n int, list *_Gid_t) (nn int, errno int) = SYS_GETGROUPS32
//sysnb setgroups(n int, list *_Gid_t) (errno int) = SYS_SETGROUPS32 //sysnb setgroups(n int, list *_Gid_t) (errno int) = SYS_SETGROUPS32
//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int) //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int)
//sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) //sys setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int)
//sysnb socket(domain int, typ int, proto int) (fd int, errno int) //sysnb socket(domain int, typ int, proto int) (fd int, errno int)
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) //sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
......
...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -85,7 +85,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
...@@ -1169,7 +1169,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -1169,7 +1169,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
...@@ -895,7 +895,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn ...@@ -895,7 +895,7 @@ func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errn
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) { func setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int) {
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
errno = int(e1) errno = int(e1)
return return
......
// $G $D/$F.go
// 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 main
import "unsafe"
type T struct {
X int
}
var t T
func isUintptr(uintptr) {}
func main() {
isUintptr(unsafe.Sizeof(t))
isUintptr(unsafe.Alignof(t))
isUintptr(unsafe.Offsetof(t.X))
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment