Description
When optimizing code, I often run up against cases in which the compiler is missing a key fact. Sometimes it could but does not infer it; sometimes there’s no reasonable way for the compiler to know.
In those cases, there is nothing to do but drop to assembly. (In normal code you could write if !x { panic }
, but in many of these cases, that is prohibitively expense.)
I propose that we add unsafe.Assume. It accepts a boolean expression. The expression is typechecked but never evaluated. However, the compiler may assume that it evaluates to true when compiling other code.
I imagine the most common uses would be things like unsafe.Assume(p != nil)
, unsafe.Assume(0 <= i && i < len(s))
, and unsafe.Assume(x < 64)
, for nil checks, bounds checks, and shift amounts, respectively.