aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.rust/simple.exp13
-rw-r--r--gdb/testsuite/lib/rust-support.exp19
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
+}