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.
This commit is contained in:
Tom Tromey
2020-09-15 09:27:01 -06:00
parent cbe256847e
commit 08cc37dd04
3 changed files with 36 additions and 2 deletions

View File

@ -1,3 +1,9 @@
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-14 Tom de Vries <tdevries@suse.de>
* gdb.rust/traits.exp: Fix PATH warning.

View File

@ -375,5 +375,14 @@ gdb_test "python print(e.type.fields()\[0\].artificial)" "True"
gdb_test "python print(e.type.fields()\[1\].name)" "Two"
gdb_test "python print(e.type.dynamic)" "False"
gdb_test "python print(gdb.lookup_type('simple::MoreComplicated').dynamic)" \
"True"
# Before LLVM 8, the rust compiler would emit two types named
# "simple::MoreComplicated" -- the C-like "underlying" enum type and
# the Rust enum. lookup_type seems to get the former, which isn't
# very useful. With later versions of LLVM, this test works
# correctly.
set v [split [rust_llvm_version] .]
if {[lindex $v 0] >= 8} {
gdb_test "python print(gdb.lookup_type('simple::MoreComplicated').dynamic)" \
"True"
}

View File

@ -35,3 +35,22 @@ proc gdb_compile_rust {sources dest options} {
}
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
}