Fix Rust test cases
authorTom Tromey <tom@tromey.com>
Fri, 24 Apr 2020 21:35:01 +0000 (15:35 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 24 Apr 2020 21:35:03 +0000 (15:35 -0600)
PR rust/25025 notes that some Rust test cases fail.

Debugging gdb revealed that the Rust compiler emits different linkage
names that demangle to the same result.  Enabling complaints when
reading the test case is enough to show it:

    During symbol reading: Computed physname <generics::identity<f64>> does not match demangled <generics::identity> (from linkage <_ZN8generics8identity17h8540b320af6656d6E>) - DIE at 0x424 [in module /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.rust/generics/generics]
    During symbol reading: Computed physname <generics::identity<u32>> does not match demangled <generics::identity> (from linkage <_ZN8generics8identity17hae302fad0c33bd7dE>) - DIE at 0x459 [in module /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.rust/generics/generics]
    ...

This patch changes the DWARF reader to prefer the computed physname,
rather than the output of the demangler, for Rust.  This fixes the
bug.

gdb/ChangeLog
2020-04-24  Tom Tromey  <tom@tromey.com>

PR rust/25025:
* dwarf2/read.c (dwarf2_physname): Do not demangle for Rust.

gdb/ChangeLog
gdb/dwarf2/read.c

index 829c0770a15f526bca6b73cebc5444a68239057b..e1c64ab77068dad0b694cd7736a9ca08d6bbd1cb 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-24  Tom Tromey  <tom@tromey.com>
+
+       PR rust/25025:
+       * dwarf2/read.c (dwarf2_physname): Do not demangle for Rust.
+
 2020-04-24  Tom Tromey  <tom@tromey.com>
 
        PR symtab/12707:
index 613c3cd71ab6ae01f589c2f07f09240c68ea8032..976261372bc536d8c17870a3f19b9d3bffc0d2ce 100644 (file)
@@ -10318,7 +10318,8 @@ dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
   if (!die_needs_namespace (die, cu))
     return dwarf2_compute_name (name, die, cu, 1);
 
-  mangled = dw2_linkage_name (die, cu);
+  if (cu->language != language_rust)
+    mangled = dw2_linkage_name (die, cu);
 
   /* DW_AT_linkage_name is missing in some cases - depend on what GDB
      has computed.  */