# Expect script for ld-plugin LTO tests
#   Copyright (C) 2011-2016 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# 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 3 of the License, 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, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.

# These tests require plugin and LTO.
if { ![check_plugin_api_available]
     || ![check_lto_available] } {
    return
}

global CFLAGS
global CXXFLAGS
set saved_CFLAGS "$CFLAGS"
set saved_CXXFLAGS "$CXXFLAGS"
regsub -all "(\\-Wp,)?-D_FORTIFY_SOURCE=\[0-9\]+" $CFLAGS "" CFLAGS
regsub -all "(\\-Wp,)?-D_FORTIFY_SOURCE=\[0-9\]+" $CXXFLAGS "" CXXFLAGS

proc restore_notify { } {
  global saved_CFLAGS
  global saved_CXXFLAGS
  set CFLAGS "$saved_CFLAGS"
  set CXXFLAGS "$saved_CXXFLAGS"
}

set plugin_names {
    liblto_plugin.so
    liblto_plugin-0.dll
    cyglto_plugin-0.dll
}
set plug_opt ""
foreach plug $plugin_names {
    set plug_so [run_host_cmd $CC "--print-prog-name $plug"]
    if { $plug_so eq $plug } then {
	set plug_so [run_host_cmd $CC "--print-file-name $plug"]
    }
    if { $plug_so ne $plug } then {
	set plug_opt "--plugin $plug_so"
	break
    }
}
set lto_fat ""
set lto_no_fat ""
if { [check_lto_fat_available] } {
  set lto_fat "-ffat-lto-objects"
  set lto_no_fat "-fno-fat-lto-objects"
}

# Simple LTO tests and generate input files for complex LTO tests.
set lto_link_tests [list \
  [list "LTO 1" \
   "-O2 -flto -fuse-linker-plugin" "-flto -fuse-linker-plugin" \
   {lto-1a.c lto-1b.c} {} "lto-1.exe"] \
  [list "Compile 2" \
   "" "-O2 -flto -fuse-linker-plugin" \
   {lto-2.c} {} ""] \
  [list "LTO 2" \
   "-static -O2 -flto -fuse-linker-plugin tmpdir/lto-2.o -lm" "" \
   {dummy.c} {} "lto-2.exe"] \
  [list "Compile 3a" \
   "" "-flto" \
   {lto-3a.c} {} ""] \
  [list "Compile 3c" \
   "" "-O2" \
   {lto-3c.c} {} ""] \
  [list "Build liblto-3.a" \
   "" "-flto $lto_fat" \
   {lto-3b.c} {} "liblto-3.a"] \
  [list "Compile 5a" \
   "" "-flto $lto_fat" \
   {lto-5a.c} {} ""] \
  [list "Compile 5b" \
   "" "-flto $lto_fat" \
   {lto-5b.c} {} ""] \
  [list "LTO 6" \
   "-O2 -flto -fuse-linker-plugin" "" \
   {lto-6.c} {} "lto-6.exe" "c"] \
  [list "Compile PR ld/12365" \
   "" "-flto -O2 $lto_fat" \
   {pr12365a.c pr12365b.c pr12365c.c} {} ""] \
  [list "Compile 9" \
   "" "-O2 -finline -flto" \
   {lto-9.cc} {} "" "c++"] \
  [list "Compile 11a" \
   "" "-O -flto" \
   {lto-11a.c} {} ""] \
  [list "Compile 11b" \
   "" "-O -flto" \
   {lto-11b.c} {} ""] \
  [list "Compile 11c" \
   "" "-O" \
   {lto-11c.c} {} ""] \
  [list "Build liblto-12.a" \
   "$plug_opt" "-O2 -flto" \
   {lto-12c.c} {} "liblto-12.a"] \
  [list "Compile 12" \
   "" "-O2 -flto" \
   {lto-12a.c lto-12b.c} {} ""] \
  [list "Compile 13" \
   "" "-O2 -flto" \
   {lto-13a.c lto-13b.c} {} ""] \
  [list "Build liblto-13.a" \
   "" "-O2" \
   {lto-13c.c} {} "liblto-13.a"] \
  [list "Compile 14a" \
   "" "-flto" \
   {lto-14a.c lto-14b.c} {} ""] \
  [list "Build liblto-14.a" \
   "$plug_opt" "-flto" \
   {lto-14c.c} {} "liblto-14.a"] \
  [list "Compile 15a" \
   "" "-flto" \
   {lto-15a.c} {} ""] \
  [list "Build liblto-15.a" \
   "$plug_opt" "-flto" \
   {lto-15b.c} {} "liblto-15.a"] \
  [list "PR ld/12696" \
   "-O2 -flto -fuse-linker-plugin -r -nostdlib" "-O2 -flto" \
   {pr12696-1.cc} {} "pr12696-1r.o" "c++"] \
  [list "Compile PR ld/12758" \
   "" "" \
   {pr12758a.s} {} ""] \
  [list "Build libpr12758.a" \
   "" "-flto -O2 $lto_fat" \
   {pr12758b.c} {} "libpr12758.a"] \
  [list "PR ld/12758" \
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" "" \
   {dummy.c} {} "pr12758.exe"] \
  [list "Compile PR ld/12760" \
   "" "-g -O0" \
   {pr12760a.c} {} ""] \
  [list "Build libpr12760.a" \
   "" "-flto -O2 $lto_fat" \
   {pr12760b.c} {} "libpr12760.a"] \
  [list "PR ld/12760" \
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" "" \
   {dummy.c} {} "pr12760.exe" "c" "pr12760a.c:6: warning: Bad bar"] \
  [list "Build libpr13183.a" \
   "-T" "-flto -O2 $lto_fat" \
   {pr13183a.c} {} "libpr13183.a"] \
  [list "Compile PR ld/13183" \
   "" "-flto -O2" \
   {pr13183b.c} {} ""] \
  [list "Compile PR ld/13201" \
   "" "-flto -O2" \
   {pr13201.c} {} ""] \
  [list "PR ld/13287" \
   "-flto -fuse-linker-plugin -Wl,--as-needed" "-flto" \
   {pr13287.cc} {} "pr13287.exe" "c++"] \
  [list "PR ld/15323 (1)" \
   "" "-O2" \
   {pr15323a.c} {} "" "c"] \
  [list "PR ld/15323 (2)" \
   "-O2 -flto -r -nostdlib" "-O2 -flto" \
   {pr15323a.c} {} "pr15323a-r.o" "c"] \
  [list "Compile(1) PR ld/pr16846" \
   "" "-flto" \
   {pr16846a.c pr16846b.c} {} ""] \
  [list "Compile(2) PR ld/pr16846" \
   "" "" \
   {pr16846c.c} {} ""] \
  [list "PR ld/pr16846(1)" \
   "-flto -fuse-linker-plugin tmpdir/pr16846a.o tmpdir/pr16846b.o tmpdir/pr16846c.o" "" \
   {dummy.c} {} "pr16846a.exe"] \
  [list "PR ld/pr16846(2)" \
   "-flto -fuse-linker-plugin tmpdir/pr16846a.o tmpdir/pr16846c.o tmpdir/pr16846b.o" "" \
   {dummy.c} {} "pr16846b.exe"] \
  [list "PR ld/19317 (1)" \
   "$plug_opt" "-flto $lto_no_fat" \
   {pr19317.c} {} "libpr19317.a"] \
  [list "Build pr20276a.o" \
   "" "-fno-lto" \
   {pr20276a.c}] \
  [list "Build pr20276b.o" \
   "$plug_opt" "-flto $lto_no_fat" \
   {pr20276b.c}] \
  [list "Build pr20267a.o" \
   "" "" \
   {pr20267a.c}] \
  [list "Build libpr20267a.a" \
   "$plug_opt" "-flto $lto_fat" \
   {pr20267b.c} {} "libpr20267a.a"] \
  [list "Build libpr20267b.a" \
   "$plug_opt" "-flto $lto_no_fat" \
   {pr20267b.c} {} "libpr20267b.a"] \
]

if { [at_least_gcc_version 4 7] } {
    set lto_link_tests [concat $lto_link_tests [list \
      [list "Compile PR ld/12942 (1)" \
       "" "-flto -O2" \
       {pr12942a.cc pr12942c.cc} {} "" "c++"] \
      [list "Compile PR ld/12942 (2)" \
       "" "-O0" \
       {pr12942b.cc} {} "" "c++"] \
    ]]
}

# Generate input files for complex LTO tests for ELF.
set lto_link_elf_tests [list \
  [list "Compile 7" \
   "" "-flto -O2" \
   {lto-7a.c lto-7b.c lto-7c.c} {} ""] \
  [list "Build liblto-7.so" \
   "-shared" "-O2 -fpic" \
   {lto-7d.c} {} "liblto-7.so" "c"] \
  [list "Compile 8a" \
   "" "-O2" \
   {lto-8a.c} {} ""] \
  [list "Compile 8b" \
   "" "-flto -O2" \
   {lto-8b.c} {} ""] \
  [list "Build liblto-17a.so" \
   "-shared -O2 -fpic -flto -fuse-linker-plugin" "-O2 -fpic -flto" \
   {lto-17a.c} {{"nm" {} "lto-17a.d"}} "liblto-17a.so" "c"] \
  [list "Build liblto-17b.so 1" \
   "-shared -O2 -fpic -flto -fuse-linker-plugin tmpdir/lto-17a.o" "-O2 -fpic -flto" \
   {lto-17b.c} {{"nm" {} "lto-17b-1.d"}} "liblto-17b.so"] \
  [list "Build liblto-17b.so 2" \
   "-shared -O2 -fpic -flto -fuse-linker-plugin tmpdir/lto-17a.o" "-O2 -fpic -flto" \
   {lto-17b.c} {{"nm" {} "lto-17b-2.d"}} "liblto-17b.so"] \
  [list "PR ld/12982" \
   "-O2 -flto -fuse-linker-plugin" "-O2 -flto" \
   {pr12982.c} {{"readelf" {-l --wide} "pr12982.d"}} "pr12982.exe"] \
  [list "PR ld/12975" \
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib -Wl,-version-script,pr12975.t" "-O2 -flto" \
   {pr12975.c} {{"readelf" {-s --wide} "pr12975.d"}} "pr12975.so" "c"] \
  [list "PR ld/13229" \
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -finline -fno-early-inlining -flto" \
   {pr13229.cc} {{"readelf" {-s --wide} "pr13229.d"}} "pr13229.so" "c++"] \
  [list "PR ld/13244" \
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -fno-early-inlining -flto" \
   {pr13244.c} {{"readelf" {-s --wide} "pr13244.d"}} "pr13244.so" "c"] \
  [list "Build libpr15146a.a" \
   "$plug_opt" "-flto -O2" \
   {pr15146a.c} {} "lib15146a.a"] \
  [list "Build pr15146b.so" \
   "-shared" "-O2 -fpic" \
   {pr15146b.c} {} "pr15146b.so" "c"] \
  [list "Build pr15146c.so" \
   "-shared -Wl,--no-as-needed tmpdir/pr15146b.so" "-O2 -fpic" \
   {pr15146c.c} {} "pr15146c.so" "c"] \
  [list "PR ld/15146 (1)" \
   "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146a.o tmpdir/pr15146c.so" "" \
   {dummy.c} {{"readelf" {-d} "pr15146.d"}} "pr15146a.exe"] \
  [list "Build libpr15146d.a" \
   "$plug_opt" "-flto -O2" \
   {pr15146d.c} {} "lib15146d.a"] \
  [list "Build libpr16746a.a" \
   "" "" \
   {pr16746a.c pr16746b.c} {} "lib15146a.a"] \
  [list "Build libpr16746b.a" \
   "$plug_opt" "-O2 -flto" \
   {pr16746c.c pr16746d.c} {} "lib15146b.a"] \
  [list "PR ld/16746 (1)" \
   "-O2 -flto -fuse-linker-plugin tmpdir/pr16746a.o tmpdir/pr16746c.o" "-O2 -flto" \
   {dummy.c} {} "pr16746a.exe"] \
  [list "PR ld/16746 (2)" \
   "-O2 -flto -fuse-linker-plugin tmpdir/pr16746c.o tmpdir/pr16746a.o" "-O2 -flto" \
   {dummy.c} {} "pr16746b.exe"] \
  [list "PR ld/14918" \
   "-flto" "-flto" \
   {pr14918.c} {{"readelf" {-d --wide} "pr14918.d"}} "pr14918.exe" "c"] \
]

# Check final symbols in executables.
set lto_link_symbol_tests [list \
  [list "LTO 3 symbol" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/liblto-3.a" "" \
   {dummy.c} {{"nm" {} "lto-3.d"}} "lto-3.exe" "c"] \
  [list "LTO 5 symbol" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-5.o" "" \
   {dummy.c} {{"nm" {} "lto-5.d"}} "lto-5.exe" "c"] \
  [list "LTO 9 symbol" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-9.o" "" \
   {dummy.c} {{"nm" {-C} "lto-9.d"}} "lto-9.exe" "c++"] \
  [list "LTO 16a symbol" \
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin" "-flto" \
   {lto-16a.c} {{"nm" {} "lto-16a.d"}} "lto-16.exe" "c"] \
  [list "LTO 16b symbol" \
   "-O2 -Wl,-e,foo -u bar -nostdlib -flto -fuse-linker-plugin" "-flto" \
   {lto-16a.c lto-16b.c} {{"nm" {} "lto-16b.d"}} "lto-16b.exe" "c"] \
  [list "PR ld/13183" \
   "-O2 -flto -fuse-linker-plugin tmpdir/pr13183b.o tmpdir/libpr13183.a" "" \
   {dummy.c} {{"nm" {} "pr13183.d"}} "pr13183.exe" "c"] \
]

# LTO run-time tests.
set lto_run_tests [list \
  [list "LTO 3a" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/liblto-3.a" "" \
   {dummy.c} "lto-3b.exe" "lto-3.out" "" "c"] \
  [list "LTO 3b" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/lto-3.o" "" \
   {dummy.c} "lto-3c.exe" "lto-3.out" "" "c"] \
  [list "LTO 3c" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o -Wl,--whole-archive tmpdir/liblto-3.a -Wl,--no-whole-archive tmpdir/liblto-3.a" "" \
   {dummy.c} "lto-3d.exe" "lto-3.out" "" "c"] \
  [list "LTO 5" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-5.o" "" \
   {dummy.c} "lto-5.exe" "lto-5.out" "" "c"] \
  [list "LTO 11" \
   "-O -flto -fuse-linker-plugin tmpdir/liblto-11.a" "" \
   {dummy.c} "lto-11.exe" "lto-11.out" "" "c"] \
  [list "LTO 12a" \
   "-O -flto -fuse-linker-plugin tmpdir/lto-12a.o tmpdir/liblto-12.a tmpdir/lto-12b.o" "" \
   {dummy.c} "lto-12a.exe" "lto-12.out" "" "c"] \
  [list "LTO 12b" \
   "-O -flto -fuse-linker-plugin tmpdir/lto-12a.o tmpdir/lto-12b.o tmpdir/liblto-12.a" "" \
   {dummy.c} "lto-12b.exe" "lto-12.out" "" "c"] \
  [list "LTO 13" \
   "-O -flto -fuse-linker-plugin tmpdir/lto-13a.o tmpdir/liblto-13.a tmpdir/lto-13b.o" "" \
   {dummy.c} "lto-13.exe" "lto-13.out" "" "c"] \
  [list "LTO 14" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-14a.o -Wl,--whole-archive tmpdir/liblto-14.a -Wl,--no-whole-archive tmpdir/lto-14b.o" "" \
   {dummy.c} "lto-14.exe" "lto-14.out" "" "c"] \
  [list "LTO 15" \
   "-O2 -flto -fuse-linker-plugin -Wl,--start-group tmpdir/liblto-15.a tmpdir/lto-15a.o -Wl,--end-group" "" \
   {dummy.c} "lto-15.exe" "lto-15.out" "" "c"] \
  [list "PR ld/13066" \
   "-O2 -flto -fuse-linker-plugin" "" \
   {pr13066.cc} "pr13066.exe" "pr13066.out" "" "c++"] \
  [list "PR ld/13201" \
   "-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr13201.o -lm" "" \
   {dummy.c} "pr13201.exe" "pr13201.out" "" "c"] \
  [list "PR ld/15323 (3)" \
   "-O2 -flto -fuse-linker-plugin tmpdir/pr15323a.o" "" \
   {pr15323b.c} "pr15323.exe" "pr15323.out" "-flto -O2" "c"] \
  [list "PR ld/15323 (4)" \
   "-O2 -flto tmpdir/pr15323a-r.o" "" \
   {dummy.c} "pr15323a.exe" "pr15323.out" "-flto -O2" "c"] \
  [list "PR ld/19317 (3)" \
   "-O2 -flto tmpdir/pr19317-r.o" "" \
   {dummy.c} "pr19317.exe" "pr19317.out" "-flto -O2" "c"] \
  [list "Run pr20276" \
   "-O2 -flto tmpdir/pr20276a.o tmpdir/pr20276b.o" "" \
   {dummy.c} "pr20276" "pass.out" "-flto -O2" "c"] \
  [list "Run pr20267a" \
   "-O2 -flto tmpdir/pr20267a.o tmpdir/libpr20267a.a" "" \
   {dummy.c} "pr20267a" "pass.out" "-flto -O2" "c"] \
  [list "Run pr20267b" \
   "-O2 -flto tmpdir/pr20267a.o tmpdir/libpr20267b.a" "" \
   {dummy.c} "pr20267b" "pass.out" "-flto -O2" "c"] \
]

if { [at_least_gcc_version 4 7] } {
    set lto_run_tests [concat $lto_run_tests [list \
      [list "PR ld/12942 (1)" \
       "-O2 -flto -fuse-linker-plugin tmpdir/pr12942a.o tmpdir/pr12942b.o" "" \
       {dummy.c} "pr12942a.exe" "pr12942.out" "" "c++"] \
      [list "PR ld/12942 (2)" \
       "-O2 -flto -fuse-linker-plugin tmpdir/pr12942a.o tmpdir/pr12942c.o" "" \
       {dummy.c} "pr12942c.exe" "pr12942.out" "" "c++"] \
    ]]
}

# LTO run-time tests for ELF
set lto_run_elf_tests [list \
  [list "LTO 7" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-7b.o tmpdir/lto-7c.o tmpdir/lto-7a.o -Wl,--no-as-needed tmpdir/liblto-7.so" "" \
   {dummy.c} "lto-7.exe" "lto-7.out" "" "c"] \
  [list "LTO 8" \
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-8b.o tmpdir/lto-8a.o" "" \
   {dummy.c} "lto-8.exe" "lto-8.out" "" "c"] \
  [list "LTO TLS IE" \
   "-O2 -flto -fuse-linker-plugin" "" \
   {run-ie.c} "run-ie.exe" "run-ie.out" "" "c"] \
]

run_cc_link_tests $lto_link_tests

# Restrict these to ELF targets that support shared libs and PIC.
if { [is_elf_format] && [check_lto_shared_available] } {
    run_cc_link_tests $lto_link_elf_tests
    set testname "PR ld/15146 (2)"
    set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146d.o tmpdir/pr15146c.so"]
    if { [ regexp "undefined reference to symbol 'xxx'" $exec_output ] } {
	pass $testname
    } {
	fail $testname
    }
    set testname "PR ld/16746 (3)"
    set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin tmpdir/pr16746b.o tmpdir/pr16746d.o"]
    if { [ regexp "warning: foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } {
	pass $testname
    } {
	fail $testname
    }
    set testname "PR ld/16746 (4)"
    set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin tmpdir/pr16746d.o tmpdir/pr16746b.o"]
    if { [ regexp "warning: foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } {
	pass $testname
    } {
	fail $testname
    }
}

set testname "Build liblto-11.a"
remote_file host delete "tmpdir/liblto-11.a"
set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
if {![string match "" $catch_output]} {
    unresolved $testname
    restore_notify
    return
}

if { [at_least_gcc_version 4 7] } {
    # Check expected LTO linker errors.
    # Since the asm symbol name hack in pr12365b.c doesn't work on all
    # targets, run PR ld/12365 tests only for known targets.
    if { ([istarget "i?86-*-elf*"]
	   || (([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"])
		&& ![istarget "*-*-*aout*"]
		&& ![istarget "*-*-*oldld*"])
	   || [istarget "i?86-*-nacl*"]
	   || [istarget "x86_64-*-nacl*"]
	   || [istarget "x86_64-*-linux*"]
	   || [istarget "amd64-*-linux*"]) } {
	set testname "PR ld/12365"
	set exec_output [run_host_cmd "$CC" "-O2 -flto -flto-partition=none -fuse-linker-plugin -o tmpdir/pr12365 tmpdir/pr12365a.o tmpdir/pr12365b.o tmpdir/pr12365c.o"]
	if { [ regexp "undefined reference to `my_bcopy'" $exec_output ] } {
	    # Linker should catch the reference to undefined `my_bcopy'
	    # error caused by a GCC bug.
	    pass $testname
	} elseif { [ string match "" $exec_output ] } {
	    global READELF
	    set exec_output [run_host_cmd "$READELF" "-s -W tmpdir/pr12365"]
	    if { [ regexp "my_bcopy" $exec_output ] } {
		# Verify that there is no `my_bcopy' symbol in executable.
		fail $testname
	    } {
		pass $testname
	    }
	} {
	    fail $testname
	}
    }
    set testname "PR ld/12942 (3)"
    set exec_output [run_host_cmd "$CXX" "-O2 -flto -fuse-linker-plugin tmpdir/pr12942b.o tmpdir/pr12942a.o"]
    if { [ regexp "undefined reference to `link_error\\(\\)'" $exec_output ] } {
        pass $testname
    } {
        fail $testname
    }
}

# Run "ld -r" to generate inputs for complex LTO tests.
run_dump_test "lto-3r"
remote_exec host "mv" "tmpdir/dump tmpdir/lto-3.o"
run_dump_test "lto-5r"
remote_exec host "mv" "tmpdir/dump tmpdir/lto-5.o"

run_cc_link_tests $lto_link_symbol_tests

run_ld_link_tests [list \
  [list "PR ld/19317 (2)" \
   "-r tmpdir/pr19317.o" "" "" \
   {dummy.s} {} "pr19317-r.o"] \
]

# The following tests require running the executable generated by ld.
if ![isnative] {
    return
}

run_ld_link_exec_tests [] $lto_run_tests

if { [is_elf_format] } {
    run_ld_link_exec_tests [] $lto_run_elf_tests
}

proc pr20103 {cflags libs} {
    global CC

    set testname "PR ld/20103 ($cflags $libs)"
    set exec_output [run_host_cmd "$CC" "$cflags $libs"]
    if { [ regexp "undefined reference to `dead'" $exec_output ] } {
        pass "$testname (1)"
    } {
        fail "$testname (1)"
    }
    if { [ regexp "plugin needed to handle lto object" $exec_output ] } {
        fail "$testname (2)"
    } {
        pass "$testname (2)"
    }
}

if { [check_lto_fat_available] } {
    run_cc_link_tests [list \
	[list \
	    "Build fatpr20103a.a" \
	    "$plug_opt" "-flto -ffat-lto-objects" \
	    {pr20103a.c} {} "fatpr20103a.a"
	] \
	[list \
	    "Build fatpr20103b.a" \
	    "$plug_opt" "-flto -ffat-lto-objects" \
	    {pr20103b.c} {} "fatpr20103b.a"
	] \
	[list \
	    "Build fatpr20103c.a" \
	    "$plug_opt" "-flto -ffat-lto-objects" \
	    {pr20103c.c} {} "fatpr20103c.a" \
	] \
	[list \
	    "Build thinpr20103a.a" \
	    "$plug_opt" "-flto -fno-fat-lto-objects" \
	    {pr20103a.c} {} "thinpr20103a.a"
	] \
	[list \
	    "Build thinpr20103b.a" \
	    "$plug_opt" "-flto -fno-fat-lto-objects" \
	    {pr20103b.c} {} "thinpr20103b.a"
	] \
	[list \
	    "Build thinpr20103c.a" \
	    "$plug_opt" "-flto -fno-fat-lto-objects" \
	    {pr20103c.c} {} "thinpr20103c.a" \
	] \
	[list \
	    "Build pr20103a" \
	    "-O2 -flto -Wl,--start-group tmpdir/thinpr20103a.a tmpdir/thinpr20103b.a tmpdir/thinpr20103c.a -Wl,--end-group" \
	    "-O2 -flto" \
	    {dummy.c} {} "pr20103a" \
	] \
	[list \
	    "Build pr20103b" \
	    "-O2 -flto -Wl,--start-group tmpdir/fatpr20103a.a tmpdir/fatpr20103b.a tmpdir/fatpr20103c.a -Wl,--end-group" \
	    "-O2 -flto" \
	    {dummy.c} {} "pr20103b" \
	] \
	[list \
	    "Build pr20103c" \
	    "-O2 -Wl,--start-group tmpdir/fatpr20103a.a tmpdir/fatpr20103b.a tmpdir/fatpr20103c.a -Wl,--end-group" \
	    "-O2" \
	    {dummy.c} {} "pr20103c" \
	] \
    ]
    pr20103 "-O2 -flto" "tmpdir/thinpr20103a.a tmpdir/thinpr20103b.a tmpdir/thinpr20103c.a"
    pr20103 "-O2 -flto" "tmpdir/fatpr20103a.a tmpdir/fatpr20103b.a tmpdir/fatpr20103c.a"
    pr20103 "-O2" "tmpdir/fatpr20103a.a tmpdir/fatpr20103b.a tmpdir/fatpr20103c.a"

    if { [at_least_gcc_version 4 9] } {
	run_cc_link_tests [list \
	    [list \
		"Build pr20103d" \
		"-O2 -Wl,--start-group tmpdir/thinpr20103a.a tmpdir/thinpr20103b.a tmpdir/thinpr20103c.a -Wl,--end-group" \
		"-O2" \
		{dummy.c} {} "pr20103d" \
	    ] \
	]
	pr20103 "-O2" "tmpdir/thinpr20103a.a tmpdir/thinpr20103b.a tmpdir/thinpr20103c.a"
    }
}

restore_notify
