diff --git a/tests/gcctestsuite.sh b/tests/gcctestsuite.sh old mode 100644 new mode 100755 index 2be274ca..b6f9ec21 --- a/tests/gcctestsuite.sh +++ b/tests/gcctestsuite.sh @@ -1,31 +1,114 @@ #!/bin/sh -TESTSUITE_PATH=$HOME/gcc/gcc-3.2/gcc/testsuite/gcc.c-torture -TCC="./tcc -B. -I. -DNO_TRAMPOLINES" +if [ -z "$TESTSUITE_PATH" ] +then + if [ -d "$HOME/gcc/gcc-3.2/gcc/testsuite/gcc.c-torture" ] + then + TESTSUITE_PATH="$HOME/gcc/gcc-3.2/gcc/testsuite/gcc.c-torture" + fi +fi + +if [ -z "$TESTSUITE_PATH" ] +then + echo "gcc testsuite not found." + echo "define TESTSUITE_PATH to point to the gcc.c-torture directory" + exit 1 +fi + +if [ -z "$TCC_SOURCE_PATH" ] +then + if [ -f "include/tccdefs.h" ] + then + TCC_SOURCE_PATH="." + elif [ -f "../include/tccdefs.h" ] + then + TCC_SOURCE_PATH=".." + elif [ -f "../tinycc/include/tccdefs.h" ] + then + TCC_SOURCE_PATH="../tinycc" + fi +fi + +if [ -z "$RUNTIME_DIR" ] +then + RUNTIME_DIR=$XDG_RUNTIME_DIR +fi +if [ -z "$RUNTIME_DIR" ] +then + RUNTIME_DIR="/tmp" +fi + +if [ -z "$CC" ] +then + if [ -z "$TCC_SOURCE_PATH" ] + then + echo "tcc not found." + echo "define TCC_SOURCE_PATH to point to the tcc source path" + exit 1 + fi + + TCC="./tcc -B. -I$TCC_SOURCE_PATH/ -I$TCC_SOURCE_PATH/include -DNO_TRAMPOLINES" +else + TCC="$CC -O1 -Wno-implicit-int $CFLAGS" +fi + rm -f tcc.sum tcc.fail nb_ok="0" +nb_skipped="0" nb_failed="0" nb_exe_failed="0" +# skip some failed tests not implemented in tcc +# builtin: gcc "__builtins_*" +# ieee: gcc "__builtins_*" in the ieee directory +# complex: C99 "_Complex" and gcc "__complex__" +# misc: stdc features, other arch, gcc extensions (example: gnu_inline in c89) +# + +old_pwd="`pwd`" +cd "$TESTSUITE_PATH" + +skip_builtin="`grep "_builtin_" compile/*.c execute/*.c execute/ieee/*.c | cut -d ':' -f1 | cut -d '/' -f2 | sort -u `" +skip_ieee="`grep "_builtin_" execute/ieee/*.c | cut -d ':' -f1 | cut -d '/' -f3 | sort -u `" +skip_complex="`grep -i "_Complex" compile/*.c execute/*.c execute/ieee/*.c | cut -d ':' -f1 | cut -d '/' -f2 | sort -u `" +skip_misc="20000120-2.c mipscop-1.c mipscop-2.c mipscop-3.c mipscop-4.c + fp-cmp-4f.c fp-cmp-4l.c fp-cmp-8f.c fp-cmp-8l.c pr38016.c " + +cd "$old_pwd" + for src in $TESTSUITE_PATH/compile/*.c ; do - echo $TCC -o /tmp/tst.o -c $src - $TCC -o /tmp/tst.o -c $src >> tcc.fail 2>&1 + echo $TCC -o $RUNTIME_DIR/tst.o -c $src + $TCC -o $RUNTIME_DIR/tst.o -c $src >> tcc.fail 2>&1 if [ "$?" = "0" ] ; then result="PASS" nb_ok=$(( $nb_ok + 1 )) else - result="FAIL" - nb_failed=$(( $nb_failed + 1 )) + base=`basename "$src"` + skip_me="`echo $skip_builtin $skip_ieee $skip_complex $skip_misc | grep -w $base`" + + if [ -n "$skip_me" ] + then + result="SKIP" + nb_skipped=$(( $nb_skipped + 1 )) + else + result="FAIL" + nb_failed=$(( $nb_failed + 1 )) + fi fi echo "$result: $src" >> tcc.sum done -for src in $TESTSUITE_PATH/execute/*.c ; do - echo $TCC $src -o /tmp/tst -lm - $TCC $src -o /tmp/tst -lm >> tcc.fail 2>&1 +if [ -f "$RUNTIME_DIR/tst.o" ] +then + rm -f "$RUNTIME_DIR/tst.o" +fi + +for src in $TESTSUITE_PATH/execute/*.c $TESTSUITE_PATH/execute/ieee/*.c ; do + echo $TCC $src -o $RUNTIME_DIR/tst -lm + $TCC $src -o $RUNTIME_DIR/tst -lm >> tcc.fail 2>&1 if [ "$?" = "0" ] ; then result="PASS" - if /tmp/tst >> tcc.fail 2>&1 + if $RUNTIME_DIR/tst >> tcc.fail 2>&1 then result="PASS" nb_ok=$(( $nb_ok + 1 )) @@ -34,14 +117,34 @@ for src in $TESTSUITE_PATH/execute/*.c ; do nb_exe_failed=$(( $nb_exe_failed + 1 )) fi else - result="FAIL" - nb_failed=$(( $nb_failed + 1 )) + base=`basename "$src"` + skip_me="`echo $skip_builtin $skip_ieee $skip_complex $skip_misc | grep -w $base`" + + if [ -n "$skip_me" ] + then + result="SKIP" + nb_skipped=$(( $nb_skipped + 1 )) + else + result="FAIL" + nb_failed=$(( $nb_failed + 1 )) + fi fi echo "$result: $src" >> tcc.sum done +if [ -f "$RUNTIME_DIR/tst.o" ] +then + rm -f "$RUNTIME_DIR/tst.o" +fi +if [ -f "$RUNTIME_DIR/tst" ] +then + rm -f "$RUNTIME_DIR/tst" +fi + echo "$nb_ok test(s) ok." >> tcc.sum echo "$nb_ok test(s) ok." +echo "$nb_skipped test(s) skipped." >> tcc.sum +echo "$nb_skipped test(s) skipped." echo "$nb_failed test(s) failed." >> tcc.sum echo "$nb_failed test(s) failed." echo "$nb_exe_failed test(s) exe failed." >> tcc.sum