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