about summary refs log tree commit diff
path: root/compiler/rustc_mir_build/src/thir
AgeCommit message (Collapse)AuthorLines
2023-07-05Move `TyCtxt::mk_x` to `Ty::new_x` where applicableBoxy-9/+15
2023-07-04Replace `mk_const` with `Const::new_x` methodsBoxy-7/+15
2023-07-02refactorEric Mark Martin-17/+19
2023-06-30resolve typerelative ctors to adtEric Mark Martin-12/+27
2023-06-28remove cruftEric Mark Martin-1/+0
2023-06-28use translatable subdiagnosticEric Mark Martin-1/+2
2023-06-28add note for non-exhaustive matches with guardsEric Mark Martin-0/+5
2023-06-27`thir`: Add `Become` expression kindMaybe Waffle-6/+8
2023-06-26`hir`: Add `Become` expression kindMaybe Waffle-0/+5
2023-06-20merge `BorrowKind::Unique` into `BorrowKind::Mut`Ziru Niu-7/+11
2023-06-16Re-use the deref-pattern recursion instead of duplicating the logicOli Scherer-59/+26
2023-06-04Show note for type ascription interpreted as a constant pattern, not a new ↵许杰友 Jieyou Xu (Joe)-1/+6
variable Given the code ```rust pub fn main() { const y: i32 = 4; let y: i32 = 3; } ``` `y` in the let binding is actually interpreted as a constant pattern and is not a new variable, causing confusing diagnostics about refutable patterns in local binding. This commit extends the note for type ascription as a constant pattern to `AscribeUserType` patterns as well.
2023-06-02Separate AnonConst from ConstBlock in HIR.Camille GILLOT-11/+4
2023-05-31Inline from_inline_const into its sole call siteOli Scherer-32/+61
2023-05-31Explain and simplify valtree -> mir-const fallbackOli Scherer-7/+9
2023-05-31`bug!` message nitOli Scherer-1/+1
2023-05-31Simplify an `if let Some` to a `?`Oli Scherer-13/+10
2023-05-31Remove some dead codeOli Scherer-15/+2
2023-05-31Remove `lit_to_mir_constant` queryOli Scherer-9/+10
2023-05-31Remove `deref_mir_constant`Oli Scherer-3/+0
2023-05-31Only rewrite valtree-constants to patterns and keep other constants opaqueOli Scherer-156/+224
2023-05-30Remove a hack that has become obsolete after ↵Oli Scherer-13/+1
https://github.com/rust-lang/rust/pull/108080
2023-05-30Get `lit_to_const` in sync with `const_to_valtree_inner`Oli Scherer-0/+13
Without this, we'd have a discrepancy where float literals are not lowered to valtrees, but float constants are.
2023-05-29Rename `tcx.mk_re_*` => `Region::new_*`Maybe Waffle-1/+1
2023-05-26Rollup merge of #111951 - cjgillot:uninh-comment, r=NadrierilMatthias Krüger-2/+2
Correct comment on privately uninhabited pattern. Follow-up to https://github.com/rust-lang/rust/pull/111624#discussion_r1204767933 r? `@Nadrieril`
2023-05-25Rollup merge of #111757 - lowr:fix/lint-attr-on-match-arm, r=eholkMichael Goulet-23/+35
Consider lint check attributes on match arms Currently, lint check attributes on match arms have no effect for some lints. This PR makes some lint passes to take those attributes into account. - `LateContextAndPass` for late lint doesn't update `last_node_with_lint_attrs` when it visits match arms. This leads to lint check attributes on match arms taking no effects on late lints that operate on the arms' pattern: ```rust match value { #[deny(non_snake_case)] PAT => {} // `non_snake_case` only warned due to default lint level } ``` To be honest, I'm not sure whether this is intentional or just an oversight. I've dug the implementation history and searched up issues/PRs but couldn't find any discussion on this. - `MatchVisitor` doesn't update its lint level when it visits match arms. This leads to check lint attributes on match arms taking no effect on some lints handled by this visitor, namely: `bindings_with_variant_name` and `irrefutable_let_patterns`. This seems to be a fallout from #108504. Before 05082f57afbf5d2e8fd7fb67719336d78b58e759, when the visitor operated on HIR rather than THIR, check lint attributes for the said lints were effective. [This playground][play] compiles successfully on current stable (1.69) but fails on current beta and nightly. I wasn't sure where best to place the test for this. Let me know if there's a better place. [play]: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=38432b79e535cb175f8f7d6d236d29c3 [play-match]: https://play.rust-lang.org/?version=beta&mode=debug&edition=2021&gist=629aa71b7c84b269beadeba664e2221d
2023-05-25Correct comment on privately uninhabited pattern.Camille GILLOT-2/+2
2023-05-25Rollup merge of #111624 - cjgillot:private-uninhabited-pattern, r=petrochenkovMatthias Krüger-0/+18
Emit diagnostic for privately uninhabited uncovered witnesses. Fixes https://github.com/rust-lang/rust/issues/104034 cc `@Nadrieril`
2023-05-24Emit diagnostic for privately uninhabited uncovered witnesses.Camille GILLOT-0/+18
2023-05-24Use `Option::is_some_and` and `Result::is_ok_and` in the compilerMaybe Waffle-2/+2
2023-05-19Drive-by-cleanup: Don't emit `thir::ExprKind::NeverToAny` for `! -> !`Maybe Waffle-0/+1
2023-05-19Consider lint check attributes on match arms in match checksRyo Yoshida-23/+35
2023-05-16Document how constants as opaque patterns behave differently.Oli Scherer-4/+20
2023-05-15Update some commentsOli Scherer-9/+5
2023-05-15Always fall back to PartialEq when a constant in a pattern is not ↵Oli Scherer-31/+20
recursively structural-eq
2023-05-11Rollup merge of #108705 - clubby789:refutable-let-closure-borrow, r=cjgillotMatthias Krüger-11/+14
Prevent ICE with broken borrow in closure r? `@Nilstrieb` Fixes #108683 This solution isn't ideal, I'm hoping to find a way to continue compilation without ICEing.
2023-05-04Auto merge of #110806 - WaffleLapkin:unmkI, r=lcnrbors-1/+1
Replace `tcx.mk_trait_ref` with `TraitRef::new` First step in implementing https://github.com/rust-lang/compiler-team/issues/616 r? `@lcnr`
2023-05-03Restrict `From<S>` for `{D,Subd}iagnosticMessage`.Nicholas Nethercote-7/+7
Currently a `{D,Subd}iagnosticMessage` can be created from any type that impls `Into<String>`. That includes `&str`, `String`, and `Cow<'static, str>`, which are reasonable. It also includes `&String`, which is pretty weird, and results in many places making unnecessary allocations for patterns like this: ``` self.fatal(&format!(...)) ``` This creates a string with `format!`, takes a reference, passes the reference to `fatal`, which does an `into()`, which clones the reference, doing a second allocation. Two allocations for a single string, bleh. This commit changes the `From` impls so that you can only create a `{D,Subd}iagnosticMessage` from `&str`, `String`, or `Cow<'static, str>`. This requires changing all the places that currently create one from a `&String`. Most of these are of the `&format!(...)` form described above; each one removes an unnecessary static `&`, plus an allocation when executed. There are also a few places where the existing use of `&String` was more reasonable; these now just use `clone()` at the call site. As well as making the code nicer and more efficient, this is a step towards possibly using `Cow<'static, str>` in `{D,Subd}iagnosticMessage::{Str,Eager}`. That would require changing the `From<&'a str>` impls to `From<&'static str>`, which is doable, but I'm not yet sure if it's worthwhile.
2023-05-01fix doc test in mir_build for removing type ascriptionyukang-2/+1
2023-05-01Rollup merge of #111015 - cjgillot:chained-let-and, r=compiler-errorsMatthias Krüger-3/+0
Remove wrong assertion in match checking. This assertions is completely misguided, introduced by https://github.com/rust-lang/rust/pull/108504. The responsible PR is on beta, nominating for backport. Instead of checking that this is not a `&&`, it would make sense to check that neither arms of that `&&` is a `let`. This seems like a lot of code for unclear benefit. r? `@saethlin`
2023-04-30Bail out of MIR construction if `check_match` failsclubby789-11/+14
2023-04-30Remove wrong assertion.Camille GILLOT-3/+0
2023-04-25Replace `tcx.mk_trait_ref` with `ty::TraitRef::new`Maybe Waffle-1/+1
2023-04-24Split `{Idx, IndexVec, IndexSlice}` into their own modulesMaybe Waffle-5/+5
2023-04-22Auto merge of #106934 - DrMeepster:offset_of, r=WaffleLapkinbors-0/+21
Add offset_of! macro (RFC 3308) Implements https://github.com/rust-lang/rfcs/pull/3308 (tracking issue #106655) by adding the built in macro `core::mem::offset_of`. Two of the future possibilities are also implemented: * Nested field accesses (without array indexing) * DST support (for `Sized` fields) I wrote this a few months ago, before the RFC merged. Now that it's merged, I decided to rebase and finish it. cc `@thomcc` (RFC author)
2023-04-21minor tweaksDrMeepster-1/+1
2023-04-21intern offsetof fieldsDrMeepster-1/+1
2023-04-21offset_ofDrMeepster-0/+21
2023-04-20Remove WithOptconstParam.Camille GILLOT-16/+15
2023-04-17Spelling - compilerJosh Soref-1/+1
* account * achieved * advising * always * ambiguous * analysis * annotations * appropriate * build * candidates * cascading * category * character * clarification * compound * conceptually * constituent * consts * convenience * corresponds * debruijn * debug * debugable * debuggable * deterministic * discriminant * display * documentation * doesn't * ellipsis * erroneous * evaluability * evaluate * evaluation * explicitly * fallible * fulfill * getting * has * highlighting * illustrative * imported * incompatible * infringing * initialized * into * intrinsic * introduced * javascript * liveness * metadata * monomorphization * nonexistent * nontrivial * obligation * obligations * offset * opaque * opportunities * opt-in * outlive * overlapping * paragraph * parentheses * poisson * precisely * predecessors * predicates * preexisting * propagated * really * reentrant * referent * responsibility * rustonomicon * shortcircuit * simplifiable * simplifications * specify * stabilized * structurally * suggestibility * translatable * transmuting * two * unclosed * uninhabited * visibility * volatile * workaround Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>