The Racket repository
![]() 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. |
||
---|---|---|
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
appveyor.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2016 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This implies that you may link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular states that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.