-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Typecheck patterns of all match arms first, so we get types for bindings #55819
Typecheck patterns of all match arms first, so we get types for bindings #55819
Conversation
r? @estebank (rust_highfive has picked a reviewer for you, use r? to override) |
Might this PR fix this issue? #55820 |
@bors r+ |
📌 Commit 5f91373 has been approved by |
Accepting for backport. |
…ts-eagerly, r=oli-obk Typecheck patterns of all match arms first, so we get types for bindings Fix eventually (after backport to beta) the issue rust-lang#55810
Rollup of 17 pull requests Successful merges: - #55630 (resolve: Filter away macro prelude in modules with `#[no_implicit_prelude]` on 2018 edition) - #55687 (Take supertraits into account when calculating associated types) - #55745 (Convert `outlives_components`' return value to a `SmallVec` outparam.) - #55764 (Fix Rc/Arc allocation layout) - #55792 (Prevent ICE in const-prop array oob check) - #55799 (Removed unneeded instance of `// revisions` from a lint test) - #55800 (Fix ICE in `return_type_impl_trait`) - #55801 (NLL: Update box insensitivity test) - #55802 (Don't inline virtual calls (take 2)) - #55816 (Use `SmallVec` to avoid allocations in `from_decimal_string`.) - #55819 (Typecheck patterns of all match arms first, so we get types for bindings) - #55822 (ICE with #![feature(nll)] and elided lifetimes) - #55828 (Add missing `rustc_promotable` attribute to unsigned `min_value` and `max_value`) - #55839 (Fix docstring spelling mistakes) - #55844 (Fix documentation typos.) - #55845 (Set BINARYEN_TRAP_MODE=clamp) - #55856 (rustdoc: refactor: move all static-file include!s into a single module)
☔ The latest upstream changes (presumably #55859) made this pull request unmergeable. Please resolve the merge conflicts. |
// bindings. | ||
let all_arm_pats_diverge = arms.iter().map(|arm| { | ||
// rust-lang/rust#55810: Typecheck patterns first (via eager | ||
// collection into `Vec`), so we get types for all bindings. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ahh, had I seen this PR, I would've suggested adding a note that the map
below has side-effects in terms of type inference (unifying the types of all the arms together), and that's why it has to fully complete first.
Fix eventually (after backport to beta) the issue #55810