1# Expect script for LD cdtest Tests 2# Copyright (C) 1993-2021 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 unsupported $test1 45 unsupported $test2 46 return 47} 48 49set expected_output "$srcdir/$subdir/cdtest.dat" 50 51if ![ld_link $CC 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 95# PR 46 96if [is_pecoff_format] { 97 setup_xfail *-*-* 98} 99 100if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] { 101 fail $test2 102} else { 103 if ![ld_link $CC tmpdir/cdtest tmpdir/cdtest.o] { 104 fail $test2 105 } else { 106 send_log "tmpdir/cdtest >tmpdir/cdtest.out\n" 107 verbose "tmpdir/cdtest >tmpdir/cdtest.out" 108 catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output 109 110 if ![string match "" $exec_output] then { 111 send_log "$exec_output\n" 112 verbose "$exec_output" 1 113 114 fail $test2 115 } else { 116 send_log "diff tmpdir/cdtest.out $expected_output\n" 117 verbose "diff tmpdir/cdtest.out $expected_output" 118 catch "exec diff tmpdir/cdtest.out $expected_output" exec_output 119 set exec_output [prune_warnings $exec_output] 120 121 if [string match "" $exec_output] then { 122 pass $test2 123 } else { 124 send_log "$exec_output\n" 125 verbose "$exec_output" 1 126 127 fail $test2 128 } 129 } 130 } 131} 132