Home | History | Annotate | Download | only in testprogcgo
      1 // Copyright 2015 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 package main
      6 
      7 import (
      8 	"fmt"
      9 	"runtime"
     10 )
     11 
     12 func init() {
     13 	register("Crash", Crash)
     14 }
     15 
     16 func test(name string) {
     17 	defer func() {
     18 		if x := recover(); x != nil {
     19 			fmt.Printf(" recovered")
     20 		}
     21 		fmt.Printf(" done\n")
     22 	}()
     23 	fmt.Printf("%s:", name)
     24 	var s *string
     25 	_ = *s
     26 	fmt.Print("SHOULD NOT BE HERE")
     27 }
     28 
     29 func testInNewThread(name string) {
     30 	c := make(chan bool)
     31 	go func() {
     32 		runtime.LockOSThread()
     33 		test(name)
     34 		c <- true
     35 	}()
     36 	<-c
     37 }
     38 
     39 func Crash() {
     40 	runtime.LockOSThread()
     41 	test("main")
     42 	testInNewThread("new-thread")
     43 	testInNewThread("second-new-thread")
     44 	test("main-again")
     45 }
     46