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
5package main
6
7import (
8	"fmt"
9	"runtime"
10)
11
12func init() {
13	register("Crash", Crash)
14}
15
16func 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
29func 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
39func Crash() {
40	runtime.LockOSThread()
41	test("main")
42	testInNewThread("new-thread")
43	testInNewThread("second-new-thread")
44	test("main-again")
45}
46