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:
parent
199f061ddc
commit
da52ade86e
2 changed files with 22 additions and 3 deletions
18
tests/arithm/tshr.nim
Normal file
18
tests/arithm/tshr.nim
Normal 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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue