[swift-users] abs() Bug?

Stephen Canon scanon at apple.com
Tue Dec 12 16:11:10 CST 2017


Please note that silently returning an incorrect value instead of crashing is the exact opposite of “safety” as understood in Swift.

(These should all crash, and as others have reported, they do in my environment. If you can reproduce abs(Int32.min), please report a bug with your swift compiler version and any other environmental details).

– Steve

> On Dec 12, 2017, at 3:06 PM, C. Keith Ray via swift-users <swift-users at swift.org> wrote:
> 
> Should these be consistent? 
> 
> All crashing or none crashing?
> 
> print(abs(Int8.min)) // crash
> 
> print(abs(Int16.min)) // crash
> 
> print(abs(Int32.min)) // prints -2147483648
> 
> print(abs(Int64.min)) // crash
> 
> Should this be reported by Radar or another mechanism?
> 
> I'm using this as a replacement:
> 
> func safeAbs<T: SignedInteger & FixedWidthInteger>(_ i: T) -> T {
>     if i >= 0 {
>         return i
>     } else if i == T.min { // can't negate this value
>         // return i   // unconverted, violates postcondition, assert(result >= 0)
>         // return 0   // or return an arbitrary "safe" value
>         return -(1+i) // or return approximately the right value
>     } else {
>         return -i
>     }
> }
> 
> print(safeAbs(Int8.min)) // prints 127 
> print(safeAbs(Int16.min)) // prints 32767
> print(safeAbs(Int32.min)) // prints 2147483647
> print(safeAbs(Int64.min)) // prints 9223372036854775807
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20171212/2408c7c2/attachment.html>


More information about the swift-users mailing list