google-research/dex-lang

Do unsigned remainder on unsigned types

Open

#1.211 aberto em 5 de fev. de 2023

Ver no GitHub
 (1 comment) (1 reaction) (0 assignees)Haskell (116 forks)batch import
buggood first issue

Métricas do repositório

Stars
 (1.681 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

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.

Guia do colaborador