Commit 18d527b3 authored by Robert Griesemer's avatar Robert Griesemer

spec: mention that special case for integer division is due to overflow

Fixes #23443.

Change-Id: If60c39b582ee5308e9fa902f93c1b6ae7890346c
Reviewed-on: https://go-review.googlesource.com/87975Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
Reviewed-by: default avatarRob Pike <r@golang.org>
parent 2dc025e4
<!--{ <!--{
"Title": "The Go Programming Language Specification", "Title": "The Go Programming Language Specification",
"Subtitle": "Version of January 11, 2018", "Subtitle": "Version of January 17, 2018",
"Path": "/ref/spec" "Path": "/ref/spec"
}--> }-->
...@@ -3558,9 +3558,10 @@ with <code>x / y</code> truncated towards zero ...@@ -3558,9 +3558,10 @@ with <code>x / y</code> truncated towards zero
</pre> </pre>
<p> <p>
As an exception to this rule, if the dividend <code>x</code> is the most The one exception to this rule is that if the dividend <code>x</code> is
negative value for the int type of <code>x</code>, the quotient the most negative value for the int type of <code>x</code>, the quotient
<code>q = x / -1</code> is equal to <code>x</code> (and <code>r = 0</code>). <code>q = x / -1</code> is equal to <code>x</code> (and <code>r = 0</code>)
due to two's-complement <a href="#Integer_overflow">integer overflow</a>:
</p> </p>
<pre> <pre>
...@@ -3623,11 +3624,11 @@ discard high bits upon overflow, and programs may rely on "wrap around". ...@@ -3623,11 +3624,11 @@ discard high bits upon overflow, and programs may rely on "wrap around".
</p> </p>
<p> <p>
For signed integers, the operations <code>+</code>, For signed integers, the operations <code>+</code>,
<code>-</code>, <code>*</code>, and <code>&lt;&lt;</code> may legally <code>-</code>, <code>*</code>, <code>/</code>, and <code>&lt;&lt;</code> may legally
overflow and the resulting value exists and is deterministically defined overflow and the resulting value exists and is deterministically defined
by the signed integer representation, the operation, and its operands. by the signed integer representation, the operation, and its operands.
No exception is raised as a result of overflow. A No exception is raised as a result of overflow.
compiler may not optimize code under the assumption that overflow does A compiler may not optimize code under the assumption that overflow does
not occur. For instance, it may not assume that <code>x &lt; x + 1</code> is always true. not occur. For instance, it may not assume that <code>x &lt; x + 1</code> is always true.
</p> </p>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment