aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/gcctestsuite.sh
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
commitfa2bdd711212ba6b7a94a20971e8bfa281e73296 (patch)
tree6713b3c0379507d49558287b71dd360ce188a2f0 /tinycc/tests/gcctestsuite.sh
lol
Diffstat (limited to 'tinycc/tests/gcctestsuite.sh')
-rw-r--r--tinycc/tests/gcctestsuite.sh151
1 files changed, 151 insertions, 0 deletions
diff --git a/tinycc/tests/gcctestsuite.sh b/tinycc/tests/gcctestsuite.sh
new file mode 100644
index 0000000..b6f9ec2
--- /dev/null
+++ b/tinycc/tests/gcctestsuite.sh
@@ -0,0 +1,151 @@
+#!/bin/sh
+
+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 $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
+ 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
+
+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 $RUNTIME_DIR/tst >> tcc.fail 2>&1
+ then
+ result="PASS"
+ nb_ok=$(( $nb_ok + 1 ))
+ else
+ result="FAILEXE"
+ nb_exe_failed=$(( $nb_exe_failed + 1 ))
+ fi
+ else
+ 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
+echo "$nb_exe_failed test(s) exe failed."