diff options
author | Keith Randall <khr@golang.org> | 2020-12-09 08:27:54 -0800 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2020-12-10 03:18:00 +0000 |
commit | 6c64b6db6802818dd9a4789cdd564f19b70b6b4c (patch) | |
tree | 8775d945bf2860c57a48c7145e91768045c3f6ea /test | |
parent | 89f465c2b59cea32c10ed69eaa07e17f85c910e2 (diff) | |
download | go-6c64b6db6802818dd9a4789cdd564f19b70b6b4c.tar.gz go-6c64b6db6802818dd9a4789cdd564f19b70b6b4c.zip |
cmd/compile: don't constant fold divide by zero
It just makes the compiler crash. Oops.
Fixes #43099
Change-Id: Id996c14799c1a5d0063ecae3b8770568161c2440
Reviewed-on: https://go-review.googlesource.com/c/go/+/276652
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/fixedbugs/issue43099.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/fixedbugs/issue43099.go b/test/fixedbugs/issue43099.go new file mode 100644 index 0000000000..16f18e5f96 --- /dev/null +++ b/test/fixedbugs/issue43099.go @@ -0,0 +1,34 @@ +// compile + +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Check to make sure we don't try to constant fold a divide by zero. +// This is a tricky test, as we need a value that's not recognized as 0 +// until lowering (otherwise it gets handled in a different path). + +package p + +func f() { + var i int + var s string + for i > 0 { + _ = s[0] + i++ + } + + var c chan int + c <- 1 % i +} + +func f32() uint32 { + s := "\x00\x00\x00\x00" + c := uint32(s[0]) | uint32(s[1])<<8 | uint32(s[2])<<16 | uint32(s[3])<<24 + return 1 / c +} +func f64() uint64 { + s := "\x00\x00\x00\x00\x00\x00\x00\x00" + c := uint64(s[0]) | uint64(s[1])<<8 | uint64(s[2])<<16 | uint64(s[3])<<24 | uint64(s[4])<<32 | uint64(s[5])<<40 | uint64(s[6])<<48 | uint64(s[7])<<56 + return 1 / c +} |