-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 10 pull requests #133893
Rollup of 10 pull requests #133893
Conversation
… to `pattern_type_macro` That's what the gates are actually gating, and the single char difference in naming was not helpful either
The `println!();` statement's span doesn't include the `;`, and the modified suggestions where trying to get the `;` by getting the differenece between the statement's and the expression's spans, which was an empty suggestion. Fix rust-lang#133833, fix rust-lang#133834.
Centralize emitting an error in `const_to_pat` so that all errors from that evaluating a `const` in a pattern can add addditional information. With this, now point at the `const` item's definition: ``` error[E0158]: constant pattern depends on a generic parameter --> $DIR/associated-const-type-parameter-pattern.rs:20:9 | LL | pub trait Foo { | ------------- LL | const X: EFoo; | ------------- constant defined here ... LL | A::X => println!("A::X"), | ^^^^ ```
Silence errors that are implied by the errors in the `const` item definition. Add a primary span label.
Conform to error style guide.
``` error[E0158]: constant pattern depends on a generic parameter, which is not allowed --> $DIR/associated-const-type-parameter-pattern.rs:20:9 | LL | pub trait Foo { | ------------- LL | const X: EFoo; | ------------- constant defined here ... LL | pub fn test<A: Foo, B: Foo>(arg: EFoo) { | - constant depends on this generic param LL | match arg { LL | A::X => println!("A::X"), | ^^^^ `const` depends on a generic parameter ```
- Add primary span labels. - Point at const generic parameter used as pattern. - Point at statics used as pattern. - Point at let bindings used in const pattern.
``` error: trait object `dyn Send` cannot be used in patterns --> $DIR/issue-70972-dyn-trait.rs:6:9 | LL | const F: &'static dyn Send = &7u32; | -------------------------- constant defined here ... LL | F => panic!(), | ^ trait object can't be used in patterns ```
- Point at type that should derive `PartialEq` to be structural. - Point at manual `impl PartialEq`, explaining that it is not sufficient to be structural. ``` error: constant of non-structural type `MyType` in a pattern --> $DIR/const-partial_eq-fallback-ice.rs:14:12 | LL | struct MyType; | ------------- `MyType` must be annotated with `#[derive(PartialEq)]` to be usable in patterns ... LL | const CONSTANT: &&MyType = &&MyType; | ------------------------ constant defined here ... LL | if let CONSTANT = &&MyType { | ^^^^^^^^ constant of non-structural type | note: the `PartialEq` trait must be derived, manual `impl`s are not sufficient; see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details --> $DIR/const-partial_eq-fallback-ice.rs:5:1 | LL | impl PartialEq<usize> for MyType { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ```
Unify wording with the regular non-structural type error.
…e" error Point at types that need to be marked with `#[derive(PartialEq)]`. We use a visitor to look at a type that isn't structural, looking for all ADTs that don't derive `PartialEq`. These can either be manual `impl PartialEq`s or no `impl` at all, so we differentiate between those two cases to provide more context to the user. We also only point at types and impls from the local crate, otherwise show only a note. ``` error: constant of non-structural type `&[B]` in a pattern --> $DIR/issue-61188-match-slice-forbidden-without-eq.rs:15:9 | LL | struct B(i32); | -------- must be annotated with `#[derive(PartialEq)]` to be usable in patterns LL | LL | const A: &[B] = &[]; | ------------- constant defined here ... LL | A => (), | ^ constant of non-structural type | = note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details ```
… to check E0116 does not cause unrelated errors rustc xxx (we do not know) to 1.82.0 emits unrelated errors when E0116 is present (see rust-lang#125814). We do not know what caused and fixed it, but add a test to confirm rustc does not cause the same error in the future.
…ln, r=jieyouxu" This reverts commit 0585134, reversing changes made to 5530869. The PR unfortunately only converted the `ln!` instances, meaning that test output was messed up because stdout/stderr output interleaved when some `println!` instances were converted to `eprintln!` instances, while some `println!` instances remain unchanged.
…isons, r=cjgillot Add lint against function pointer comparisons This is kind of a follow-up to rust-lang#117758 where we added a lint against wide pointer comparisons for being ambiguous and unreliable; well function pointer comparisons are also unreliable. We should IMO follow a similar logic and warn people about it. ----- ## `unpredictable_function_pointer_comparisons` *warn-by-default* The `unpredictable_function_pointer_comparisons` lint checks comparison of function pointer as the operands. ### Example ```rust fn foo() {} let a = foo as fn(); let _ = a == foo; ``` ### Explanation Function pointers comparisons do not produce meaningful result since they are never guaranteed to be unique and could vary between different code generation units. Furthermore different function could have the same address after being merged together. ---- This PR also uplift the very similar `clippy::fn_address_comparisons` lint, which only linted on if one of the operand was an `ty::FnDef` while this PR lints proposes to lint on all `ty::FnPtr` and `ty::FnDef`. ```@rustbot``` labels +I-lang-nominated ~~Edit: Blocked on rust-lang/libs-team#323 being accepted and it's follow-up pr~~
…fmease Fix suggestion when shorthand `self` has erroneous type Fixes rust-lang#122086 r? estebank
Add context to "const in pattern" errors *Each commit addresses specific diagnostics.* - Add primary span labels - Point at `const` item, and `const` generic param definition - Reword messages and notes - Point at generic param through which an associated `const` is being referenced - Silence const in pattern with evaluation errors when they come from `const` items that already emit a diagnostic - On non-structural type in const used as pattern, point at the type that should derive `PartialEq`
Update books ## rust-lang/book 12 commits in e16dd73690a6cc3ecdc5f5d94bbc3ce158a42e16..614c19cb4025636eb2ba68ebb3d44e3bd3a5e6e4 2024-12-02 16:22:15 UTC to 2024-11-26 21:15:51 UTC - Fix more inverted uses of “shadowed” (rust-lang/book#4122) - Fix a couple inverted uses of “shadowed” (rust-lang/book#4121) - Fix confusion between variable `hello` and string `"hello"` (rust-lang/book#4118) - Ch. 17: fix some wording issues (rust-lang/book#4117) - Rephrase for clarity (rust-lang/book#3809) - Link to tests section of rustc book for `cargo test -- --help` docs (rust-lang/book#4116) - Drop a pedantry-triggering sentence about IEEE-754 (rust-lang/book#4114) - Very small clarification on if let (rust-lang/book#4113) - Ch17-05: Typos (rust-lang/book#4099) - Ch20-01: Fix typos (rust-lang/book#4105) - Add a short paragraph on editors and IDEs in installation (rust-lang/book#4112) - Rust 2024: update Ch. 20 for new `unsafe` rules (rust-lang/book#4111) ## rust-lang/reference 8 commits in 5c86c739ec71b8bc839310ff47fa94e94635bba9..ede56d1bbe132bac476b5029cd6d7508ca9572e9 2024-11-25 17:23:35 +0000 to 2024-12-03 22:26:55 +0000 - Claim to follow Unicode 16 for lexing identifiers. (rust-lang/reference#1688) - Clarify rules for on_unimplemented warnings (rust-lang/reference#1680) - Enable triagebot merge-conflict notifications (rust-lang/reference#1682) - Update default edition to 2024 for code examples (rust-lang/reference#1684) - Fix weak keywords (rust-lang/reference#1685) - `const` expression can borrow static items (rust-lang/reference#1610) - Update function-pointer.md for stabilization of `extended_varargs_abi_support` (rust-lang/reference#1687) - fix inconsistent spacing in example (rust-lang/reference#1686) ## edition-guide 1 commits in f48b0e842a3911c63240e955d042089e9e0894c7..128669297c8a7fdf771042eaec18b8adfaeaf0cd 2024-11-25 16:20:27 +0000 to 2024-12-03 22:02:43 +0000 - Fix `if_let_rescope` applicability (rust-lang/edition-guide#339) ## rust-lang/rustc-dev-guide 6 commits in 787b416..b21d99b 2024-12-02 04:45:30 UTC to 2024-11-27 10:31:58 UTC - Spell out `git submodule deinit -f --all` (rust-lang/rustc-dev-guide#2153) - Explain how to deal with exploded git submodules (rust-lang/rustc-dev-guide#2152) - Update `//@ proc-macro` aux build directive docs (rust-lang/rustc-dev-guide#2149) - Remove `pretty-expanded` as it no longer exists (rust-lang/rustc-dev-guide#2147) - Fix trivial typo (rust-lang/rustc-dev-guide#2148) - Remove -Zfuel. (rust-lang/rustc-dev-guide#2032)
Do not emit empty suggestion The `println!();` statement's span doesn't include the `;`, and the modified suggestions where trying to get the `;` by getting the differenece between the statement's and the expression's spans, which was an empty suggestion. Fix rust-lang#133833, fix rust-lang#133834.
Rename `core_pattern_type` and `core_pattern_types` lib feature gates to `pattern_type_macro` That's what the gates are actually gating, and the single char difference in naming was not helpful either fixes rust-lang#128987
…, r=oli-obk No need to create placeholders for GAT args in confirm_object_candidate We no longer need this logic to add placeholders for GAT args since with the removal of the `gat_extended` feature gate (rust-lang#133768) we no longer allow GATs in dyn trait anyways. r? oli-obk
…li-obk `fn_sig_for_fn_abi` should return a `ty::FnSig`, no need for a binder r? oli-obk Split out of rust-lang#133122
Add a new test ui/incoherent-inherent-impls/no-other-unrelated-errors to check E0116 does not cause unrelated errors rustc xxx (we do not know) to 1.82.0 emits unrelated errors when E0116 is present (see rust-lang#125814). We do not know what caused and fixed it, but add a test to confirm rustc does not cause the same error in the future.
Revert rust-lang#133817 This reverts commit 0585134, reversing changes made to 5530869. rust-lang#133817 unfortunately only converted the `println!` instances to `eprintln!`, meaning that some test output (via compiletest/bootstrap) was messed up because stdout/stderr output interleaved improperly when some `println!` instances were converted to `eprintln!` instances, while some `print!` instances remain unchanged. This made reading test output annoying for contributors cc rust-lang#133879. Closes rust-lang#133879 by reverting. rust-lang#133817 can be relanded in the future when `print!` instances are also matched with `println!` instances. cc `@clubby789` This is a clean revert so I'm going to self-approve this PR.
@bors r+ rollup p=11 (above the revert PR which is contained inside here) |
@bors rollup=never (this is rollup PR itself) |
☀️ Test successful - checks-actions |
📌 Perf builds for each rolled up PR:
previous master: 5a0a5e6db9 In the case of a perf regression, run the following command for each PR you suspect might be the cause: |
Finished benchmarking commit (0e98766): comparison URL. Overall result: ❌✅ regressions and improvements - no action needed@rustbot label: -perf-regression Instruction countThis is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.
Max RSS (memory usage)Results (secondary 3.1%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResults (primary 2.6%, secondary -2.0%)This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Binary sizeThis benchmark run did not return any relevant results for this metric. Bootstrap: 768.023s -> 769.918s (0.25%) |
Successful merges:
self
has erroneous type #122161 (Fix suggestion when shorthandself
has erroneous type)core_pattern_type
andcore_pattern_types
lib feature gates topattern_type_macro
#133863 (Renamecore_pattern_type
andcore_pattern_types
lib feature gates topattern_type_macro
)fn_sig_for_fn_abi
should return aty::FnSig
, no need for a binder #133874 (fn_sig_for_fn_abi
should return aty::FnSig
, no need for a binder)eprintln
instead ofprintln
in bootstrap/compiletest/tidy #133817)r? @ghost
@rustbot modify labels: rollup
Create a similar rollup