The config script as it is now fails on gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
This is because one test did not include string.h before memcpy, and two other tests relied
on implicit function definitions -- in one test definitions are moved before the first use
and the second test is removed wholesale as it relies on undefined behavior and tests some
obscure (and ancient) gcc flavor segfault.
1. We don't normalize garbage collected entries.
Doing that created a false free bucket, so GETHASH and SETHASH stopped searching
for entry too early. Fixes#761.
2. MAPHASH does not map over garbate collected entries.
Previously MAPHASH did not call copy_entry, so it was always accessing key/val
even if they were recently garbage collected, effectively mapping over NIL in
the place of the collected value
3. HASH-TABLE-CONTENT had a similar issue to MAPHASH.
4. REMHASH did fill the hole, but didn't replace the moved entry with a free
bucket, moreover we've used the value to comptue the hash when computing the
distance function.
Moreover we introduce an optimization, where SETHASH first tries to fill a
garbage collected entry in the bucket before it tries to extend the table.
This is to ensure that the line is not buffered and that it is visible to the
user. It is a synonym from *QUERY-IO* and *DEBUG-IO* which both are interactive.
Consider the following input from string: #j :r1
First the reader signals a condition that there is no dispatch character macro
for #j, and then we select the first restart. That's clearly undesireable.
The specification says that it makes the symbol unbound; that paired with the
definition of BOUNDP indicates, that what is meant is the binding in the dynamic
environment (and for consistency we want to make it behave as a pair to BOUNDP).
Note that this behavioral change matches implementations like CCL and SBCL, so
this change improves the compatibility.
The issue with interpretation comes from the subheader "Side Effects" in the
standard that states: "The value cell of symbol is modified", it should state
that "The value cell of symbol might be modified".
- add a new character name alias Formfeed (for Page) -- sometimes used in the wild
- export asdf:registered-system (exported upstream, some systems use it)
We call ecl_musleep that avoids the hassle of converting values back and forth
between lisp and c world.
The change is prompted by a potential bug in cosmopolitan libc, where the value
stored in a static variable can't be passed to a function in a different
compilation unit. Unmodified code lead to a segmentation fault with cosmocc.
These are badly optimized by C compilers (even single use static
functions are not inlined by both gcc and clang), so instead of
generating a separate variadic entrypoint just generate one single
entrypoint with C compatible signature.
The presence of setjmp calls in function bodies means that some
function arguments have to be volatile. However, this doesn't apply to
variadic entrypoints which never include setjmp calls. Thus,
set *volatile* to be empty before writing out the header.