about summary refs log tree commit diff
path: root/compiler/rustc_mir_build/src/thir
AgeCommit message (Collapse)AuthorLines
2023-10-04Clarify for reviewNadrieril-25/+33
2023-10-03Don't collect `seen` if not neededNadrieril-19/+11
2023-10-03Clarify handling of hidden variantsNadrieril-74/+76
2023-10-03Replace SplitWildcard with a cleaner ConstructorSet abstractionNadrieril-318/+434
2023-10-03Splitting ensures subrange comparison is all we needNadrieril-13/+1
2023-10-03Rework slice splitting apiNadrieril-133/+120
2023-10-03Rework range splitting apiNadrieril-112/+90
2023-10-01Move `eval_bits` optimization upstreamNadrieril-35/+6
2023-10-01Cleanup number literal evaluationNadrieril-91/+102
2023-10-01No need to carry `bias` in `IntRange`Nadrieril-11/+5
2023-10-01Evaluate float consts eagerlyNadrieril-39/+59
2023-09-27fix clippy::{redundant_guards, useless_format}Matthias Krüger-3/+1
2023-09-27Auto merge of #115887 - RalfJung:pat, r=oli-obkbors-11/+17
thir::pattern: update some comments and error type names Follow-up to [these comments](https://github.com/rust-lang/rust/pull/105750#pullrequestreview-1629697578). Please carefully fact-check, I'm new to this area of the compiler!
2023-09-27Auto merge of #116163 - compiler-errors:lazyness, r=oli-obkbors-1/+1
Don't store lazyness in `DefKind::TyAlias` 1. Don't store lazyness of a type alias in its `DefKind`, but instead via a query. 2. This allows us to treat type aliases as lazy if `#[feature(lazy_type_alias)]` *OR* if the alias contains a TAIT, rather than having checks for both in separate parts of the codebase. r? `@oli-obk` cc `@fmease`
2023-09-26Don't store lazyness in DefKindMichael Goulet-1/+1
2023-09-25rename lint; add tracking issueRalf Jung-1/+1
2023-09-24use a must_hold variant for checking PartialEqRalf Jung-5/+10
2023-09-24make sure we always emit the no-PartialEq lint, even if there were other lintsRalf Jung-13/+17
2023-09-24work towards rejecting consts in patterns that do not implement PartialEqRalf Jung-2/+12
2023-09-21rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::ConstRalf Jung-44/+38
2023-09-20the Const::eval_bits methods don't need to be given the TyRalf Jung-9/+9
2023-09-19move ConstValue into mirRalf Jung-3/+3
this way we have mir::ConstValue and ty::ValTree as reasonably parallel
2023-09-18better ICE than sorryRalf Jung-0/+3
2023-09-16thir::pattern: update some comments and error type namesRalf Jung-11/+14
2023-09-14move required_consts check to general post-mono-check functionRalf Jung-4/+4
2023-09-14make it more clear which functions create fresh AllocIdRalf Jung-1/+1
2023-09-13make the set of methods between our two Const types more consistentRalf Jung-2/+2
2023-09-13make the eval() functions on our const types return the resulting valueRalf Jung-0/+2
2023-09-03Auto merge of #115270 - sebastiantoh:issue-105479, r=Nadrierilbors-37/+39
Add note on non-exhaustiveness when matching on str and nested non-exhaustive enums Fixes https://github.com/rust-lang/rust/issues/105479 r? `@Nadrieril`
2023-09-03Improve clarity of diagnostic message on non-exhaustive matchesSebastian Toh-2/+2
2023-09-03Fix code that now emits unused doc comment warning for expr fieldGurinder Singh-2/+2
2023-08-28Add note when matching on nested non-exhaustive enumsSebastian Toh-31/+29
2023-08-28Add note that str cannot be matched exhaustivelySebastian Toh-6/+10
2023-08-21Add note when matching on tuples/ADTs containing non-exhaustive typesSebastian Toh-14/+31
2023-08-15Rollup merge of #114819 - estebank:issue-78124, r=compiler-errorsMatthias Krüger-4/+7
Point at return type when it influences non-first `match` arm When encountering code like ```rust fn foo() -> i32 { match 0 { 1 => return 0, 2 => "", _ => 1, } } ``` Point at the return type and not at the prior arm, as that arm has type `!` which isn't influencing the arm corresponding to arm `2`. Fix #78124.
2023-08-15Deny FnDef in patternsMichael Goulet-1/+6
2023-08-14Move scrutinee `HirId` into `MatchSource::TryDesugar`Esteban Küber-4/+7
2023-08-14Remove unnecessary FIXMEouz-a-1/+0
2023-08-08Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, ↵Matthias Krüger-1/+1
r=oli-obk Store the laziness of type aliases in their `DefKind` Previously, we would treat paths referring to type aliases as *lazy* type aliases if the current crate had lazy type aliases enabled independently of whether the crate which the alias was defined in had the feature enabled or not. With this PR, the laziness of a type alias depends on the crate it is defined in. This generally makes more sense to me especially if / once lazy type aliases become the default in a new edition and we need to think about *edition interoperability*: Consider the hypothetical case where the dependency crate has an older edition (and thus eager type aliases), it exports a type alias with bounds & a where-clause (which are void but technically valid), the dependent crate has the latest edition (and thus lazy type aliases) and it uses that type alias. Arguably, the bounds should *not* be checked since at any time, the dependency crate should be allowed to change the bounds at will with a *non*-major version bump & without negatively affecting downstream crates. As for the reverse case (dependency: lazy type aliases, dependent: eager type aliases), I guess it rules out anything from slight confusion to mild annoyance from upstream crate authors that would be caused by the compiler ignoring the bounds of their type aliases in downstream crates with older editions. --- This fixes #114468 since before, my assumption that the type alias associated with a given weak projection was lazy (and therefore had its variances computed) did not necessarily hold in cross-crate scenarios (which [I kinda had a hunch about](https://github.com/rust-lang/rust/pull/114253#discussion_r1278608099)) as outlined above. Now it does hold. `@rustbot` label F-lazy_type_alias r? `@oli-obk`
2023-08-07Store the laziness of type aliases in the DefKindLeón Orell Valerian Liehr-1/+1
2023-08-04Rollup merge of #114434 - Nilstrieb:indexing-spans, r=est31Matthias Krüger-2/+8
Improve spans for indexing expressions fixes #114388 Indexing is similar to method calls in having an arbitrary left-hand-side and then something on the right, which is the main part of the expression. Method calls already have a span for that right part, but indexing does not. This means that long method chains that use indexing have really bad spans, especially when the indexing panics and that span in coverted into a panic location. This does the same thing as method calls for the AST and HIR, storing an extra span which is then put into the `fn_span` field in THIR. r? compiler-errors
2023-08-04Improve spans for indexing expressionsNilstrieb-2/+8
Indexing is similar to method calls in having an arbitrary left-hand-side and then something on the right, which is the main part of the expression. Method calls already have a span for that right part, but indexing does not. This means that long method chains that use indexing have really bad spans, especially when the indexing panics and that span in coverted into a panic location. This does the same thing as method calls for the AST and HIR, storing an extra span which is then put into the `fn_span` field in THIR.
2023-08-04Rollup merge of #114022 - oli-obk:tait_ice_alias_field_projection, r=cjgillotMatthias Krüger-0/+3
Perform OpaqueCast field projection on HIR, too. fixes #105819 This is necessary for closure captures in 2021 edition, as they capture individual fields, not the full mentioned variables. So it may try to capture a field of an opaque (because the hidden type is known to be something with a field). See https://github.com/rust-lang/rust/pull/99806 for when and why we added OpaqueCast to MIR.
2023-07-25inline format!() args from rustc_codegen_llvm to the end (4)Matthias Krüger-30/+21
r? @WaffleLapkin
2023-07-24Perform OpaqueCast field projection on HIR, too.Oli Scherer-0/+3
This is necessary for closure captures in 2021 edition, as they capture individual fields, not the full mentioned variables. So it may try to capture a field of an opaque (because the hidden type is known to be something with a field).
2023-07-14refactor(rustc_middle): Substs -> GenericArgMahdi Dibaiee-99/+93
2023-07-12Re-format let-else per rustfmt updateMark Rousskov-1/+3
2023-07-10Do not set up wrong span for adjustmentsMichael Goulet-28/+1
2023-07-08Rollup merge of #113217 - ericmarkmartin:lower-type-relative-ctor-to-adt, ↵Matthias Krüger-15/+32
r=cjgillot resolve typerelative ctors to adt Associated issue: #110508 r? ``@spastorino``
2023-07-07Rename `adjustment::PointerCast` and variants using it to `PointerCoercion`Nilstrieb-7/+12
It makes it sound like the `ExprKind` and `Rvalue` are supposed to represent all pointer related casts, when in reality their just used to share a some enum variants. Make it clear there these are only coercion to make it clear why only some pointer related "casts" are in the enum.