From ddddd39fc8b7ab073044e0fe8ad7c0eb912758b9 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 19 Oct 2012 10:12:09 -0700 Subject: [PATCH] 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 --- doc/go_spec.html | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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
-- 
2.48.1