about summary refs log tree commit diff
path: root/compiler/rustc_mir_build/src/thir
AgeCommit message (Collapse)AuthorLines
2025-02-05Auto merge of #136302 - oli-obk:push-vvqmwzunxsrk, r=compiler-errorsbors-11/+17
Avoid calling the layout_of query in lit_to_const We got all the information available locally
2025-02-05separate labels for default binding mode spans into their own notesdianne-10/+0
2025-02-04Rollup merge of #136526 - Zalathar:thir-cx, r=NadrierilMatthias Krüger-109/+86
mir_build: Rename `thir::cx::Cx` to `ThirBuildCx` and remove `UserAnnotatedTyHelpers` A combination of two loosely-related tweaks that would otherwise conflict with each other: - `Cx` is a pretty unhelpful type name, especially when jumping between THIR-building and MIR-building while trying to make changes to THIR data structures. - The `UserAnnotatedTyHelpers` trait doesn't appear to provide any benefit over a simple helper function, and its `tcx()` method is currently completely unnecessary. No functional change.
2025-02-04experimentally label the spans for default binding modesdianne-35/+88
2025-02-03highlight the whole problem subpattern when pointing out the default binding ↵dianne-2/+2
mode
2025-02-04Rename `thir::cx::Cx` to `ThirBuildCx`Zalathar-9/+12
2025-02-04Remove helper trait `UserAnnotatedTyHelpers`Zalathar-100/+74
This trait doesn't appear to provide any benefit over a simple helper function.
2025-02-03reword pattern migration diagnostic to make sense in all editionsdianne-8/+16
This aligns the main error message a bit more with the phrasing in the Edition Guide and provides a bit more information on the labels to (hopefully!) aid in understanding.
2025-02-03pattern migration: move labels out of the suggestion structdianne-13/+11
2025-02-03Avoid double-boxing lists of THIR subpatternsZalathar-7/+7
2025-02-03Remove some non-trivial `box` patternsZalathar-11/+9
These particular patterns make it harder to experiment with alternate representations for THIR patterns and subpatterns.
2025-02-03Remove `'pat` lifetime from some match-lowering data structuresZalathar-1/+2
By storing `PatRange` in an Arc, and copying a few fields out of `Pat`, we can greatly simplify the lifetimes involved in match lowering.
2025-02-03Don't demand `&Box<Pat>` in `print_pat`Zalathar-2/+2
2025-02-03Simplify the pattern unpeeling in `lower_pattern_range_endpoint`Zalathar-26/+25
2025-02-03Return range endpoint ascriptions/consts via a `&mut Vec`Zalathar-12/+19
2025-02-03Flatten the option check in `lower_pattern_range_endpoint`Zalathar-31/+28
2025-02-02Rollup merge of #136328 - estebank:long-ty-path, r=jieyouxu,lqdMatthias Krüger-4/+4
Rework "long type names" printing logic Make it so more type-system types can be printed in a shortened version (like `Predicate`s). Centralize printing the information about the "full type name path". Make the "long type path" for the file where long types are written part of `Diag`, so that it becomes easier to keep track of it, and ensure it will always will be printed out last in the diagnostic by making its addition to the output implicit. Tweak the shortening of types in "expected/found" labels. Remove dead file `note.rs`.
2025-02-01Rollup merge of #130514 - compiler-errors:unsafe-binders, r=oli-obkMatthias Krüger-5/+36
Implement MIR lowering for unsafe binders This is the final bit of the unsafe binders puzzle. It implements MIR, CTFE, and codegen for unsafe binders, and enforces that (for now) they are `Copy`. Later on, I'll introduce a new trait that relaxes this requirement to being "is `Copy` or `ManuallyDrop<T>`" which more closely models how we treat union fields. Namely, wrapping unsafe binders is now `Rvalue::WrapUnsafeBinder`, which acts much like an `Rvalue::Aggregate`. Unwrapping unsafe binders are implemented as a MIR projection `ProjectionElem::UnwrapUnsafeBinder`, which acts much like `ProjectionElem::Field`. Tracking: - https://github.com/rust-lang/rust/issues/130516
2025-01-31Rework "long type names" printing logicEsteban Küber-4/+4
Make it so more type-system types can be printed in a shortened version (like `Predicate`s). Centralize printing the information about the "full type name path". Make the "long type path" for the file where long types are written part of `Diag`, so that it becomes easier to keep track of it, and ensure it will always will be printed out last in the diagnostic by making its addition to the output implicit. Tweak the shortening of types in "expected/found" labels. Remove dead file `note.rs`.
2025-01-31Implement MIR, CTFE, and codegen for unsafe bindersMichael Goulet-5/+36
2025-01-31Rollup merge of #136330 - nnethercote:rm-unnecessary-hooks, r=oli-obkMatthias Krüger-6/+8
Remove unnecessary hooks Some hooks can be downgraded to vanilla functions. r? `@oli-obk`
2025-01-31Remove the `thir_{tree,flat}` hooks.Nicholas Nethercote-6/+8
They were downgraded from queries in #123995 but they can just be vanilla functions because they are not called in `rustc_middle`.
2025-01-30add commentsLukas Markeffsky-0/+1
2025-01-30introduce `ty::Value`Lukas Markeffsky-1/+1
Co-authored-by: FedericoBruzzone <federico.bruzzone.i@gmail.com>
2025-01-30Avoid calling the layout_of query in lit_to_constOli Scherer-13/+15
2025-01-30Don't allow negative unsigned literalsOli Scherer-1/+5
2025-01-29Eliminate PatKind::PathOli Scherer-4/+0
2025-01-27Use identifiers in diagnostics more oftenMichael Goulet-3/+3
2025-01-24Use short ty string for move errorsEsteban Küber-0/+4
``` error[E0382]: use of moved value: `x` --> bay.rs:14:14 | 12 | fn foo(x: D) { | - move occurs because `x` has type `(((..., ..., ..., ...), ..., ..., ...), ..., ..., ...)`, which does not implement the `Copy` trait 13 | let _a = x; | - value moved here 14 | let _b = x; //~ ERROR use of moved value | ^ value used here after move | = note: the full type name has been written to 'bay.long-type-14349227078439097973.txt' = note: consider using `--verbose` to print the full type name to the console help: consider cloning the value if the performance cost is acceptable | 13 | let _a = x.clone(); | ++++++++ ```
2025-01-21add fixme in typoed const pattern lintRémy Rakic-0/+6
2025-01-20Rollup merge of #135310 - estebank:issue-135289, r=Nadrieril许杰友 Jieyou Xu (Joe)-8/+1
Always force non-trimming of path in `unreachable_patterns` lint Creating a "trimmed DefID path" when no error is being emitted is an ICE (on purpose). If we create a trimmed path for a lint that is then silenced before being emitted causes a known ICE. This side-steps the issue by always using `with_no_trimmed_path!`. This was verified to fix https://github.com/quinn-rs/quinn/, but couldn't write a repro case for the test suite. Fix #135289.
2025-01-11review commentsEsteban Küber-57/+67
Replace tuple with struct and remove unnecessary early return.
2025-01-11Avoid unnecessary note when type has escaping boundsEsteban Küber-3/+9
2025-01-11Avoid duplicated noteEsteban Küber-6/+8
2025-01-11Account for `for<'a>` types when checking for non-structural type in ↵Esteban Küber-3/+10
constant as pattern When we encounter a constant in a pattern, we check if it is non-structural. If so, we check if the type implements `PartialEq`, but for types with escaping bound vars the check would be incorrect as is, so we break early. This is ok because these types would be filtered anyways. Fix #134764.
2025-01-09Always force non-trimming of path in `unreachable_patterns` lintEsteban Küber-8/+1
Creating a "trimmed DefID path" when no error is being emitted is an ICE (on purpose). If we create a trimmed path for a lint that is then silenced before being emitted causes a known ICE. This side-steps the issue by always using `with_no_trimmed_path!`. This was verified to fix https://github.com/quinn-rs/quinn/, but couldn't write a repro case for the test suite. Fix #135289.
2025-01-09Remove the now-useless `Result` from `lit_to_const`Oli Scherer-14/+12
2025-01-09Always take the `Ok` path in `lit_to_const` and produce error constants insteadOli Scherer-1/+1
2025-01-09Use error constant instead of explicit error handlingOli Scherer-4/+3
2025-01-08Rename PatKind::Lit to ExprOli Scherer-1/+1
2025-01-08Exhaustively handle expressions in patternsOli Scherer-25/+12
2025-01-07Rollup merge of #134989 - max-niederman:guard-patterns-hir, r=oli-obkMatthias Krüger-0/+3
Lower Guard Patterns to HIR. Implements lowering of [guard patterns](https://rust-lang.github.io/rfcs/3637-guard-patterns.html) (see the [tracking issue](#129967)) to HIR.
2025-01-04Rollup merge of #135046 - RalfJung:rustc_box_intrinsic, r=compiler-errorsJubilee-39/+18
turn rustc_box into an intrinsic I am not entirely sure why this was made a special magic attribute, but an intrinsic seems like a more natural way to add magic expressions to the language.
2025-01-03const-in-pattern: test that the PartialEq impl does not need to be constRalf Jung-0/+4
2025-01-03turn rustc_box into an intrinsicRalf Jung-39/+18
2024-12-31add guard patterns to HIR and implement loweringMax Niederman-0/+3
2024-12-19Rename Scope.id to Scope.local_id, remove trivial accessorMichael Goulet-9/+15
2024-12-17Add the edition guide link from the match 2024 migration lint to the error ↵dianne-0/+4
as well
2024-12-17Clarify the match ergonomics 2024 migration lint's outputdianne-7/+18
2024-12-17Rollup merge of #134400 - spastorino:fix-some-comments, r=compiler-errorsJacob Pratt-1/+1
Fix some comments related to upvars handling I'm tidying up my ergonomic ref counting PR and I'm going to make some small, simple and unrelated changes outside that PR, so the main PR sticks more straight to the point.