1// run
2
3// Copyright 2016 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package main
8
9var out int
10var zero int
11
12func main() {
13	wantPanic("test1", func() {
14		out = 1 / zero
15	})
16	wantPanic("test2", func() {
17		_ = 1 / zero
18	})
19	wantPanic("test3", func() {
20		v := 0
21		_ = 1 / v
22	})
23	wantPanic("test4", func() { divby(0) })
24}
25
26func wantPanic(test string, fn func()) {
27	defer func() {
28		if e := recover(); e == nil {
29			panic(test + ": expected panic")
30		}
31	}()
32	fn()
33}
34
35//go:noinline
36func divby(v int) {
37	_ = 1 / v
38}
39