Fix Rust lex selftest when using libiconv
authorTom Tromey <tromey@adacore.com>
Thu, 30 Sep 2021 18:53:55 +0000 (12:53 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 19 Oct 2021 19:22:31 +0000 (13:22 -0600)
The Rust lex selftest fails on our Windows build.  I tracked this down
to a use of UTF-32 as a parameter to convert_between_encodings.  Here,
iconv_open succeeds, but the actual conversion of a tab character
fails with EILSEQ.  I suspect that "UTF-32" is being interpreted as
big-endian, as changing the call to use "UTF-32LE" makes it work.
This patch implements this fix.

gdb/rust-parse.c

index 539e1c8256d9e4149eee0a850578598efcea046d..e12bf29a71d9762ceb7badb5148018973353fb87 100644 (file)
@@ -695,9 +695,16 @@ rust_parser::lex_string ()
          if (is_byte)
            obstack_1grow (&obstack, value);
          else
-           convert_between_encodings ("UTF-32", "UTF-8", (gdb_byte *) &value,
-                                      sizeof (value), sizeof (value),
-                                      &obstack, translit_none);
+           {
+#if WORDS_BIGENDIAN
+#define UTF32 "UTF-32BE"
+#else
+#define UTF32 "UTF-32LE"
+#endif
+             convert_between_encodings (UTF32, "UTF-8", (gdb_byte *) &value,
+                                        sizeof (value), sizeof (value),
+                                        &obstack, translit_none);
+           }
        }
       else if (pstate->lexptr[0] == '\0')
        error (_("Unexpected EOF in string"));