Mercurial > projects > ldc
view tests/runtest @ 1410:cc2d8a7388c7
Count the sret register as well when keeping track of how many integer registers
are available for extern(C) functions on x86-64.
Interestingly, llvm-g++ seems to have a very similar bug: http://llvm.org/pr4242
(So this breaks ABI-compatibility with llvm-gcc for this corner case, but gains
it with gcc...)
To clarify, this is about code like this:
{{{
struct S { void*[3] data; }
struct T { void*[2] data; }
// The T should be passed in memory, and p in the last int register.
extern(C) S fail(int, int, int, int, T t, void* p) {
S s;
s.data[0] = t.data[0];
s.data[1] = t.data[1];
s.data[2] = p;
return s;
}
}}}
which should generate code functionally equivalent to this:
{{{
extern(C) S* succeed(S* s, int, int, int, int, T t, void* p) {
s.data[0] = t.data[0];
s.data[1] = t.data[1];
s.data[2] = p;
return s;
}
}}}
(with the same definitions for S and T)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Fri, 22 May 2009 13:17:06 +0200 |
parents | 6f5e40205f2a |
children | 628433c343b4 |
line wrap: on
line source
#!/bin/sh # check for command line arguments if [ -z "$1" ] ; then echo "Usage: `basename $0` <test result file>" exit fi TARGETFILE=$1 # check for dstress if ! [ -d dstress ] ; then echo "Testing requires DStress to be checked out into dstress/" exit fi BASEPATH=`pwd` cd dstress # remove excessive tests sed -e 's/torture-//g' -i Makefile # make sure only .d files in 'run' tests are run sed -e 's/find run -type f |/find run -type f -name "*\\\\.d" |/' -i Makefile sed -e 's/find norun -type f |/find norun -type f -name "*\\\\.d" |/' -i Makefile # impose more conservative constraints (10s and 256 MB) sed -e 's/crashRun 30 1000/crashRun 10 256/' -i dstress.c echo echo "Running new test and storing result in $TARGETFILE ..." echo echo "Remember to make sure you have an up to date runtime!" echo if [ -z "$DMD" ] ; then echo "Testing with LDC. Set DMD environment variable to select compiler." DMD="ldmd -I$BASEPATH/testincludes -L$BASEPATH/testincludes/libtangobos-partial.a" echo "Default is $DMD" else echo "Using compiler given by DMD environment variable: $DMD" fi echo echo "This will take a while, try 'tail -f $TARGETFILE' to follow progress." echo "Note that aborting is tricky. Try killing the processes by the name of" echo "run.sh, compile.sh, nocompile.sh and norun.sh as well as this one." echo DMD=$DMD make compile nocompile run norun > ../$TARGETFILE cd .. echo echo "Cleanup... (removing all .o and .exe files)" echo find dstress -name "*\.o" -o -name "*\.exe" -delete