Patch | Description | Author | Forwarded | Bugs | Origin | Last update |
---|---|---|---|---|---|---|
rustc-1.77.patch | commit 618d64c2e0c3faa1acc5bf2cd2c7b7fa73b479e9 Fix `proc macro panicked` with `Invalid type` in `const_random!` in Rust 1.77. With Rust nightly 1.77, any invocation of `const_random!` with a `u8` array causes a compile-time panic. This can be seen when running `cargo test`: ``` error: proc macro panicked --> tests/tests.rs:52:28 | 52 | const VALUE1: &[u8] = &const_random!([u8; 30]); | ^^^^^^^^^^^^^^^^^^^^^^^ | = help: message: Invalid type ``` This is because the proc macro starts by calling `to_string` on the input token stream, and then uses substring matching to "parse" it. In Rust 1.77 the `Display` impl for `TokenStream` has changed, and what used to be converted to the string `"[u8 ; 30]"` is now `"[u8; 30]"`. As a result, the `byte_array.starts_with("[u8 ; ")` call fails. Note that substring matching is inherently flawed because the whitespace in the output of `to_string` is not guaranteed. This commit rewrites the proc macro to be robust in the face of `to_string` whitespace changes, by iterating over the individual `TokenTrees`s. The commit also adds a comment explaining why `usize` and `isize` are handled differently, because it's subtle. Note: I ran `cargo fmt` within `macro/` to format the changes to `macro/src/lib.rs` and it made some minor changes to `macro/src/span.rs` as well. diff --git macro/src/lib.rs macro/src/lib.rs index f65695631..732028394 100644 |
Nicholas Nethercote <n.nethercote@gmail.com> | no | 2024-01-26 |