google-research/dex-lang

Do unsigned remainder on unsigned types

Open

#1211 aperta il 5 feb 2023

Vedi su GitHub
 (1 commento) (1 reazione) (0 assegnatari)Haskell (116 fork)batch import
buggood first issue

Metriche repository

Star
 (1681 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

Manifestation:

big = 2147483647
rem (big + 1) big
> 4294967295

Expected the answer to be 1.

(Note that big + 1 doesn't overflow the underlying Word32 -- it's just the rem operation messing up).

The cause is https://github.com/google-research/dex-lang/blob/c996e988d07f4bec0495136c9d4ca51bcb0c431c/src/lib/ImpToLLVM.hs#L614, which unconditionally emits a signed remainder instruction, regardless of whether the Dex type is meant to be signed or unsigned.

Guida contributor