Build results: qbe.freebsd
[OK] a9d81338b19f21f7220e340a1c50870b40587120
add support for closure calls Compiling languages with closures often requires passing an extra environment parameter to the called function. One solution is to use a convention, and reserve, say, the first argument for that purpose. However, that makes binding to C a little less smooth. Alternatively, QBE now provides a way to remain fully ABI compatible with C by having a "hidden" environment argument (marked with the keyword 'env'). Calling a function expecting an environment from C will make the contents of the environment undefined, but the normal arguments will be passed without alteration. Conversely, calling a C function like it is a closure by passing it an environemnt will work smoothly.
OK: build: gmake
STDOUT
cc main.c
cc util.c
cc parse.c
cc cfg.c
cc mem.c
cc ssa.c
cc alias.c
cc load.c
cc copy.c
cc fold.c
cc live.c
cc sysv.c
cc isel.c
cc spill.c
cc rega.c
cc emit.c
ld obj/qbe
STDERR
OK: test: gmake check
STDOUT
tools/unit.sh all
abi1.ssa... [ok]
abi2.ssa... [ok]
abi3.ssa... [ok]
abi4.ssa... [ok]
abi5.ssa... [ok]
align.ssa... [ok]
collatz.ssa... [ok]
cprime.ssa... [ok]
cup.ssa... [ok]
dark.ssa... [ok]
double.ssa... [ok]
echo.ssa... [ok]
eucl.ssa... [ok]
euclc.ssa... [ok]
fixarg.ssa... [ok]
fpcnv.ssa... [ok]
ldbits.ssa... [ok]
ldhoist.ssa... [ok]
loop.ssa... [ok]
mandel.ssa... [ok]
max.ssa... [ok]
philv.ssa... [ok]
prime.ssa... [ok]
puts10.ssa... [ok]
queen.ssa... [ok]
sum.ssa... [ok]
vararg1.ssa... [ok]
vararg2.ssa... [ok]
All is fine!
STDERR
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
cc: warning: argument unused during compilation: '-nopie'
OK: clean: gmake clean
STDOUT
rm -fr obj
STDERR