1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/test/lib/llvm2cpp.exp
Reid Spencer 556edf9b9b 1. No need to thwart this test with an environment variable. Turning it off
is the default and handled by the makefile system and runtest
2. Redirect stderr of llvm-as and llvm2cpp so that warning messages about
   instrinsics don't cause Tcl to report the run as failed.

llvm-svn: 28576
2006-05-30 23:07:17 +00:00

82 lines
2.7 KiB
Plaintext

# This file defines a tcl proc to assist with testing the llvm2cpp. There are
# no llvm2cpp specific test cases. Instead, it utilizes all the existing test
# cases and makes sure llvm2cpp can run them. The basic idea is that we find
# all the LLVM Assembly (*.ll) files, run llvm2cpp on them to generate a C++
# program, compile those programs, run them and see if what they produce matches
# the original input to llvm2cpp.
proc llvm2cpp-test { files } {
global subdir llvmtoolsdir llvmlibsdir objdir srcdir objroot srcroot
set timeout 30
set path [file join $objdir $subdir]
set llvm2cpp [file join $llvmtoolsdir llvm2cpp ]
set llvmas [file join $llvmtoolsdir llvm-as ]
set llvmdis [file join $llvmtoolsdir llvm-dis ]
#Make Output Directory if it does not exist already
if { [file exists path] } {
cd $path
} else {
file mkdir $path
cd $path
}
file mkdir Output
foreach test $files {
set filename [file tail $test]
set generated [file join Output $filename.cpp]
set executable [file join Output $filename.exe]
set output [file join Output $filename.gen]
set assembly [file join Output $filename.asm]
set testname [file rootname $filename]
set bytecode [file join Output $filename.bc]
# Note that the stderr for llvm-as must be redirected to /dev/null because
# otherwise exec will see the msgs and return 1 even though they are only
# warnings. If real errors are generated on stderr then llvm-as will return
# a non-zero retval anyway so we're good.
set retval [ catch {
exec -keepnewline $llvmas $test -o - | $llvmdis -f -o $assembly 2>/dev/null } msg ]
if { $retval != 0 } {
fail "$test: llvm-as/llvm-dis returned $retval\n$msg"
continue
}
set retval [ catch {
exec -keepnewline $llvm2cpp -f -o $generated < $test 2>/dev/null } msg]
if { $retval != 0 } {
fail "$test: llvm2cpp returned $retval\n$msg"
continue
}
set retval [ catch {
exec -keepnewline gcc -g -D__STDC_LIMIT_MACROS -o $executable $generated -I$srcroot/include -I$objroot/include -L$llvmlibsdir $llvmlibsdir/LLVMCore.o -lLLVMSupport $llvmlibsdir/LLVMbzip2.o -lLLVMSystem -lstdc++ } msg ]
if { $retval != 0 } {
fail "$test: gcc returned $retval\n$msg"
continue
}
set retval [ catch { exec -keepnewline $executable > $output } msg ]
if { $retval != 0 } {
set execname [file tail $executable]
fail "$test: $execname returned $retval:\n$msg"
continue
}
set retval [ catch {
exec -keepnewline diff $assembly $output } msg ]
if { $retval != 0 } {
fail "$test: diff returned $retval:\n$msg"
continue
}
pass "$test"
}
}