rust: patch bilge-impl to allow compilation with 1.63.0
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 8 Aug 2024 09:26:10 +0000 (11:26 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 5 Nov 2024 13:18:16 +0000 (14:18 +0100)
Apply a patch that removes "let ... else" constructs, replacing them with
"if let ... else" or "let ... = match ...".  "let ... else" was stabilized in
Rust 1.65.0.

Reviewed-by: Junjie Mao <junjie.mao@hotmail.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
.gitattributes
subprojects/bilge-impl-0.2-rs.wrap
subprojects/packagefiles/bilge-impl-1.63.0.patch [new file with mode: 0644]

index 6dc6383d3d1199eca5479353cedb6d83d98d95ce..9ce7a19581a9307ff6178f718eb5386a4470b518 100644 (file)
@@ -5,3 +5,5 @@
 *.rs            diff=rust
 *.rs.inc        diff=rust
 Cargo.lock      diff=toml merge=binary
+
+*.patch         -text -whitespace
index eefb10c36c24007d48833748cf200d67b6ff7ee7..b24c34a9043bebd4055e8296e9ed1db4cf560ada 100644 (file)
@@ -5,3 +5,4 @@ source_filename = bilge-impl-0.2.0.tar.gz
 source_hash = feb11e002038ad243af39c2068c8a72bcf147acf05025dcdb916fcc000adb2d8
 #method = cargo
 patch_directory = bilge-impl-0.2-rs
+diff_files = bilge-impl-1.63.0.patch
diff --git a/subprojects/packagefiles/bilge-impl-1.63.0.patch b/subprojects/packagefiles/bilge-impl-1.63.0.patch
new file mode 100644 (file)
index 0000000..987428a
--- /dev/null
@@ -0,0 +1,45 @@
+--- a/src/shared/discriminant_assigner.rs
++++ b/src/shared/discriminant_assigner.rs
+@@ -26,20 +26,20 @@
+         let discriminant_expr = &discriminant.1;\r
+         let variant_name = &variant.ident;\r
\r
+-        let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr else {\r
++        if let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr {\r
++            let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);\r
++            if discriminant_value > self.max_value() {\r
++                abort!(variant, "Value of variant exceeds the given number of bits")\r
++            }\r
++\r
++            Some(discriminant_value)\r
++        } else {\r
+             abort!(\r
+                 discriminant_expr,\r
+                 "variant `{}` is not a number", variant_name;\r
+                 help = "only literal integers currently supported"\r
+             )\r
+-        };\r
+-\r
+-        let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);\r
+-        if discriminant_value > self.max_value() {\r
+-            abort!(variant, "Value of variant exceeds the given number of bits")\r
+         }\r
+-\r
+-        Some(discriminant_value)\r
+     }\r
\r
+     fn assign(&mut self, variant: &Variant) -> u128 {\r
+--- a/src/shared/fallback.rs
++++ b/src/shared/fallback.rs
+@@ -22,8 +22,9 @@
+             }\r
+             Unnamed(fields) => {\r
+                 let variant_fields = fields.unnamed.iter();\r
+-                let Ok(fallback_value) = variant_fields.exactly_one() else {\r
+-                    abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")\r
++                let fallback_value = match variant_fields.exactly_one() {\r
++                    Ok(ok) => ok,\r
++                    _ => abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")\r
+                 };\r
\r
+                 if !is_last_variant {\r