]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Rust: Work around 'error[E0658]: `let...else` statements are unstable'
authorThomas Schwinge <tschwinge@baylibre.com>
Sat, 3 Aug 2024 14:08:42 +0000 (16:08 +0200)
committerThomas Schwinge <tschwinge@baylibre.com>
Mon, 9 Dec 2024 09:48:40 +0000 (10:48 +0100)
Compiling with Debian GNU/Linux 12 (bookworm) packages:

    $ apt-cache madison cargo rustc
         cargo | 0.66.0+ds1-1 | http://deb.debian.org/debian bookworm/main ppc64el Packages
         cargo | 0.66.0+ds1-1 | http://deb.debian.org/debian bookworm/main Sources
         rustc | 1.63.0+dfsg1-2 | http://deb.debian.org/debian bookworm/main ppc64el Packages
         rustc | 1.63.0+dfsg1-2 | http://deb.debian.org/debian bookworm/main Sources

..., we run into:

       Compiling generic_format_parser v0.1.0 ([...]/source-gcc/libgrust/libformat_parser/generic_format_parser)
    error[E0658]: `let...else` statements are unstable
       --> generic_format_parser/src/lib.rs:994:5
        |
    994 | /     let Some(unescaped) = unescape_string(snippet) else {
    995 | |         return InputStringKind::NotALiteral;
    996 | |     };
        | |______^
        |
        = note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information

Rewrite backwards, per <https://rust-lang.github.io/rfcs/3137-let-else.html>.

libgrust/
* libformat_parser/generic_format_parser/src/lib.rs: Work around
'error[E0658]: `let...else` statements are unstable'.

libgrust/libformat_parser/generic_format_parser/src/lib.rs

index 8062bf9e5cec95c60213c44e835f09afd6e8fbbc..ed3d8577befa9460bd34d79d9386d792fa541742 100644 (file)
@@ -991,8 +991,11 @@ fn find_width_map_from_snippet(
     // If we only trimmed it off the input, `format!("\n")` would cause a mismatch as here we they actually match up.
     // Alternatively, we could just count the trailing newlines and only trim one from the input if they don't match up.
     let input_no_nl = input.trim_end_matches('\n');
-    let Some(unescaped) = unescape_string(snippet) else {
-        return InputStringKind::NotALiteral;
+    let unescaped = match unescape_string(snippet) {
+        Some(unescaped) => unescaped,
+        _ => {
+            return InputStringKind::NotALiteral;
+        }
     };
 
     let unescaped_no_nl = unescaped.trim_end_matches('\n');