From: Robert Griesemer Date: Wed, 14 Mar 2018 18:19:42 +0000 (-0700) Subject: math/big: add comment about internal assumptions on nat values X-Git-Tag: go1.11beta1~1208 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7d4d2cb686d2068a9a07dbde9f2a72c237c1f4a4;p=gostls13.git math/big: add comment about internal assumptions on nat values Change-Id: I7ed40507a019c0bf521ba748fc22c03d74bb17b7 Reviewed-on: https://go-review.googlesource.com/100719 Reviewed-by: Ian Lance Taylor --- diff --git a/src/math/big/nat.go b/src/math/big/nat.go index c1812e3544..436c108c96 100644 --- a/src/math/big/nat.go +++ b/src/math/big/nat.go @@ -5,6 +5,11 @@ // This file implements unsigned multi-precision integers (natural // numbers). They are the building blocks for the implementation // of signed integers, rationals, and floating-point numbers. +// +// Caution: This implementation relies on the function "alias" +// which assumes that (nat) slice capacities are never +// changed (no 3-operand slice expressions). If that +// changes, alias needs to be updated for correctness. package big @@ -352,6 +357,10 @@ func karatsuba(z, x, y nat) { } // alias reports whether x and y share the same base array. +// Note: alias assumes that the capacity of underlying arrays +// is never changed for nat values; i.e. that there are +// no 3-operand slice expressions in this code (or worse, +// reflect-based operations to the same effect). func alias(x, y nat) bool { return cap(x) > 0 && cap(y) > 0 && &x[0:cap(x)][cap(x)-1] == &y[0:cap(y)][cap(y)-1] }