Home | History | Annotate | Download | only in ld-cdtest
      1 # Expect script for LD cdtest Tests
      2 #   Copyright (C) 1993-2014 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 (at) cygnus.com)
     22 # Rewritten by Ian Lance Taylor (ian (at) cygnus.com)
     23 #
     24 
     25 # Make sure that constructors are handled correctly.
     26 
     27 set test1 "cdtest"
     28 set test2 "cdtest with -Ur"
     29 
     30 # This test requires running the executable generated by ld.
     31 if ![isnative] {
     32     return
     33 }
     34 
     35 if { [which $CXX] == 0 } {
     36     untested $test1
     37     untested $test2
     38     return
     39 }
     40 
     41 if {   ![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 
     49 set expected_output "$srcdir/$subdir/cdtest.dat"
     50 
     51 if ![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 
     95 if ![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