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 45dd1e2..a658636 100644
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -3001,7 +3001,8 @@
 </pre>
 
 <p>
-If the divisor is zero, a <a href="#Run_time_panics">run-time panic</a> occurs.
+If the divisor is a <a href="#Constants">constant</a>, it must not be zero.
+If the divisor is zero at run time, a <a href="#Run_time_panics">run-time panic</a> 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:
@@ -3693,6 +3694,14 @@
 </pre>
 
 <p>
+The divisor of a constant division or remainder operation must not be zero:
+</p>
+
+<pre>
+3.14 / 0.0   // illegal: division by zero
+</pre>
+
+<p>
 The values of <i>typed</i> constants must always be accurately representable as values
 of the constant type. The following constant expressions are illegal:
 </p>
@@ -4759,8 +4768,6 @@
 (See also the section on <a href="#Handling_panics">handling panics</a>.)
 </p>
 
-</p>
-
 <pre>
 lock(l)
 defer unlock(l)  // unlocking happens before surrounding function returns