about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorLines
2024-08-11Don't statically link `std` into `rustc_driver` for `windows-gnu`John Kåre Alsaker-4/+30
2024-08-11Ask the user to use `feature(rustc_private)` when linking to `rustc_driver`John Kåre Alsaker-8/+23
2024-08-11Link `std` statically in `rustc_driver`John Kåre Alsaker-11/+70
2024-08-10Auto merge of #128572 - compiler-errors:fix-elaborate-box-derefs-on-debug, ↵bors-8/+77
r=saethlin Fix `ElaborateBoxDerefs` on debug varinfo Slightly simplifies the `ElaborateBoxDerefs` pass to fix cases where it was applying the wrong projections to debug var infos containing places that deref boxes. From what I can tell[^1], we don't actually have any tests (or code anywhere, really) that exercise `debug x => *(...: Box<T>)`, and it's very difficult to trigger this in surface Rust, so I wrote a custom MIR test. What happens is that the pass was turning `*(SOME_PLACE: Box<T>)` into `*(*((((SOME_PLACE).0: Unique<T>).0: NonNull<T>).0: *const T))` in debug var infos. In particular, notice the *double deref*, which was wrong. This is the root cause of #128554, so this PR fixes #128554 as well. The reason that async closures was affected is because of the way that we compute the [`ByMove` body](https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs), which resulted in `*(...: Box<T>)` in debug var info. But this really has nothing to do with async closures. [^1]: Validated by literally replacing the `if elem == PlaceElem::Deref && base_ty.is_box() { ... }` innards with a `panic!()`, which compiled all of stage2 without panicking.
2024-08-10Auto merge of #128400 - petrochenkov:nowhole3, r=bjorn3bors-13/+2
linker: Remove the "`--whole-archive` in test mode" backcompat hack Fixes https://github.com/rust-lang/rust/issues/116910.
2024-08-10Auto merge of #128927 - GuillaumeGomez:rollup-ei2lr0f, r=GuillaumeGomezbors-191/+368
Rollup of 8 pull requests Successful merges: - #128273 (Improve `Ord` violation help) - #128807 (run-make: explaing why fmt-write-bloat is ignore-windows) - #128903 (rustdoc-json-types `Discriminant`: fix typo) - #128905 (gitignore: Add Zed and Helix editors) - #128908 (diagnostics: do not warn when a lifetime bound infers itself) - #128909 (Fix dump-ice-to-disk for RUSTC_ICE=0 users) - #128910 (Differentiate between methods and associated functions in diagnostics) - #128923 ([rustdoc] Stop showing impl items for negative impls) r? `@ghost` `@rustbot` modify labels: rollup
2024-08-10Rollup merge of #128923 - GuillaumeGomez:negative-impls-items, r=fmeaseGuillaume Gomez-19/+53
[rustdoc] Stop showing impl items for negative impls Fixes https://github.com/rust-lang/rust/issues/128799. As discussed with `@fmease,` they have a broader patch in progress, so this (small) PR will at least allow for them to have a regression test. :) r? `@fmease`
2024-08-10Rollup merge of #128910 - estebank:assoc-fn, r=compiler-errorsGuillaume Gomez-72/+79
Differentiate between methods and associated functions in diagnostics Accurately refer to assoc fn without receiver as assoc fn instead of methods. Add `AssocItem::descr` method to centralize where we call methods and associated functions.
2024-08-10Rollup merge of #128909 - saethlin:run-make-ice-yes, r=jieyouxuGuillaume Gomez-1/+1
Fix dump-ice-to-disk for RUSTC_ICE=0 users Before this change, the test fails if you run it with `RUSTC_ICE=0`.
2024-08-10Rollup merge of #128908 - notriddle:notriddle/self-inferred-lifetime-bounds, ↵Guillaume Gomez-6/+97
r=compiler-errors diagnostics: do not warn when a lifetime bound infers itself Fixes #119228
2024-08-10Rollup merge of #128905 - mrkajetanp:gitignore-editors, r=jieyouxuGuillaume Gomez-0/+2
gitignore: Add Zed and Helix editors Just adding two extra code editors to .gitignore. Reference: https://helix-editor.com/ https://zed.dev/
2024-08-10Rollup merge of #128903 - kraktus:patch-3, r=aDotInTheVoidGuillaume Gomez-1/+1
rustdoc-json-types `Discriminant`: fix typo "when to complex" should obviously be "too complex"
2024-08-10Rollup merge of #128807 - ChrisDenton:bloat, r=jieyouxuGuillaume Gomez-3/+6
run-make: explaing why fmt-write-bloat is ignore-windows The trouble here is that libc doesn't exist on Windows. Well it kinda does but it isn't called that so we substitute a name that works. Ideally finding necessary libs for the platform would be done at a higher level but until then this should work. try-job: x86_64-msvc try-job: x86_64-mingw try-job: i686-msvc try-job: i686-mingw
2024-08-10Rollup merge of #128273 - Voultapher:improve-ord-violation-help, ↵Guillaume Gomez-89/+129
r=workingjubilee Improve `Ord` violation help Recent experience in #128083 showed that the panic message when an Ord violation is detected by the new sort implementations can be confusing. So this PR aims to improve it, together with minor bug fixes in the doc comments for sort*, sort_unstable* and select_nth_unstable*. Is it possible to get these changes into the 1.81 release? It doesn't change behavior and would greatly help when users encounter this panic for the first time, which they may after upgrading to 1.81. Tagging `@orlp`
2024-08-10Add regression tests for negative impls not showing their itemsGuillaume Gomez-0/+26
2024-08-10Stop showing impl items for negative implsGuillaume Gomez-19/+27
2024-08-10Auto merge of #122792 - Nadrieril:stabilize-min-exh-pats2, r=fee1-deadbors-935/+1061
Stabilize `min_exhaustive_patterns` ## Stabilisation report I propose we stabilize the [`min_exhaustive_patterns`](https://github.com/rust-lang/rust/issues/119612) language feature. With this feature, patterns of empty types are considered unreachable when matched by-value. This allows: ```rust enum Void {} fn foo() -> Result<u32, Void>; fn main() { let Ok(x) = foo(); // also match foo() { Ok(x) => ..., } } ``` This is a subset of the long-unstable [`exhaustive_patterns`](https://github.com/rust-lang/rust/issues/51085) feature. That feature is blocked because omitting empty patterns is tricky when *not* matched by-value. This PR stabilizes the by-value case, which is not tricky. The not-by-value cases (behind references, pointers, and unions) stay as they are today, e.g. ```rust enum Void {} fn foo() -> Result<u32, &Void>; fn main() { let Ok(x) = foo(); // ERROR: missing `Err(_)` } ``` The consequence on existing code is some extra "unreachable pattern" warnings. This is fully backwards-compatible. ### Comparison with today's rust This proposal only affects match checking of empty types (i.e. types with no valid values). Non-empty types behave the same with or without this feature. Note that everything below is phrased in terms of `match` but applies equallly to `if let` and other pattern-matching expressions. To be precise, a visibly empty type is: - an enum with no variants; - the never type `!`; - a struct with a *visible* field of a visibly empty type (and no #[non_exhaustive] annotation); - a tuple where one of the types is visibly empty; - en enum with all variants visibly empty (and no `#[non_exhaustive]` annotation); - a `[T; N]` with `N != 0` and `T` visibly empty; - all other types are nonempty. (An extra change was proposed below: that we ignore #[non_exhaustive] for structs since adding fields cannot turn an empty struct into a non-empty one) For normal types, exhaustiveness checking requires that we list all variants (or use a wildcard). For empty types it's more subtle: in some cases we require a `_` pattern even though there are no valid values that can match it. This is where the difference lies regarding this feature. #### Today's rust Under today's rust, a `_` is required for all empty types, except specifically: if the matched expression is of type `!` (the never type) or `EmptyEnum` (where `EmptyEnum` is an enum with no variants), then the `_` is not required. ```rust let foo: Result<u32, !> = ...; match foo { Ok(x) => ..., Err(_) => ..., // required } let foo: Result<u32, &!> = ...; match foo { Ok(x) => ..., Err(_) => ..., // required } let foo: &! = ...; match foo { _ => ..., // required } fn blah(foo: (u32, !)) { match foo { _ => ..., // required } } unsafe { let ptr: *const ! = ...; match *ptr {} // allowed let ptr: *const (u32, !) = ...; match *ptr { (x, _) => { ... } // required } let ptr: *const Result<u32, !> = ...; match *ptr { Ok(x) => { ... } Err(_) => { ... } // required } } ``` #### After this PR After this PR, a pattern of an empty type can be omitted if (and only if): - the match scrutinee expression has type `!` or `EmptyEnum` (like before); - *or* the empty type is matched by value (that's the new behavior). In all other cases, a `_` is required to match on an empty type. ```rust let foo: Result<u32, !> = ...; match foo { Ok(x) => ..., // `Err` not required } let foo: Result<u32, &!> = ...; match foo { Ok(x) => ..., Err(_) => ..., // required because `!` is under a dereference } let foo: &! = ...; match foo { _ => ..., // required because `!` is under a dereference } fn blah(foo: (u32, !)) { match foo {} // allowed } unsafe { let ptr: *const ! = ...; match *ptr {} // allowed let ptr: *const (u32, !) = ...; match *ptr { (x, _) => { ... } // required because the matched place is under a (pointer) dereference } let ptr: *const Result<u32, !> = ...; match *ptr { Ok(x) => { ... } Err(_) => { ... } // required because the matched place is under a (pointer) dereference } } ``` ### Documentation The reference does not say anything specific about exhaustiveness checking, hence there is nothing to update there. The nomicon does, I opened https://github.com/rust-lang/nomicon/pull/445 to reflect the changes. ### Tests The relevant tests are in `tests/ui/pattern/usefulness/empty-types.rs`. ### Unresolved Questions None that I know of. try-job: dist-aarch64-apple
2024-08-10Auto merge of #128746 - compiler-errors:cache-super-outlives, r=lcnrbors-26/+42
Cache supertrait outlives of impl header for soundness check This caches the results of computing the transitive supertraits of an impl and filtering it to its outlives obligations. This is purely an optimization to improve https://github.com/rust-lang/rust/pull/124336.
2024-08-10Fixes in various placesNadrieril-4/+12
2024-08-10Test that 0/unknown-length arrays are nonemptyNadrieril-47/+144
2024-08-10Update std and compilerNadrieril-4/+8
2024-08-10Update testsNadrieril-841/+878
2024-08-10Stabilize `min_exhaustive_patterns`Nadrieril-39/+19
2024-08-10Auto merge of #128740 - compiler-errors:generic-preds, r=estebankbors-6/+6
Stop unnecessarily taking GenericPredicates by `&self` This results in overcapturing in edition 2024, and is unnecessary since `GenericPredicates: Copy`.
2024-08-10Auto merge of #128714 - camelid:wf-struct-exprs, r=BoxyUwUbors-56/+560
WF-check struct field types at construction site Fixes #126272. Fixes #127299. Rustc of course already WF-checked the field types at the definition site, but for error tainting of consts to work properly, there needs to be an error emitted at the use site. Previously, with no use-site error, we proceeded with CTFE and ran into ICEs since we are running code with type errors. Emitting use-site errors also brings struct-like constructors more in line with fn-like constructors since they already emit use-site errors for WF issues. r? `@BoxyUwU`
2024-08-10Auto merge of #128584 - DianQK:tests-for-llvm-19, r=nikicbors-0/+67
Add a set of tests for LLVM 19 Close #107681. Close #118306. Close #126585. r? compiler
2024-08-10Differentiate between methods and associated functionsEsteban Küber-72/+79
Accurately refer to assoc fn without receiver as assoc fn instead of methods. Add `AssocItem::descr` method to centralize where we call methods and associated functions.
2024-08-09Fix dump-ice-to-disk for RUSTC_ICE=0 usersBen Kimock-1/+1
2024-08-09diagnostics: do not warn when a lifetime bound infers itselfMichael Howell-6/+97
2024-08-09Auto merge of #125642 - khuey:zstd, r=Kobzolbors-7/+126
Enable zstd for debug compression. Set LLVM_ENABLE_ZSTD alongside LLVM_ENABLE_ZLIB so that --compress-debug-sections=zstd is an option. See #120953 try-job: x86_64-gnu-tools
2024-08-09Update reason why fmt-write-bloat ignores windowsChris Denton-2/+5
2024-08-09Only link libc on *nix platformsChris Denton-1/+1
2024-08-09gitignore: Add Zed and Helix editorsKajetan Puchalski-0/+2
2024-08-09Auto merge of #128896 - bjorn3:sync_cg_clif-2024-08-09, r=bjorn3bors-850/+390
Subtree sync for rustc_codegen_cranelift The main highlight this time is support for raw-dylib on Windows thanks to `@dpaoliello.` Compiling the ring crate for arm64 macOS has been fixed too. r? `@ghost` `@rustbot` label +A-codegen +A-cranelift +T-compiler
2024-08-09rustdoc-json-types `Discriminant`: fix typokraktus-1/+1
"when to complex" should obviously be "too complex"
2024-08-09Auto merge of #128883 - matthiaskrgr:rollup-mkzi7my, r=matthiaskrgrbors-50/+218
Rollup of 9 pull requests Successful merges: - #128815 (Add `Steal::is_stolen()`) - #128817 (VxWorks code refactored ) - #128822 (add `builder-config` into tarball sources) - #128838 (rustdoc: do not run doctests with invalid langstrings) - #128852 (use stable sort to sort multipart diagnostics) - #128859 (Fix the name of signal 19 in library/std/src/sys/pal/unix/process/process_unix/tests.rs for mips/sparc linux) - #128864 (Use `SourceMap::end_point` instead of `- BytePos(1)` in arg removal suggestion) - #128865 (Ensure let stmt compound assignment removal suggestion respect codepoint boundaries) - #128874 (Disable verbose bootstrap command failure logging by default) r? `@ghost` `@rustbot` modify labels: rollup
2024-08-09Update tidy for new cranelift-bitset cratebjorn3-0/+2
2024-08-09Use ar_archive_writer from sysroot for cg_clifbjorn3-11/+1
2024-08-09Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into ↵bjorn3-850/+398
sync_cg_clif-2024-08-09
2024-08-09Rollup merge of #128874 - Kobzol:cmd-verbose-logging, r=onur-ozkanMatthias Krüger-5/+14
Disable verbose bootstrap command failure logging by default One of my recent bootstrap command refactoring PRs enabled verbose logging of command failures by default. While this is great for debugging bootstrap, in many situations it's just too verbose and prevents the user from seeing the actual printed stdout/stderr, which usually contains much more useful information. This PR reverts that logic, and only prints a detailed error when `-v` is passed to bootstrap. r? ````@onur-ozkan````
2024-08-09Rollup merge of #128865 - jieyouxu:unicurd, r=UrgauMatthias Krüger-2/+48
Ensure let stmt compound assignment removal suggestion respect codepoint boundaries Previously we would try to issue a suggestion for `let x <op>= 1`, i.e. a compound assignment within a `let` binding, to remove the `<op>`. The suggestion code unfortunately incorrectly assumed that the `<op>` is an exactly-1-byte ASCII character, but this assumption is incorrect because we also recover Unicode-confusables like `➖=` as `-=`. In this example, the suggestion code used a `+ BytePos(1)` to calculate the span of the `<op>` codepoint that looks like `-` but the mult-byte Unicode look-alike would cause the suggested removal span to be inside a multi-byte codepoint boundary, triggering a codepoint boundary assertion. The fix is to use `SourceMap::start_point(token_span)` which properly accounts for codepoint boundaries. Fixes #128845. cc #128790 r? ````@fmease````
2024-08-09Rollup merge of #128864 - jieyouxu:funnicode, r=UrgauMatthias Krüger-3/+63
Use `SourceMap::end_point` instead of `- BytePos(1)` in arg removal suggestion Previously, we tried to remove extra arg commas when providing extra arg removal suggestions. One of the edge cases is having to account for an arg that has a closing delimiter `)` following it. However, the previous suggestion code assumed that the delimiter is in fact exactly the 1-byte `)` character. This assumption was proven incorrect, because we recover from Unicode-confusable delimiters in the parser, which means that the ending delimiter could be a multi-byte codepoint that looks *like* a `)`. Subtracing 1 byte could land us in the middle of a codepoint, triggering a codepoint boundary assertion. This is fixed by using `SourceMap::end_point` which properly accounts for codepoint boundaries. Fixes #128717. cc ````@fmease```` and #128790
2024-08-09Rollup merge of #128859 - MinxuanZ:mips-sig, r=AmanieuMatthias Krüger-0/+13
Fix the name of signal 19 in library/std/src/sys/pal/unix/process/process_unix/tests.rs for mips/sparc linux relate to #128816
2024-08-09Rollup merge of #128852 - folkertdev:multipart-suggestion-stable-sort, ↵Matthias Krüger-3/+3
r=compiler-errors use stable sort to sort multipart diagnostics I think a stable sort should be used to sort the different parts of a multipart selection. The current unstable sort uses the text of the suggestion as a tie-breaker. That just doesn't seem right, and the order of the input is a better choice I think, because it gives the diagnostic author more control. This came up when I was building a suggestion where ```rust fn foo() {} ``` must be turned into an unsafe function, and an attribute must be added ```rust #[target_feature(enable = "...")] unsafe fn foo() {} ``` In this example, the two suggestions occur at the same position, but the order is extremely important: unsafe must come after the attribute. But the situation changes if there is a pub/pub(crate), and if the unsafe is already present. It just out that because of the suggestion text, there is no way for me to order the suggestions correctly. This change probably should be tested, but are there tests of the diagnostics code itself in the tests? r? ```@estebank```
2024-08-09Rollup merge of #128838 - notriddle:notriddle/invalid-tag-is-not-rust, ↵Matthias Krüger-7/+36
r=GuillaumeGomez rustdoc: do not run doctests with invalid langstrings https://github.com/rust-lang/rust/pull/124577#issuecomment-2276034737 CC ``@decathorpe``
2024-08-09Rollup merge of #128822 - onur-ozkan:add-build-config-in-tarballs, r=KobzolMatthias Krüger-1/+11
add `builder-config` into tarball sources This will be useful for certain scenarios where developers want to know how the tarball sources were generated. We also want this to check for CI rustc incompatible options on bootstrap. Blocker for #122709 r? Kobzol
2024-08-09Rollup merge of #128817 - biabbas:vxworks_update, r=tgross35Matthias Krüger-29/+21
VxWorks code refactored 1. Extern TaskNameSet as minimum supported version of os is VxWorks 7 which would have taskNameSet 2. Vx_TASK_NAME_LEN is 31 on VxWorks7, defined variable res. 3. Add unsafe blocks on Non::Zero usage in available_parallelism() 4. Update vxworks docs. r? `@tgross35` cc `@devnexen`
2024-08-09Rollup merge of #128815 - Nadrieril:is_stolen, r=jieyouxu,lcnrMatthias Krüger-0/+9
Add `Steal::is_stolen()` Writers of rustc drivers (such as myself) often encounter stealing issues. It is currently impossible to gracefully handle them. This PR adds a `Steal::is_stolen()` function for that purpose.
2024-08-09Couple of minor cleanupsbjorn3-2/+1
2024-08-09Stop using a custom Cargo.toml and Cargo.lock for the standard librarybjorn3-485/+0
The rust-src component now ships a working copy of both.