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@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@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to