From 08cc37dd042338209c8e2aa5db04aef2ecb5c62b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 15 Sep 2020 09:27:01 -0600 Subject: [PATCH] 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 PR rust/26197: * lib/rust-support.exp (rust_llvm_version): New proc. * gdb.rust/simple.exp: Check rust_llvm_version. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.rust/simple.exp | 13 +++++++++++-- gdb/testsuite/lib/rust-support.exp | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index d83a2c629b0..0438760080d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-09-15 Tom Tromey + + 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 * gdb.rust/traits.exp: Fix PATH warning. diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index b32eaf1e4dc..882c2e07bcd 100644 --- a/gdb/testsuite/gdb.rust/simple.exp +++ b/gdb/testsuite/gdb.rust/simple.exp @@ -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" +} diff --git a/gdb/testsuite/lib/rust-support.exp b/gdb/testsuite/lib/rust-support.exp index 72fba2623e9..9c9ef1bbd2a 100644 --- a/gdb/testsuite/lib/rust-support.exp +++ b/gdb/testsuite/lib/rust-support.exp @@ -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 +} -- 2.30.2