[PATCH] Support the new ("v0") mangling scheme in rust-demangle.

Andreas Schwab schwab@linux-m68k.org
Tue Apr 20 15:55:46 GMT 2021


On Nov 13 2020, Nikhil Benesch via Gcc-patches wrote:

> +static void
> +demangle_const_char (struct rust_demangler *rdm)
> +{
> +  size_t hex_len;
> +  uint64_t value;
> +
> +  hex_len = parse_hex_nibbles (rdm, &value);
> +
> +  if (hex_len == 0 || hex_len > 8)
> +    {
> +      rdm->errored = 1;
> +      return;
> +    }
> +
> +  /* Match Rust's character "debug" output as best as we can. */
> +  PRINT ("'");
> +  if (value == '\t')
> +    PRINT ("\\t");
> +  else if (value == '\r')
> +    PRINT ("\\r");
> +  else if (value == '\n')
> +    PRINT ("\\n");
> +  else if (value > ' ' && value < '~')
> +    /* Rust also considers many non-ASCII codepoints to be printable, but
> +       that logic is not easily ported to C. */
> +    print_str (rdm, (char *) &value, 1);

	* rust-demangle.c (demangle_const_char): Properly print the
	character value.

diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c
index 6fd8f6a4db0..449941b56dc 100644
--- a/libiberty/rust-demangle.c
+++ b/libiberty/rust-demangle.c
@@ -1253,9 +1253,12 @@ demangle_const_char (struct rust_demangler *rdm)
   else if (value == '\n')
     PRINT ("\\n");
   else if (value > ' ' && value < '~')
-    /* Rust also considers many non-ASCII codepoints to be printable, but
-       that logic is not easily ported to C. */
-    print_str (rdm, (char *) &value, 1);
+    {
+      /* Rust also considers many non-ASCII codepoints to be printable, but
+	 that logic is not easily ported to C. */
+      char c = value;
+      print_str (rdm, &c, 1);
+    }
   else
     {
       PRINT ("\\u{");
-- 
2.31.1

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."


More information about the Gcc-patches mailing list