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