![]() Found with `-fsanitize=undefined`. The only changes that are potentially bug repairs involve some abuses of pointers that can end up misaligned (which is not an x86 issue, but might be on other platforms). Most of the changes involve casting a signed integer to unsigned, which effectively requests the usual two's complement behavior. Some undefined behavior still present: * floating-point operations that can divide by zero or coercions from `double` to `float` that can fail; * offset calculations such as `&SCHEME_CDR((Scheme_Object *)0x0)`, which are supposed to be written with `offsetof`, but using a NULL address composes better with macros. * unaligned operations in the JIT for x86 (which are ok, because they're platform-specific). Hints for using `-fsanitize=undefined`: * Add `-fsanitize=undefined` to both CPPFLAGS and LDFLAGS * Add `-fno-sanitize=alignment -fno-sanitize=null` to CPPFLAGS to disable those checks. * Add `-DSTACK_SAFETY_MARGIN=200000` to CPPFLAGS to avoid stack overflow due to large frames. * Use `--enable-noopt` so that the JIT compiles. |
||
---|---|---|
.. | ||
mzlib | ||
tests/racket | ||
info.rkt | ||
LICENSE.txt |