rust/tests
Matthias Krüger 5d52b37a81
Rollup merge of #140028 - dianne:lit-deref-pats-p1, r=oli-obk
`deref_patterns`: support string and byte string literals in explicit `deref!("...")` patterns

When `deref_patterns` is enabled, this allows string literal patterns to be used where `str` is expected and byte string literal patterns to be used where `[u8]` or `[u8; N]` is expected. This lets them be used in explicit `deref!("...")` patterns to match on `String`, `Box<str>`, `Vec<u8>`, `Box<[u8;N]>`, etc. (as well as to match on slices and arrays obtained through other means). Implementation-wise, this follows up on #138992: similar to how byte string literals matching on `&[u8]` is implemented, this changes the type of the patterns as determined by HIR typeck, which informs const-to-pat on how to translate them to THIR (though strings needed a bit of extra work since we need references to call `<str as PartialEq>::eq` in the MIR lowering for string equality tests).

This PR does not add support for implicit deref pattern syntax (e.g. `"..."` matching on `String`, as `string_deref_patterns` allows). I have that implemented locally, but I'm saving it for a follow-up PR[^1].

This also does not add support for using named or associated constants of type `&str` where `str` is expected (nor likewise with named byte string constants). It'd be possible to add that if there's an appetite for it, but I figure it's simplest to start with literals.

This is gated by the `deref_patterns` feature since it's motivated by deref patterns. That said, its impact reaches outside of deref patterns; it may warrant a separate experiment and feature gate, particularly factoring in the follow-up[^1]. Even without deref patterns, I think there's probably motivation for these changes.

The update to the unstable book added by this will conflict with #140022, so they shouldn't be merged at the same time.

Tracking issue for deref patterns: #87121

r? ``@oli-obk``
cc ``@Nadrieril``

[^1]: The piece missing from this PR to support implicit deref pattern syntax is to allow string literal patterns to implicitly dereference their scrutinees before matching (see #44849). As a consequence, it also makes examples like the one in that issue work (though it's still gated by `deref_patterns`). I can provide more information on how I've implemented it or open a draft if it'd help in reviewing this PR.
2025-04-24 08:13:00 +02:00
..
assembly Auto merge of #139309 - RalfJung:abi_unsupported_vector_types, r=fee1-dead,traviscross 2025-04-24 00:44:40 +00:00
auxiliary stabilize naked_functions 2025-04-20 11:18:38 +02:00
codegen Auto merge of #139309 - RalfJung:abi_unsupported_vector_types, r=fee1-dead,traviscross 2025-04-24 00:44:40 +00:00
codegen-units
coverage Update the minimum external LLVM to 19 2025-04-05 11:44:38 -07:00
coverage-run-rustdoc Update coverage-run-rustdoc output 2025-03-28 10:35:53 +01:00
crashes Rollup merge of #140021 - compiler-errors:no-deep-norm-ice, r=lcnr 2025-04-21 15:55:58 +00:00
debuginfo Rollup merge of #138599 - adwinwhite:recursive-overflow, r=wesleywiser 2025-04-18 05:17:53 +02:00
incremental UI tests: migrate remaining compile time error-patterns to line annotations 2025-04-13 21:48:53 +03:00
mir-opt Auto merge of #132833 - est31:stabilize_let_chains, r=fee1-dead 2025-04-22 07:54:10 +00:00
pretty move autodiff pretty test to a autodiff sub module 2025-04-22 09:53:08 +05:30
run-make Auto merge of #139309 - RalfJung:abi_unsupported_vector_types, r=fee1-dead,traviscross 2025-04-24 00:44:40 +00:00
rustdoc Rollup merge of #139913 - fmease:rustdoc-fix-fn-param-handling, r=GuillaumeGomez 2025-04-18 05:16:31 +02:00
rustdoc-gui Add regression test for #139282 2025-04-07 17:28:46 +02:00
rustdoc-js rustdoc-search: add unbox flag to Result aliases 2025-04-11 11:36:40 -07:00
rustdoc-js-std rustdoc-search: add unbox flag to Result aliases 2025-04-11 11:36:40 -07:00
rustdoc-json Rollup merge of #140076 - aDotInTheVoid:jsondocline, r=GuillaumeGomez 2025-04-21 18:53:19 +00:00
rustdoc-ui Add regression test for #140026 2025-04-19 21:10:40 +02:00
ui Rollup merge of #140028 - dianne:lit-deref-pats-p1, r=oli-obk 2025-04-24 08:13:00 +02:00
ui-fulldeps Move eager translation to a method on Diag 2025-04-16 21:38:59 -04:00
COMPILER_TESTS.md