aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/treelang
diff options
context:
space:
mode:
authorTim Josling <tej@melbpc.org.au>2002-05-05 04:24:18 +0000
committerTim Josling <timjosling@gcc.gnu.org>2002-05-05 04:24:18 +0000
commit6cfea11bd14394d177d61efd1f1cc908ce5534b2 (patch)
treef9f7f1ab980437234d5a7681a7427727d00adb41 /gcc/testsuite/treelang
parent6d030676cc896eeb605f7997f76942a7734b661b (diff)
downloadgcc-6cfea11bd14394d177d61efd1f1cc908ce5534b2.zip
gcc-6cfea11bd14394d177d61efd1f1cc908ce5534b2.tar.gz
gcc-6cfea11bd14394d177d61efd1f1cc908ce5534b2.tar.bz2
Added new sample language treelang.
From-SVN: r53169
Diffstat (limited to 'gcc/testsuite/treelang')
-rw-r--r--gcc/testsuite/treelang/ChangeLog40
-rw-r--r--gcc/testsuite/treelang/Makefile.in9
-rw-r--r--gcc/testsuite/treelang/a01gcci01.c19
-rw-r--r--gcc/testsuite/treelang/a01gcci01.tree39
-rw-r--r--gcc/testsuite/treelang/a01gcco01runpgm8
-rw-r--r--gcc/testsuite/treelang/treetests.exp289
6 files changed, 404 insertions, 0 deletions
diff --git a/gcc/testsuite/treelang/ChangeLog b/gcc/testsuite/treelang/ChangeLog
new file mode 100644
index 0000000..d7f7c78
--- /dev/null
+++ b/gcc/testsuite/treelang/ChangeLog
@@ -0,0 +1,40 @@
+2002-04-13 Tim Josling <tej@melbpc.org.au>
+ * treetree.c (tree_code_create_function_initial)
+ Remove duplicate call to layout_decl
+
+2001-12-02 Tim Josling <tej@melbpc.org.au>
+ * Make-lang.in
+ Ensure directory is built during install (installdirs dependency)
+
+ * lex.l
+ Work around poisoned malloc (undef IN_GCC)
+ Remove fake definition of tree.
+
+ * parse.y
+ Work around poisoned malloc (undef IN_GCC)
+
+ * tree1.c
+ New front end interface.
+ (top level) New structure lang_hooks.
+ (tree_post_options) Remove.
+ errorcount now a macro so do not define it.
+ current_nesting_level => work_nesting_level due to clash.
+
+ * treelang.h
+ errorcount now a macro so do not reference it.
+
+ * treetree.c
+ Replace NULL_PTR by NULL.
+ (tree_code_get_expression) Mark op3 unused.
+ Do not init builtins.
+
+2001-06-11 Tim Josling <tej@melbpc.org.au>
+
+ * treelang.exp (global) remove COBOL specific code.
+
+2001-05-24 Tim Josling <tej@melbpc.org.au>
+
+ Created this directory and its tests. All derived from the cobol
+ test swamp which was also all written by me.
+
+
diff --git a/gcc/testsuite/treelang/Makefile.in b/gcc/testsuite/treelang/Makefile.in
new file mode 100644
index 0000000..908131b
--- /dev/null
+++ b/gcc/testsuite/treelang/Makefile.in
@@ -0,0 +1,9 @@
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+all:
+
+clean:
+ -rm -f *.o *.diff *~ *.bad core *.x
+
+distclean: clean
+ -rm -f Makefile config.status
diff --git a/gcc/testsuite/treelang/a01gcci01.c b/gcc/testsuite/treelang/a01gcci01.c
new file mode 100644
index 0000000..69ab63d
--- /dev/null
+++ b/gcc/testsuite/treelang/a01gcci01.c
@@ -0,0 +1,19 @@
+/* Driver for treelang test pgm */
+
+int add(int, int);
+int subtract(int, int);
+int first_nonzero(int, int);
+
+int
+main (int argc, char *argv[])
+{
+ printf("2:%d\n", add(1,1));
+ printf("7:%d\n", add(3,4));
+ printf("-1:%d\n", subtract(3,4));
+ printf("1:%d\n", subtract(2,1));
+ printf("3:%d\n", first_nonzero(0,3));
+ printf("0:%d\n", first_nonzero(0,0));
+ printf("1:%d\n", first_nonzero(1,0));
+ printf("15:%d\n", double_plus_one(7));
+ return 0;
+}
diff --git a/gcc/testsuite/treelang/a01gcci01.tree b/gcc/testsuite/treelang/a01gcci01.tree
new file mode 100644
index 0000000..e1e1ac1
--- /dev/null
+++ b/gcc/testsuite/treelang/a01gcci01.tree
@@ -0,0 +1,39 @@
+// -*- c -*- c mode in emacs
+
+external_definition int add(int arg1, int arg2);
+external_definition int subtract(int arg3, int arg4);
+external_definition int first_nonzero(int arg5, int arg6);
+external_definition int double_plus_one(int arg7);
+
+add
+{
+ return arg1 + arg2;
+}
+
+
+subtract
+{
+ return arg3 - arg4;
+}
+
+double_plus_one
+{
+ automatic int aaa;
+ aaa=add(arg7, arg7);
+ aaa=add(aaa, aaa);
+ aaa=subtract(subtract(aaa, arg7), arg7) + 1;
+ return aaa;
+}
+
+first_nonzero
+{
+ if (arg5)
+ {
+ return arg5;
+ }
+ else
+ {
+ }
+ return arg6;
+}
+
diff --git a/gcc/testsuite/treelang/a01gcco01runpgm b/gcc/testsuite/treelang/a01gcco01runpgm
new file mode 100644
index 0000000..3c2c743
--- /dev/null
+++ b/gcc/testsuite/treelang/a01gcco01runpgm
@@ -0,0 +1,8 @@
+2:2
+7:7
+-1:-1
+1:1
+3:3
+0:0
+1:1
+15:15
diff --git a/gcc/testsuite/treelang/treetests.exp b/gcc/testsuite/treelang/treetests.exp
new file mode 100644
index 0000000..10e6f84
--- /dev/null
+++ b/gcc/testsuite/treelang/treetests.exp
@@ -0,0 +1,289 @@
+
+# Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile
+
+# Copyright (C) 1999, 2000, 2001, 2002 by The Free Software Foundation
+
+# find ttt for the actual tests
+
+# Check the pgm is even there and set up the basics
+proc init_utility {pgm} {
+ global transform
+ global pgm_actual
+ global pgm_base
+ global fix_progname
+ global path
+# maybe add "X" to front of fail to say it is an expected failure
+ global X
+
+ set pgm_base ${pgm}
+ set pgm_actual ${pgm}
+
+ if { ${transform} != "s,x,x,"} {
+ verbose "1. program name was ${pgm}" 2
+ set sed_rc [catch {eval exec sed -e "${transform}" <<${pgm} } catch_res]
+ if { ${sed_rc} != "0" } {
+ verbose "2. Program name transform failed rc=${sed_rc} stat=${catch_res}" 1
+ ${X}fail "${pgm} sed"
+ return 0
+ }
+ set pgm_actual ${catch_res}
+ verbose "3. program name after transformation is ${pgm_actual}" 2
+ }
+
+ set which_rc [catch {exec which ${pgm_actual}} stat]
+ if { ${which_rc} != "0" } {
+ verbose "4. ${pgm_base} cannot be found rc=${which_rc} stat=${stat}" 1
+ ${X}fail "${pgm} = ${pgm_actual} not found in path (${path})"
+ return 0
+ }
+ set fix_progname "s,${pgm_actual},${pgm_base},"
+ verbose "5. fix program name value = ${fix_progname}" 4
+ return 1
+}
+
+#run pgm, option to remove file names from outputs
+proc run3 {srcdd testdd parms group_nbr item_nbr nonzero_RC_expected check_file sanitize_output tree1 pipe} {
+
+ global transform
+ global pgm_actual
+ global pgm_base
+ global fix_progname
+ global X
+ global extras
+
+ set error_msg 0
+ set basefile "a${group_nbr}${pgm_base}.out${item_nbr}"
+ set infile ""
+ set outfile ""
+ set suffix ""
+ set temp_extras "-O3 "
+ set real_pgm_actual ${pgm_actual}
+
+ if {${tree1} > 0} {
+ if {"${pgm_actual}" == "gcc"} {
+ set real_pgm_actual "xgcc"
+ set temp_extras "${extras}"
+ }
+ set infile "${srcdd}/a${group_nbr}${pgm_base}i${item_nbr}.tree"
+ set mainfile "${srcdd}/a${group_nbr}${pgm_base}i${item_nbr}.c"
+ set outfile "-o ${testdd}/a${group_nbr}${pgm_base}o${item_nbr}${suffix}"
+ }
+
+ verbose "6. exec ${real_pgm_actual} ${temp_extras} ${parms} ${mainfile} ${infile} ${outfile} >${testdd}/${basefile} 2>${testdd}/${basefile}err" 2
+ set run_rc [catch {eval exec ${real_pgm_actual} ${temp_extras} ${parms} ${mainfile} ${infile} ${outfile} >${testdd}/${basefile} 2>${testdd}/${basefile}err} catch_res]
+ if {${run_rc} == 1} {
+ if {${nonzero_RC_expected} == 0} {
+ verbose "7. ${real_pgm_actual} ${group_nbr} ${item_nbr} failed due to rc=${run_rc} status=${catch_res}" 1
+ ${X}fail "${pgm_base} ${group_nbr} ${item_nbr} rc!=0"
+ return
+ }
+ } else {
+ if {${nonzero_RC_expected} == 1} {
+ verbose "8. ${pgm_actual} ${group_nbr} ${item_nbr} failed - did not produce nonzero return code as expected rc=${run_rc} status=${catch_res}" 1
+ ${X}fail "${pgm_base} ${group_nbr} ${item_nbr} rc=0"
+ return
+ }
+ }
+
+# change the filenames to (file) in output if needed to allow testing
+ set checkfile1 "${srcdd}/${basefile}"
+ set checkfile2 "${testdd}/${basefile}"
+ if {${sanitize_output} != 0} {
+ set oldcheckfile1 "${checkfile1}"
+ set oldcheckfile2 "${checkfile2}"
+ set checkfile1 "${testdd}/${basefile}.test.nofilename"
+ set checkfile2 "${testdd}/${basefile}.run.nofilename"
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile1} >${checkfile1}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "9. sed to cleanup filenames (std 1) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "9. sed to cleanup filenames (std 1) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile2} | sed -e "${fix_progname}" >${checkfile2}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "10. sed to cleanup filenames (std 2) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "10. sed to cleanup filenames (std 2) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ }
+ set diff [diff ${checkfile1} ${checkfile2}]
+ if {${diff} != 1} {
+ verbose "11. ${pgm_actual} ${group_nbr} ${item_nbr} diff stdout failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "11. ${pgm_actual} ${group_nbr} ${item_nbr} diff stdout failed rc=${diff}"
+ }
+ }
+
+ set checkfile1 "${srcdd}/${basefile}err"
+ set checkfile2 "${testdd}/${basefile}err"
+ if {${sanitize_output} != 0} {
+ set oldcheckfile1 "${checkfile1}"
+ set oldcheckfile2 "${checkfile2}"
+ set checkfile1 "${testdd}/${basefile}err.test.nofilename"
+ set checkfile2 "${testdd}/${basefile}err.run.nofilename"
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile1} >${checkfile1}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "12. sed to cleanup filenames (err 1) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "12. sed to cleanup filenames (err 1) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile2} | sed -e "${fix_progname}" >${checkfile2}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "13. sed to cleanup filenames (err 2) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "13. sed to cleanup filenames (err 2) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ }
+ set diff [diff ${checkfile1} ${checkfile2}]
+ if {${diff} != 1} {
+ verbose "14. ${pgm_actual} ${group_nbr} ${item_nbr} diff stderr failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "14. ${pgm_actual} ${group_nbr} ${item_nbr} diff stderr failed rc=${diff}"
+ }
+ }
+
+ if {${check_file} >0} {
+ if {${tree1} == 0} {
+ set checkfile1 "${srcdd}/${basefile}file"
+ set checkfile2 "${testdd}/${basefile}file"
+ if {${sanitize_output} != 0} {
+ set oldcheckfile1 "${checkfile1}"
+ set oldcheckfile2 "${checkfile2}"
+ set checkfile1 "${testdd}/${basefile}file.test.nofilename"
+ set checkfile2 "${testdd}/${basefile}file.run.nofilename"
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile1} >${checkfile1}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "15. sed to cleanup filenames (err 1) in pgm stdout failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "15. sed to cleanup filenames (err 1) in pgm stdout failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile2} | sed -e "${fix_progname}" >${checkfile2}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "16. sed to cleanup filenames (err 2) in pgm stdout failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "16. sed to cleanup filenames (err 2) in pgm stdout failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ }
+ set diff [diff ${checkfile1} ${checkfile2}]
+ if {${diff} != 1} {
+ verbose "17. ${pgm_actual} ${group_nbr} ${item_nbr} diff stdout file failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "17. ${pgm_actual} ${group_nbr} ${item_nbr} diff stdout file failed rc=${diff}"
+ }
+ }
+ }
+ }
+
+ if {${check_file} >1} {
+ if {${tree1} == 0} {
+ set checkfile1 "${srcdd}/${outfile}"
+ set checkfile2 "${testdd}/${outfile}"
+ if {${sanitize_output} != 0} {
+ set oldcheckfile1 "${checkfile1}"
+ set oldcheckfile2 "${checkfile2}"
+ set checkfile1 "${testdd}/${basefile}out.test.nofilename"
+ set checkfile2 "${testdd}/${basefile}out.run.nofilename"
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile1} >${checkfile1}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "18. sed to cleanup filenames (err 1) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "18. sed to cleanup filenames (err 1) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ set run_rc [catch {eval exec sed -f ${srcdd}/filefix.sed <${oldcheckfile2} | sed -e "${fix_progname}" >${checkfile2}} catch_res]
+ if {${run_rc} == 1} {
+ verbose "19. sed to cleanup filenames (err 2) in pgm output failed due to rc=${run_rc} status=${catch_res}" 1
+ if {${error_msg} == 0} {
+ set error_msg "19. sed to cleanup filenames (err 2) in pgm output failed due to rc=${run_rc} status=${catch_res}"
+ }
+ }
+ }
+ set diff [diff ${checkfile1} ${checkfile2}]
+ if {${diff} != 1} {
+ verbose "20. ${pgm_actual} ${group_nbr} ${item_nbr} diff output file failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "20. ${pgm_actual} ${group_nbr} ${item_nbr} diff output file failed rc=${diff}"
+ }
+ }
+ }
+ }
+
+ if {${check_file} >2} {
+ set outfile "a${group_nbr}${pgm_base}o${item_nbr}${suffix}"
+ set pgmrun "${testdd}/a${group_nbr}${pgm_base}o${item_nbr}${suffix}"
+ set checkfile1 "${srcdd}/${outfile}runpgm"
+ set checkfile2 "${testdd}/${outfile}runpgm"
+ verbose "21. exec ${pgmrun} >${checkfile2} 2>${checkfile2}err" 2
+ set run_rc [catch {eval exec ${pgmrun} >${checkfile2} 2>${checkfile2}err} catch_res]
+ if {${run_rc} == 1} {
+ if {${nonzero_RC_expected} == 0} {
+ verbose "22. ${pgm_actual} ${group_nbr} ${item_nbr} failed due to rc=${run_rc} status=${catch_res}" 1
+ ${X}fail "${pgm_base} ${group_nbr} ${item_nbr} run"
+ return
+ }
+ } else {
+ if {${nonzero_RC_expected} == 1} {
+ verbose "23. ${pgm_actual} ${group_nbr} ${item_nbr} failed - did not produce nonzero return code as expected rc=${run_rc} status=${catch_res}" 1
+ ${X}fail "${pgm_base} ${group_nbr} ${item_nbr} run"
+ return
+ }
+ }
+ set diff [diff ${checkfile1} ${checkfile2}]
+ if {${diff} != 1} {
+ verbose "24. ${pgm_actual} ${group_nbr} ${item_nbr} diff run output file failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "24. ${pgm_actual} ${group_nbr} ${item_nbr} diff run output file failed rc=${diff}"
+ }
+ }
+ set diff [diff ${checkfile1}err ${checkfile2}err]
+ if {${diff} != 1} {
+ verbose "25. ${pgm_actual} ${group_nbr} ${item_nbr} diff run stderr file failed rc=${diff}" 1
+ if {${error_msg} == 0} {
+ set error_msg "25. ${pgm_actual} ${group_nbr} ${item_nbr} diff run stderr file failed rc=${diff}"
+ }
+ }
+ }
+
+ if {${error_msg}>0} {
+ ${X}fail "${pgm_base} ${group_nbr} ${item_nbr} fail code=${error_msg}"
+ } else {
+ pass "${pgm_base} ${group_nbr} ${item_nbr}"
+ }
+ return
+}
+
+set extras "$env(gcc_extras)"
+set path $env(PATH)
+set transform $env(TRANSFORM)
+set srcdir $env(srcdir)
+verbose "source directory ${srcdir}\n" 2
+verbose "transform ${transform}\n" 2
+set sourcedir "${srcdir}/testsuite/treelang"
+set testdir "treelang"
+
+set pgm_actual ""
+
+# srcdd testdd parms group_nbr item_nbr nonzero_RC_expected check_file sanitize_output tree1
+
+# ttt
+
+#GCC - main C compiler tests via GCC
+
+set X ""
+
+set check_rc [init_utility "gcc"]
+
+if {${check_rc} == 1} {
+#
+#set X "x"
+set X ""
+ run3 "${sourcedir}" "${testdir}" " -g -O3 " 01 01 0 3 0 1 0
+set X ""
+}
+