google-research/dex-lang

Do unsigned remainder on unsigned types

Open

#1 211 ouverte le 5 févr. 2023

Voir sur GitHub
 (1 commentaire) (1 réaction) (0 assignés)Haskell (116 forks)batch import
buggood first issue

Métriques du dépôt

Stars
 (1 681 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

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.

Guide contributeur