]> git.lizzy.rs Git - rust.git/commit
Auto merge of #12409 - lowr:fix/usize-overflow, r=Veykril
authorbors <bors@rust-lang.org>
Sun, 29 May 2022 08:45:15 +0000 (08:45 +0000)
committerbors <bors@rust-lang.org>
Sun, 29 May 2022 08:45:15 +0000 (08:45 +0000)
commitf94fa62d69faf5bd63b3772d3ec4f0c76cf2db57
tree8981372169c9dfa5dcc6c6025af06d7e2a282d10
parent6c9fc4fec2193ebfa7ed7eb163b6eea925b56f7b
parentbe2fa2b31b9e6b01ed96f41061a231ea45a54216
Auto merge of #12409 - lowr:fix/usize-overflow, r=Veykril

fix overflow during type inference for tuple struct patterns

The following code causes integer overflow during type inference for (malformed) tuple struct patterns.

```rust
struct S(usize);
let S(.., a, b) = S(1);
```

It has been panicking only in debug builds, and working in a way in release builds but it was inconsistent with type inference for tuple patterns:

```rust
struct S(usize);
let S(.., a, b) = S(1); // a -> unknown, b -> usize
let (.., a, b) = (1,);  // a -> usize, b -> unknown
```

With this PR, the overflow no longer happens by utilizing `saturating_sub()` like in other places and type inference for tuple struct patterns is in line with that for tuple patterns.