mirror of https://github.com/golang/go.git
runtime: fix _cgo_allocate(0)
Fixes a SWIG bug reported off-list. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/155990043
This commit is contained in:
parent
87f51f1031
commit
685204747d
|
|
@ -39,6 +39,16 @@ callCgoAllocate(void)
|
|||
int i;
|
||||
struct { size_t n; void *ret; } a;
|
||||
List *l, *head, **tail;
|
||||
|
||||
// Make sure this doesn't crash.
|
||||
// And make sure it returns non-nil.
|
||||
a.n = 0;
|
||||
a.ret = 0;
|
||||
crosscall2(_cgo_allocate, &a, sizeof a);
|
||||
if(a.ret == 0) {
|
||||
fprintf(stderr, "callCgoAllocate: alloc 0 returned nil\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
head = 0;
|
||||
tail = &head;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,13 @@ callCgoAllocate(void)
|
|||
int i;
|
||||
List *l, *head, **tail;
|
||||
|
||||
// Make sure this doesn't crash.
|
||||
// And make sure it returns non-nil.
|
||||
if(_cgo_allocate(0) == 0) {
|
||||
fprintf(stderr, "callCgoAllocate: alloc 0 returned nil\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
head = 0;
|
||||
tail = &head;
|
||||
for(i=0; i<100; i++) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ import "unsafe"
|
|||
// Either we need to add types or we need to stop using it.
|
||||
|
||||
func _cgo_allocate_internal(len uintptr) unsafe.Pointer {
|
||||
if len == 0 {
|
||||
len = 1
|
||||
}
|
||||
ret := unsafe.Pointer(&make([]unsafe.Pointer, (len+ptrSize-1)/ptrSize)[0])
|
||||
c := new(cgomal)
|
||||
c.alloc = ret
|
||||
|
|
|
|||
Loading…
Reference in New Issue