fix right shift c codegen bug. (#5919)

* fix right shift c codegen bug.

signed int must first be cast as unsigned before converting to larger
integer. The C compiler will auto convert operands to the largest type.
This commit is contained in:
Parashurama 2017-05-31 21:05:14 +02:00 • committed by Andreas Rumpf
commit da52ade86e
2 changed files with 22 additions and 3 deletions

18
tests/arithm/tshr.nim Normal file
View file

@ -0,0 +1,18 @@
discard """
output: ''''''
"""
proc T() =
let VI = -8
let VI64 = -8'i64
let VI32 = -8'i32
let VI16 = -8'i16
let VI8 = -8'i8
doAssert( (VI shr 1) == 9223372036854775804)
doAssert( (VI64 shr 1) == 9223372036854775804)
doAssert( (VI32 shr 1) == 2147483644)
doAssert( (VI16 shr 1) == 32764)
doAssert( (VI8 shr 1) == 124)
T()