diff options
author | Tim Josling <tej@melbpc.org.au> | 2002-05-05 04:24:18 +0000 |
---|---|---|
committer | Tim Josling <timjosling@gcc.gnu.org> | 2002-05-05 04:24:18 +0000 |
commit | 6cfea11bd14394d177d61efd1f1cc908ce5534b2 (patch) | |
tree | f9f7f1ab980437234d5a7681a7427727d00adb41 /gcc/testsuite/treelang | |
parent | 6d030676cc896eeb605f7997f76942a7734b661b (diff) | |
download | gcc-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/ChangeLog | 40 | ||||
-rw-r--r-- | gcc/testsuite/treelang/Makefile.in | 9 | ||||
-rw-r--r-- | gcc/testsuite/treelang/a01gcci01.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/treelang/a01gcci01.tree | 39 | ||||
-rw-r--r-- | gcc/testsuite/treelang/a01gcco01runpgm | 8 | ||||
-rw-r--r-- | gcc/testsuite/treelang/treetests.exp | 289 |
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 "" +} + |