Source file
test/fixedbugs/issue80577.go
1
2
3
4
5
6
7
8
9
10
11
12
13 package main
14
15 import "math/bits"
16
17 var sink uint32
18
19
20 func use(x uint32) { sink = x }
21
22
23 func mul(a, b uint32) int64 {
24 p := a * b
25 use(p)
26 return int64(int32(p))
27 }
28
29
30 func div(a, b uint32) int64 {
31 p := a / b
32 use(p)
33 return int64(int32(p))
34 }
35
36
37 func rem(a, b uint32) int64 {
38 p := a % b
39 use(p)
40 return int64(int32(p))
41 }
42
43
44 func rot(a uint32, k int) int64 {
45 p := bits.RotateLeft32(a, k)
46 use(p)
47 return int64(int32(p))
48 }
49
50 func main() {
51 const want = -2147483648
52 if got := mul(0x8000, 0x10000); got != want {
53 println("mul: got", got, "want", want)
54 panic("bad mul")
55 }
56 if got := div(0x80000000, 1); got != want {
57 println("div: got", got, "want", want)
58 panic("bad div")
59 }
60 if got := rem(0x80000000, 0xffffffff); got != want {
61 println("rem: got", got, "want", want)
62 panic("bad rem")
63 }
64 if got := rot(1, 31); got != want {
65 println("rot: got", got, "want", want)
66 panic("bad rot")
67 }
68 }
69
View as plain text