diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.rust/simple.exp | 13 | ||||
-rw-r--r-- | 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 d83a2c6..0438760 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -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. diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index b32eaf1..882c2e0 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 72fba26..9c9ef1b 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 +} |