about summary refs log tree commit diff
path: root/compiler
AgeCommit message (Collapse)AuthorLines
2025-01-31Fix a comment typo.Nicholas Nethercote-1/+1
2025-01-31Use `.and` chaining to improve readability.Nicholas Nethercote-20/+16
2025-01-31Remove an unnecessary lifetime from `RemapLateParam`.Nicholas Nethercote-5/+4
2025-01-31Remove an unused arg from the trait method `provided_kind`.Nicholas Nethercote-5/+1
2025-01-31Remove unnecessary builders.Nicholas Nethercote-193/+139
`delegation.rs` has three builders: `GenericsBuilder`, `PredicatesBuilder`, and `GenericArgsBuilder`. The first two builders have just two optional parameters, and the third one has zero. Each builder is used within a single function. The code is over-engineered. This commit removes the builders, replacing each with with a single `build_*` function. This makes the code shorter and simpler.
2025-01-31Format `delegation.rs` better.Nicholas Nethercote-22/+15
There is a comment `Delegation to inherent methods is not yet supported.` that appears three times mid-pattern and somehow inhibits rustfmt from formatting the enclosing `match` statement. This commit moves them to the top of the pattern, which enables more formatting.
2025-01-31Merge two identical match arms.Nicholas Nethercote-7/+2
Note: `inherit_predicates_for_delegation_item` already has these cases merged.
2025-01-31Remove an out-of-date `FIXME` comment.Nicholas Nethercote-5/+4
This comment made sense when this crate was called `rustc_typeck`, but makes less sense now that it's called `rustc_hir_analysis`. Especially given that `check_drop_impl` is only called within the crate.
2025-01-31Merge two `match` arms that are identical.Nicholas Nethercote-11/+6
Also rewrite the merged arm slightly to more closely match the arm above it.
2025-01-31Avoid a duplicated error case in `fn_sig_suggestion`.Nicholas Nethercote-9/+5
2025-01-31Clarify a comment.Nicholas Nethercote-1/+2
I was confused here for a bit.
2025-01-30Auto merge of #135030 - Flakebi:require-cpu, r=workingjubileebors-0/+17
Target option to require explicit cpu Some targets have many different CPUs and no generic CPU that can be used as a default. For these targets, the user needs to explicitly specify a CPU through `-C target-cpu=`. Add an option for targets and an error message if no CPU is set. This affects the proposed amdgpu and avr targets. amdgpu tracking issue: #135024 AVR MCP: https://github.com/rust-lang/compiler-team/issues/800
2025-01-30Rollup merge of #136180 - lukas-code:typed-valtree, r=oli-obkMatthias Krüger-208/+237
Introduce a wrapper for "typed valtrees" and properly check the type before extracting the value This PR adds a new wrapper type `ty::Value` to replace the tuple `(Ty, ty::ValTree)` and become the new canonical representation of type-level constant values. The value extraction methods `try_to_bits`/`try_to_bool`/`try_to_target_usize` are moved to this new type. For `try_to_bits` in particular, this avoids some redundant matches on `ty::ConstKind::Value`. Furthermore, these methods and will now properly check the type before extracting the value, which fixes some ICEs. The name `ty::Value` was chosen to be consistent with `ty::Expr`. Commit 1 should be non-functional and commit 2 adds the type check. --- fixes https://github.com/rust-lang/rust/issues/131102 supercedes https://github.com/rust-lang/rust/pull/136130 r? `@oli-obk` cc `@FedericoBruzzone` `@BoxyUwU`
2025-01-30Rollup merge of #135026 - Flakebi:global-addrspace, r=saethlinMatthias Krüger-21/+155
Cast global variables to default address space Pointers for variables all need to be in the same address space for correct compilation. Therefore ensure that even if a global variable is created in a different address space, it is casted to the default address space before its value is used. This is necessary for the amdgpu target and others where the default address space for global variables is not 0. For example `core` does not compile in debug mode when not casting the address space to the default one because it tries to emit the following (simplified) LLVM IR, containing a type mismatch: ```llvm `@alloc_0` = addrspace(1) constant <{ [6 x i8] }> <{ [6 x i8] c"bit.rs" }>, align 1 `@alloc_1` = addrspace(1) constant <{ ptr }> <{ ptr addrspace(1) `@alloc_0` }>, align 8 ; ^ here a struct containing a `ptr` is needed, but it is created using a `ptr addrspace(1)` ``` For this to compile, we need to insert a constant `addrspacecast` before we use a global variable: ```llvm `@alloc_0` = addrspace(1) constant <{ [6 x i8] }> <{ [6 x i8] c"bit.rs" }>, align 1 `@alloc_1` = addrspace(1) constant <{ ptr }> <{ ptr addrspacecast (ptr addrspace(1) `@alloc_0` to ptr) }>, align 8 ``` As vtables are global variables as well, they are also created with an `addrspacecast`. In the SSA backend, after a vtable global is created, metadata is added to it. To add metadata, we need the non-casted global variable. Therefore we strip away an addrspacecast if there is one, to get the underlying global. Tracking issue: #135024
2025-01-30Filter out RPITITs when suggesting unconstrained assoc type on too many genericsMichael Goulet-0/+1
2025-01-30Use proper type when applying deref adjustment in constMichael Goulet-1/+5
2025-01-30review comment: change `span` argumentEsteban Küber-10/+15
2025-01-30Remove `unwrap()`sEsteban Küber-3/+6
2025-01-30Add closure labelsEsteban Küber-2/+2
2025-01-30On E0271 for a closure behind a binding, point at binding in call tooEsteban Küber-0/+4
``` error[E0271]: expected `{closure@return-type-doesnt-match-bound.rs:18:13}` to be a closure that returns `Result<(), _>`, but it returns `!` --> tests/ui/closures/return-type-doesnt-match-bound.rs:18:20 | 18 | let c = |e| -> ! { //~ ERROR to be a closure that returns | -------^ | | | expected `Result<(), _>`, found `!` ... 22 | f().or_else(c); | ------- - | | | required by a bound introduced by this call | = note: expected enum `Result<(), _>` found type `!` note: required by a bound in `Result::<T, E>::or_else` --> /home/gh-estebank/rust/library/core/src/result.rs:1406:39 | 1406 | pub fn or_else<F, O: FnOnce(E) -> Result<T, F>>(self, op: O) -> Result<T, F> { | ^^^^^^^^^^^^ required by this bound in `Result::<T, E>::or_else` ```
2025-01-30When encountering unexpected closure return type, point at return ↵Esteban Küber-24/+84
type/expression ``` error[E0271]: expected `{closure@fallback-closure-wrap.rs:18:40}` to be a closure that returns `()`, but it returns `!` --> $DIR/fallback-closure-wrap.rs:19:9 | LL | let error = Closure::wrap(Box::new(move || { | ------- LL | panic!("Can't connect to server."); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found `!` | = note: expected unit type `()` found type `!` = note: required for the cast from `Box<{closure@$DIR/fallback-closure-wrap.rs:18:40: 18:47}>` to `Box<dyn FnMut()>` ``` ``` error[E0271]: expected `{closure@dont-ice-for-type-mismatch-in-closure-in-async.rs:6:10}` to be a closure that returns `bool`, but it returns `Option<()>` --> $DIR/dont-ice-for-type-mismatch-in-closure-in-async.rs:6:16 | LL | call(|| -> Option<()> { | ---- ------^^^^^^^^^^ | | | | | expected `bool`, found `Option<()>` | required by a bound introduced by this call | = note: expected type `bool` found enum `Option<()>` note: required by a bound in `call` --> $DIR/dont-ice-for-type-mismatch-in-closure-in-async.rs:3:25 | LL | fn call(_: impl Fn() -> bool) {} | ^^^^ required by this bound in `call` ``` ``` error[E0271]: expected `{closure@f670.rs:28:13}` to be a closure that returns `Result<(), _>`, but it returns `!` --> f670.rs:28:20 | 28 | let c = |e| -> ! { | -------^ | | | expected `Result<(), _>`, found `!` ... 32 | f().or_else(c); | ------- required by a bound introduced by this call -Ztrack-diagnostics: created at compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs:1433:28 | = note: expected enum `Result<(), _>` found type `!` note: required by a bound in `Result::<T, E>::or_else` --> /home/gh-estebank/rust/library/core/src/result.rs:1406:39 | 1406 | pub fn or_else<F, O: FnOnce(E) -> Result<T, F>>(self, op: O) -> Result<T, F> { | ^^^^^^^^^^^^ required by this bound in `Result::<T, E>::or_else` ```
2025-01-30More assertions, tests, and miri coverageMichael Goulet-81/+77
2025-01-30Auto merge of #136292 - matthiaskrgr:rollup-fw1tlca, r=matthiaskrgrbors-92/+113
Rollup of 7 pull requests Successful merges: - #133636 ([rustdoc] Add sans-serif font setting) - #135434 (Match Ergonomics 2024: update edition 2024 behavior of feature gates) - #135739 (Clean up uses of the unstable `dwarf_version` option) - #135882 (simplify `similar_tokens` from `Option<Vec<_>>` to `&[_]`) - #136179 (Allow transmuting generic pattern types to and from their base) - #136199 (Fix a couple Emscripten tests) - #136251 (use impl Into<String> instead of explicit type args with bounds) r? `@ghost` `@rustbot` modify labels: rollup
2025-01-30add commentsLukas Markeffsky-1/+10
2025-01-30check the types in `ty::Value` to value conversionLukas Markeffsky-16/+23
and remove `ty::Const::try_to_scalar` because it becomes redundant
2025-01-30introduce `ty::Value`Lukas Markeffsky-194/+207
Co-authored-by: FedericoBruzzone <federico.bruzzone.i@gmail.com>
2025-01-30Avoid calling the layout_of query in lit_to_constOli Scherer-23/+26
2025-01-30Use ExistentialTraitRef throughout codegenMichael Goulet-63/+71
2025-01-30Normalize vtable entries before walking and deduplicating themMichael Goulet-22/+44
2025-01-30Do not treat vtable supertraits as distinct when bound with different bound varsMichael Goulet-113/+121
2025-01-30Remove print_vtable_sizesMichael Goulet-152/+1
2025-01-30Rework rustc_dump_vtableMichael Goulet-35/+92
2025-01-30Don't allow negative unsigned literalsOli Scherer-1/+5
2025-01-30Rollup merge of #136251 - hkBst:opt_imports, r=estebankMatthias Krüger-10/+5
use impl Into<String> instead of explicit type args with bounds
2025-01-30Rollup merge of #136179 - oli-obk:push-vxvyttorquxw, r=BoxyUwUMatthias Krüger-0/+3
Allow transmuting generic pattern types to and from their base Pattern types always have the same size as their base type, so we can just ignore the pattern and look at the base type for figuring out whether transmuting is possible.
2025-01-30Rollup merge of #135882 - hkBst:master, r=estebankMatthias Krüger-22/+18
simplify `similar_tokens` from `Option<Vec<_>>` to `&[_]` All uses immediately invoke contains, so maybe a further simplification is possible.
2025-01-30Rollup merge of #135739 - wesleywiser:dwarf_version_handling, r=lqdMatthias Krüger-27/+34
Clean up uses of the unstable `dwarf_version` option - Consolidate calculation of the effective value. - Check the target `DebuginfoKind` instead of using `is_like_msvc`. - Add the tracking issue to the unstable book page for this feature. cc #103057
2025-01-30Rollup merge of #135434 - dianne:match-2024-for-edition-2024, r=NadrierilMatthias Krüger-33/+53
Match Ergonomics 2024: update edition 2024 behavior of feature gates This updates the edition 2024 behavior of the feature gates `ref_pat_eat_one_layer_2024_structural` and `ref_pat_eat_one_layer_2024` to correspond to the left and right typing rules compared [here](https://nadrieril.github.io/typing-rust-patterns/?compare=true&opts2=AQEBAAABAQABAgIAAQEBAAEBAAABAAA%3D&opts1=AQEBAgEBAQEBAgIAAAAAAAAAAAAAAAA%3D&mode=rules&do_cmp=true&ty_d=3&style=SequentBindingMode), respectively. I'll implement the proposed new behavior for editions ≤ 2021 in another PR. The tests are split up a bit awkwardly for practical reasons, but I've added new tests from 3 places: - I got tests for where the typing rules differ from the "Compare" tab of the page linked above. These had to be split up based on where the errors are emitted and how rustfixable they are, so they've ended up in different files to keep tidy. Within each file, though, the order of the tests matches the order the typing differences appear in that comparison (as of when this was written). - I used [this other comparison](https://nadrieril.github.io/typing-rust-patterns/?q=%5B%26mut+%26%28mut+x%29%5D%3A+%26mut+%5B%26CT%5D&compare=true&opts2=AQEBAgABAQEBAgIAAQEBAAEBAAABAAA%3D&opts1=AQEBAgEBAQEBAgIAAAAAAAAAAAAAAAA%3D&mode=compare&do_cmp=true&ty_d=3&style=SequentBindingMode) to test the `Deref(EatInner, FallbackToOuter)` rule of the left/"structural"/eat-inner ruleset. These are all in `well-typed-edition-2024.rs`. - I added some select tests for cases where the new typing rules differ from current stable Rust. I had to be pickier about what I included here, but I tried to make sure each typing rule got some coverage. That said, my approach for these tests was a bit ad-hoc, so I may have missed something. Relevant tracking issue: #123076 r? ````@ghost````
2025-01-30Auto merge of #136038 - compiler-errors:outlives, r=lcnrbors-195/+163
Simplify and consolidate the way we handle construct `OutlivesEnvironment` for lexical region resolution This is best reviewed commit-by-commit. I tried to consolidate the API for lexical region resolution *first*, then change the API when it was finally behind a single surface. r? lcnr or reassign
2025-01-30use Attribute::getWithCaptureInfoHans Wennborg-2/+1
2025-01-30LLVM changed the nocapture attribute to captures(none)Hans Wennborg-0/+11
This updates RustWrapper.cpp and tests after https://github.com/llvm/llvm-project/pull/123181
2025-01-30Refactor `PointerFinder` into a separate moduleBastian Kersting-160/+272
This also parameterize the "excluded pointee types" and exposes a general method for inserting checks on pointers. This is a preparation for adding a NullCheck that makes use of the same code.
2025-01-30add constraint graph to polonius MIR dumpRémy Rakic-9/+101
2025-01-29Clean up uses of the unstable `dwarf_version` optionWesley Wiser-27/+34
- Consolidate calculation of the effective value. - Check the target `DebuginfoKind` instead of using `is_like_msvc`.
2025-01-29upstream rustc_codegen_ssa/rustc_middle changes for enzyme/autodiffManuel Drehwald-33/+449
2025-01-30Auto merge of #136035 - SpecificProtagonist:miri-zeroed-alloc, r=oli-obkbors-30/+59
miri: optimize zeroed alloc When allocating zero-initialized memory in MIR interpretation, rustc allocates zeroed memory, marks it as initialized and then re-zeroes it. Remove the last step. I don't expect this to have much of an effect on performance normally, but in my case in which I'm creating a large allocation via mmap it gets in the way.
2025-01-30Remove `NamedVarMap`.Nicholas Nethercote-72/+37
`NamedVarMap` is extremely similar to `ResolveBoundVars`. The former contains two `UnordMap<ItemLocalId, T>` fields (obscured behind `ItemLocalMap` typedefs). The latter contains two `SortedMap<ItemLocalId, T>` fields. We construct a `NamedVarMap` and then convert it into a `ResolveBoundVars` by sorting the `UnordMap`s, which is unnecessary busywork. This commit removes `NamedVarMap` and constructs a `ResolveBoundVars` directly. `SortedMap` and `NamedVarMap` have slightly different perf characteristics during construction (e.g. speed of insertion) but this code isn't hot enough for that to matter. A few details to note. - A `FIXME` comment is removed. - The detailed comments on the fields of `NamedVarMap` are copied to `ResolveBoundVars` (which has a single, incorrect comment). - `BoundVarContext::map` is renamed. - `ResolveBoundVars` gets a derived `Default` impl.
2025-01-29Upgrade elsa to the newest version.David Venhoek-1/+1
2025-01-29Auto merge of #134248 - oli-obk:patkind-path-removal, r=BoxyUwUbors-82/+103
Merge `PatKind::Path` into `PatKind::Expr` Follow-up to #134228 We always had a duplication where `Path`s could be represented as `PatKind::Path` or `PatKind::Lit(ExprKind::Path)`. We had to handle both everywhere, and still do after #134228, so I'm removing it now.
2025-01-29Auto merge of #136248 - matthiaskrgr:rollup-leaxgfd, r=matthiaskrgrbors-27/+73
Rollup of 8 pull requests Successful merges: - #133382 (Suggest considering casting fn item as fn pointer in more cases) - #136092 (Test pipes also when not running on Windows and Linux simultaneously) - #136190 (Remove duplicated code in RISC-V asm bad-reg test) - #136192 (ci: remove unused windows runner) - #136205 (Properly check that array length is valid type during built-in unsizing in index) - #136211 (Update mdbook to 0.4.44) - #136212 (Tweak `&mut self` suggestion span) - #136214 (Make crate AST mutation accessible for driver callback) r? `@ghost` `@rustbot` modify labels: rollup