| |
| # Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile |
| # find ttt for the actual tests |
| |
| # Copyright (C) 1999, 2000, 2001, 2002 by The Free Software Foundation |
| |
| # This program is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by the |
| # Free Software Foundation; either version 2, or (at your option) any |
| # later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, 59 Temple Place - Suite 330, |
| # Boston, MA 02111-1307, USA. |
| # |
| # In other words, you are welcome to use, share and improve this program. |
| # You are forbidden to forbid anyone else to use, share and improve |
| # what you give them. Help stamp out software-hoarding! |
| |
| # 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 --param ggc-min-heapsize=0 --param ggc-min-expand=0 " 01 01 0 3 0 1 0 |
| set X "" |
| } |
| |