Summary

Negative zero literals are miscompiled

Metadata

Description

All versions of the Chicken compiler and interpreter (since 5.0 at least) treat the Scheme literal value `-0.0` incorrectly. This inexact value is distinct from `0.0` in certain ways: for example, `(/ 1.0 0.0) => +inf.0`, but `(/ 1.0 -0.0) => -inf.0`.

Unfortunately, C treats the expression `-0.0` as a synonym for `0.0`, because in C a prefixed minus sign is always the negation operator and not part of a literal. So generating `-0.0` as the C representation of Scheme `-0.0` is incorrect. Instead, the C expression `(1.0 / (-INFINITY))`, where `INFINITY` is a constant from `math.h`, should be generated instead.

Changes and comments

[2023-11-06 23:34:25 UTC] felix changed milestone from someday to 6.0.0

[2023-11-07 18:18:10 UTC] felix wrote:

Is this still relevant? I can't seem to reproduce the problem.

[2023-11-08 13:12:21 UTC] felix changed status from new to closed

[2023-11-08 13:12:21 UTC] felix set resolution to worksforme