github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/misc/cgo/errors/malloc.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Test that C.malloc does not return nil.
     6  
     7  package main
     8  
     9  // #include <stdlib.h>
    10  import "C"
    11  
    12  import (
    13  	"fmt"
    14  	"runtime"
    15  )
    16  
    17  func main() {
    18  	var size C.size_t
    19  	size--
    20  
    21  	// The Dragonfly libc succeeds when asked to allocate
    22  	// 0xffffffffffffffff bytes, so pass a different value that
    23  	// causes it to fail.
    24  	if runtime.GOOS == "dragonfly" {
    25  		size = C.size_t(0x7fffffff << (32 * (^uintptr(0) >> 63)))
    26  	}
    27  
    28  	p := C.malloc(size)
    29  	if p == nil {
    30  		fmt.Println("malloc: C.malloc returned nil")
    31  		// Just exit normally--the test script expects this
    32  		// program to crash, so exiting normally indicates failure.
    33  	}
    34  }