about summary refs log tree commit diff
path: root/tests/ui/pattern/usefulness
AgeCommit message (Collapse)AuthorLines
2023-12-20Reveal opaque types in exhaustiveness checkingNadrieril-9/+39
2023-12-20Add testsNadrieril-0/+217
2023-12-09Don't warn an empty pattern unreachable if we're not sure the data is validNadrieril-597/+87
2023-12-09Test empty types betterNadrieril-489/+2595
2023-12-04Remove the `precise_pointer_size_matching` feature gateNadrieril-63/+24
2023-11-26Auto merge of #117611 - Nadrieril:linear-pass-take-4, r=cjgillotbors-91/+120
Rewrite exhaustiveness in one pass This is at least my 4th attempt at this in as many years x) Previous attempts were all too complicated or too slow. But we're finally here! The previous version of the exhaustiveness algorithm computed reachability for each arm then exhaustiveness of the whole match. Since each of these steps does roughly the same things, this rewrites the algorithm to do them all in one go. I also think this makes things much simpler. I also rewrote the documentation of the algorithm in depth. Hopefully it's up-to-date and easier to follow now. Plz comment if anything's unclear. r? `@oli-obk` I think you're one of the rare other people to understand the exhaustiveness algorithm? cc `@varkor` I know you're not active anymore, but if you feel like having a look you might enjoy this :D Fixes https://github.com/rust-lang/rust/issues/79307
2023-11-24Show number in error message even for one errorNilstrieb-31/+31
Co-authored-by: Adrian <adrian.iosdev@gmail.com>
2023-11-22Fully rework the algorithm and its explanationNadrieril-27/+34
2023-11-22Keep rows with guards in the matrixNadrieril-14/+14
2023-11-22Add some testsNadrieril-55/+77
2023-11-08Auto merge of #116930 - RalfJung:raw-ptr-match, r=davidtwcobors-14/+94
patterns: reject raw pointers that are not just integers Matching against `0 as *const i32` is fine, matching against `&42 as *const i32` is not. This extends the existing check against function pointers and wide pointers: we now uniformly reject all these pointer types during valtree construction, and then later lint because of that. See [here](https://github.com/rust-lang/rust/pull/116930#issuecomment-1784654073) for some more explanation and context. Also fixes https://github.com/rust-lang/rust/issues/116929. Cc `@oli-obk` `@lcnr`
2023-11-03Tweak spans for "adt defined here" noteNadrieril-134/+148
2023-11-02Always do all the pattern checksNadrieril-4/+22
2023-11-02Add regression test for pattern checksNadrieril-0/+72
2023-11-02Tweak diagnostic for consistencyNadrieril-57/+109
2023-10-28make pointer_structural_match warn-by-defaultRalf Jung-14/+94
2023-10-27Match usize/isize exhaustivelyNadrieril-243/+194
2023-10-27Add testsNadrieril-14/+80
2023-10-27Lint overlapping ranges as a separate passNadrieril-15/+58
2023-10-14Skip most of check_match checks in the presence of `PatKind::Error`Nadrieril-34/+9
2023-10-12Auto merge of #116391 - Nadrieril:constructorset, r=cjgillotbors-0/+61
exhaustiveness: Rework constructor splitting `SplitWildcard` was pretty opaque. I replaced it with a more legible abstraction: `ConstructorSet` represents the set of constructors for patterns of a given type. This clarifies responsibilities: `ConstructorSet` handles one clear task, and diagnostic-related shenanigans can be done separately. I'm quite excited, I had has this in mind for years but could never quite introduce it. This opens up possibilities, including type-specific optimisations (like using a `FxHashSet` to collect enum variants, which had been [hackily attempted some years ago](https://github.com/rust-lang/rust/pull/76918)), my one-pass rewrite (https://github.com/rust-lang/rust/pull/116042), and future librarification.
2023-10-11Prevent spurious `unreachable pattern` lintsOli Scherer-138/+28
Means you'll get more `non-exhaustive` patterns
2023-10-05Fix handling slices of empty typesNadrieril-0/+61
2023-10-01Evaluate float consts eagerlyNadrieril-15/+77
2023-09-03Improve clarity of diagnostic message on non-exhaustive matchesSebastian Toh-5/+5
2023-08-28Add note when matching on nested non-exhaustive enumsSebastian Toh-0/+42
2023-08-28Add note that str cannot be matched exhaustivelySebastian Toh-0/+31
2023-08-21Add note when matching on tuples/ADTs containing non-exhaustive typesSebastian Toh-0/+245
2023-06-28add comment backEric Mark Martin-1/+2
2023-06-28add note for non-exhaustive matches with guardsEric Mark Martin-24/+55
2023-05-25Add NOTE annotations.Camille GILLOT-75/+141
2023-05-25Add inter-crate test.Camille GILLOT-40/+75
2023-05-15Always fall back to PartialEq when a constant in a pattern is not ↵Oli Scherer-40/+53
recursively structural-eq
2023-04-03Reinstate confusion note.Camille GILLOT-0/+4
2023-04-03Perform match checking on THIR.Camille GILLOT-168/+168
2023-03-27Add notes to non-structural const in pattern error messageJamen Marz-0/+32
2023-01-11Translate `Overlap` eagerlymejrs-0/+1
2023-01-11Don't recommend `if let` if `let else` worksmejrs-10/+2
2023-01-11Migrate pattern matchingmejrs-59/+65
2023-01-11Migrate deconstruct_pat.rsmejrs-1/+0
2023-01-11Move /src/test to /testsAlbert Larsan-0/+6440