From: Robert Griesemer
Date: Fri, 19 Oct 2012 17:12:09 +0000 (-0700)
Subject: go spec: constant divisors must not be zero
X-Git-Tag: go1.1rc2~2097
X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ddddd39fc8b7ab073044e0fe8ad7c0eb912758b9;p=gostls13.git
go spec: constant divisors must not be zero
Both gc and gccgo always checked this for constant
expressions but the spec only mentions run-time
exceptions.
This CL also requires that constant divisors
must not be zero in non-constant integer expressions:
This is consistent with the spirit of the most
recent changes and it is consistent with constant
expressions. We don't want to specify the effect for
non-integer expressions (f/0.0 where f is a float or
complex number) because there the result f/g is not
further specified if a non-constant g is 0.
R=r, rsc, iant, ken, andybalholm, iant
CC=golang-dev
https://golang.org/cl/6710045
---
diff --git a/doc/go_spec.html b/doc/go_spec.html
index 45dd1e2939..a6586362ef 100644
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -3001,7 +3001,8 @@ int64 -9223372036854775808
-If the divisor is zero, a run-time panic occurs.
+If the divisor is a constant, it must not be zero.
+If the divisor is zero at run time, a run-time panic occurs.
If the dividend is positive and the divisor is a constant power of 2,
the division may be replaced by a right shift, and computing the remainder may
be replaced by a bitwise AND operation:
@@ -3692,6 +3693,14 @@ const Huge = 1 << 100
const Four int8 = Huge >> 98
+
+The divisor of a constant division or remainder operation must not be zero:
+
+
+
+3.14 / 0.0 // illegal: division by zero
+
+
The values of typed constants must always be accurately representable as values
of the constant type. The following constant expressions are illegal:
@@ -4759,8 +4768,6 @@ the function completes.
(See also the section on handling panics.)
-
-
lock(l)
defer unlock(l) // unlocking happens before surrounding function returns