In Debian, the -Werror=format-security flag is now passed by default to gcc.
This makes the ECL_LINEFEED_MODE test fail.
The fix is to replace the call to fprintf() by fputs().
The compiler refactor of commit
7ec2f4a939 introduced an error where
all lexical variables where marked to cross function boundaries,
leading them to be stored in volatile variables on the stack.
ECL needs the definition of a function to inline it. Previously,
this definition would only be saved in the file local environment
(*cmp-env-root*) but not in the global environment used by
proclaim. Hence, ECL could only inline functions in the same file.
Now, we also put the definition of inline functions in the global
environment during load time. This leads to a behaviour of declaim
for inline functions, which is consistent with other declarations
(meaning that the declarations stay only in force during
compilation, but are proclaimed again at load time of the compiled
file).
Fixes#451.
We support both compare-and-swap and fetch-and-add (via
atomic-incf/decf) on the most common places and define an
extension interface for compare-and-swap similiar to the one in
SBCL.
These changes introduce new dependencies on the libatomic_ops
macros AO_fetch_compare_and_swap and AO_fetch_and_add.
While we do ignore it for all practical purposes it is explicitly said in
standard that we should signal error. Also :SIZE is not an extension (but may
be not used since it is just a hint).
Previously we returned error for streams which are not file streams. We could
try to loose this test for ECL_ANSI_STREAM_P, but that would require confirming,
that all ECL's ANSI streams have string encoders defined.
This function used writes in the thread local environment while
interrupts where disabled with the env->disable_interrupts
mechanism, which causes problems with the mprotect() mechanism for
fast interrupt dispatch.
Disabling interrupts during execution of cleanup forms of
unwind-protect caused problems in some cases. Hence only do this
where needed, i.e. for freeing resources (such as locks or files)
shared between multiple threads or processes.
The syntax had been changed in commit
991bc3ab78, but the reader macro
became broken in the process and commit
835e85bc99 removed the broken
parts. Since the reason for the change in the syntax is unclear,
go back to the old syntax.
Only use one memory barrier for pushing in the frame/binding stack
and ensure interrupt safety by saving/restoring the stack frame in
which writes could happen during an interrupt.
The following code `(LOOP (BLOCK NIL (RETURN)))` would produce an
error. ecl_frs_push would correctly set __frame->frs_val the first
time, however later on control would jump to the statement after
ecl_setjmp and __frame->frs_val would be set again, this time to a
wrong value. Fixes#446.
Also, we don't need to pass val to _ecl_frs_push anymore, so this
argument has been removed.
actually, the build process will terminated when loading
cmp/cmpos-features.lsp
related function is:
(with-open-file (s fc :direction :output :if-exists :overwrite
:if-does-not-exists :create)
it's a MS feature called security-enhanced CRT.
After a call to ext:install-c-compiler while the bytecodes compiler
is installed, compile-file and compile-file-pathname still point
to bc-compile-file and bc-compile-file-pathname. Reported and
fixed by gitlab user pouar. Fixes#444.
GetExitCodeProcess returns the exit code in a DWORD, which is an
unsigned integer, however main functions usually return a signed int, so
we need put in an explicit type cast.