1# Expect script for LD cdtest Tests 2# Copyright (C) 1993-2016 Free Software Foundation, Inc. 3# 4# This file is part of the GNU Binutils. 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 3 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program; if not, write to the Free Software 18# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19# MA 02110-1301, USA. 20# 21# Written by Jeffrey Wheat (cassidy@cygnus.com) 22# Rewritten by Ian Lance Taylor (ian@cygnus.com) 23# 24 25# Make sure that constructors are handled correctly. 26 27set test1 "cdtest" 28set test2 "cdtest with -Ur" 29 30# This test requires running the executable generated by ld. 31if ![isnative] { 32 return 33} 34 35if { [which $CXX] == 0 } { 36 untested $test1 37 untested $test2 38 return 39} 40 41if { ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-foo.cc tmpdir/cdtest-foo.o] 42 || ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-bar.cc tmpdir/cdtest-bar.o] 43 || ![ld_compile "$CXX $CXXFLAGS -fno-exceptions" $srcdir/$subdir/cdtest-main.cc tmpdir/cdtest-main.o] } { 44 unresolved $test1 45 unresolved $test2 46 return 47} 48 49set expected_output "$srcdir/$subdir/cdtest.dat" 50 51if ![ld_link $ld tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] { 52 fail $test1 53} else { 54 send_log "tmpdir/cdtest >tmpdir/cdtest.out\n" 55 verbose "tmpdir/cdtest >tmpdir/cdtest.out" 56 catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output 57 58 if ![string match "" $exec_output] then { 59 send_log "$exec_output\n" 60 verbose "$exec_output" 1 61 62 fail $test1 63 } else { 64 send_log "diff tmpdir/cdtest.out $expected_output\n" 65 verbose "diff tmpdir/cdtest.out $expected_output" 66 catch "exec diff tmpdir/cdtest.out $expected_output" exec_output 67 set exec_output [prune_warnings $exec_output] 68 69 if ![string match "" $exec_output] then { 70 send_log "$exec_output\n" 71 verbose "$exec_output" 1 72 73 send_log "Checking against Named Return Value optimization\n" 74 verbose "Checking against Named Return Value optimization" 1 75 76 set expected_output "$srcdir/$subdir/cdtest-nrv.dat" 77 78 send_log "diff tmpdir/cdtest.out $expected_output\n" 79 verbose "diff tmpdir/cdtest.out $expected_output" 80 catch "exec diff tmpdir/cdtest.out $expected_output" exec_output 81 set exec_output [prune_warnings $exec_output] 82 } 83 84 if [string match "" $exec_output] then { 85 pass $test1 86 } else { 87 send_log "$exec_output\n" 88 verbose "$exec_output" 1 89 90 fail $test1 91 } 92 } 93} 94 95if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] { 96 fail $test2 97} else { 98 if ![ld_link $ld tmpdir/cdtest tmpdir/cdtest.o] { 99 fail $test2 100 } else { 101 send_log "tmpdir/cdtest >tmpdir/cdtest.out\n" 102 verbose "tmpdir/cdtest >tmpdir/cdtest.out" 103 catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output 104 105 if ![string match "" $exec_output] then { 106 send_log "$exec_output\n" 107 verbose "$exec_output" 1 108 109 fail $test2 110 } else { 111 send_log "diff tmpdir/cdtest.out $expected_output\n" 112 verbose "diff tmpdir/cdtest.out $expected_output" 113 catch "exec diff tmpdir/cdtest.out $expected_output" exec_output 114 set exec_output [prune_warnings $exec_output] 115 116 if [string match "" $exec_output] then { 117 pass $test2 118 } else { 119 send_log "$exec_output\n" 120 verbose "$exec_output" 1 121 122 fail $test2 123 } 124 } 125 } 126} 127