binutils-gdb/gdb/testsuite/lib/rust-support.exp
Tom Tromey 08cc37dd04 Avoid running one Rust test against older LLVM
LLVM 8.0 introduced some changes to let the Rust compiler emit DWARF
variant parts.  Before this change, the compiler would emit two types
with the same name, and unfortunately gdb happens to pick the wrong
one.  So, this patch disables the test when using an older version of
LLVM.

gdb/testsuite/ChangeLog
2020-09-15  Tom Tromey  <tromey@adacore.com>

	PR rust/26197:
	* lib/rust-support.exp (rust_llvm_version): New proc.
	* gdb.rust/simple.exp: Check rust_llvm_version.
2020-09-15 09:27:01 -06:00

57 lines
1.8 KiB
Plaintext

# Copyright 2016-2020 Free Software Foundation, Inc.
#
# 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, see <http://www.gnu.org/licenses/>.
# Auxiliary function to set the language to Rust.
# The result is 1 (true) for success, 0 (false) for failure.
proc set_lang_rust {} {
if [gdb_test_no_output "set language rust"] {
return 0
}
if [gdb_test "show language" ".* source language is \"rust\"." \
"set language to \"rust\""] {
return 0
}
return 1
}
proc gdb_compile_rust {sources dest options} {
if {[llength $sources] > 1} {
error "gdb rust setup can only compile one source file at a time"
}
if {[gdb_compile [lindex $sources 0] $dest executable $options] != ""} {
return -1
}
return ""
}
# Return the version of LLVM used by the Rust compiler. Note that
# older versions of rustc don't print this -- in this case the
# returned version is "0.0".
gdb_caching_proc rust_llvm_version {
set rustc [find_rustc]
if {$rustc == ""} {
verbose "could not find rustc"
} else {
set output [lindex [remote_exec host "$rustc --version --verbose"] 1]
foreach line [split $output \n] {
if {[regexp "LLVM version: (.+)\$" $output ignore version]} {
return $version
}
}
verbose "could not match rustc version output: $output"
}
return 0.0
}