summary refs log tree commit diff
path: root/src/test/ui/coherence
AgeCommit message (Collapse)AuthorLines
2020-09-09Rollup merge of #75984 - kornelski:typeormodule, r=matthewjasperTyler Mandry-4/+4
Improve unresolved use error message "use of undeclared type or module `foo`" doesn't mention that it could be a crate. This error can happen when users forget to add a dependency to `Cargo.toml`, so I think it's important to mention that it could be a missing crate. I've used a heuristic based on Rust's naming conventions. It complains about an unknown type if the ident starts with an upper-case letter, and crate or module otherwise. It seems to work very well. The expanded error help covers both an unknown type and a missing crate case.
2020-09-03specialization_graph: avoid trimmed paths for OverlapErrorDan Aloni-18/+18
2020-09-02pretty: trim paths of unique symbolsDan Aloni-55/+55
If a symbol name can only be imported from one place for a type, and as long as it was not glob-imported anywhere in the current crate, we can trim its printed path and print only the name. This has wide implications on error messages with types, for example, shortening `std::vec::Vec` to just `Vec`, as long as there is no other `Vec` importable anywhere. This adds a new '-Z trim-diagnostic-paths=false' option to control this feature. On the good path, with no diagnosis printed, we should try to avoid issuing this query, so we need to prevent trimmed_def_paths query on several cases. This change also relies on a previous commit that differentiates between `Debug` and `Display` on various rustc types, where the latter is trimmed and presented to the user and the former is not.
2020-09-01Clarify message about unresolved useKornel-4/+4
2020-08-22Use smaller def span for functionsAaron Hill-12/+12
Currently, the def span of a funtion encompasses the entire function signature and body. However, this is usually unnecessarily verbose - when we are pointing at an entire function in a diagnostic, we almost always want to point at the signature. The actual contents of the body tends to be irrelevant to the diagnostic we are emitting, and just takes up additional screen space. This commit changes the `def_span` of all function items (freestanding functions, `impl`-block methods, and `trait`-block methods) to be the span of the signature. For example, the function ```rust pub fn foo<T>(val: T) -> T { val } ``` now has a `def_span` corresponding to `pub fn foo<T>(val: T) -> T` (everything before the opening curly brace). Trait methods without a body have a `def_span` which includes the trailing semicolon. For example: ```rust trait Foo { fn bar(); }``` the function definition `Foo::bar` has a `def_span` of `fn bar();` This makes our diagnostic output much shorter, and emphasizes information that is relevant to whatever diagnostic we are reporting. We continue to use the full span (including the body) in a few of places: * MIR building uses the full span when building source scopes. * 'Outlives suggestions' use the full span to sort the diagnostics being emitted. * The `#[rustc_on_unimplemented(enclosing_scope="in this scope")]` attribute points the entire scope body. * The 'unconditional recursion' lint uses the full span to show additional context for the recursive call. All of these cases work only with local items, so we don't need to add anything extra to crate metadata.
2020-07-25Use the proper span when WF-checking an impl self typeAaron Hill-2/+2
2020-06-22WIP bless test and compare-mode=nllNiko Matsakis-3/+3
2020-06-22add new coherence tests and update the documentationNiko Matsakis-4/+53
2020-06-22add new tests from MCP and the tracking issueNiko Matsakis-0/+184
2020-06-21Auto merge of #72936 - jackh726:chalk-more, r=nikomatsakisbors-22/+3
Upgrade Chalk Things done in this PR: - Upgrade Chalk to `0.11.0` - Added compare-mode=chalk - Bump rustc-hash in `librustc_data_structures` to `1.1.0` to match Chalk - Removed `RustDefId` since the builtin type support is there - Add a few more `FIXME(chalk)`s for problem spots I hit when running all tests with chalk - Added some more implementation code for some newer builtin Chalk types (e.g. `FnDef`, `Array`) - Lower `RegionOutlives` and `ObjectSafe` predicates - Lower `Dyn` without the region - Handle `Int`/`Float` `CanonicalVarKind`s - Uncomment some Chalk tests that actually work now - Remove the revisions in `src/test/ui/coherence/coherence-subtyping.rs` since they aren't doing anything different r? @nikomatsakis
2020-06-19Add compare-mode=chalk and add a little bit more implementations and fixmesJack Huey-22/+3
2020-06-16bless allRalf Jung-3/+13
2020-04-23fix error code for E0751YI-2/+2
2020-04-11rustc: Add a warning count upon completionRoccoDev-0/+4
2020-04-08Small tweaks to required bound spanEsteban Küber-1/+1
2020-04-06traits/coherence: stop using `Ty::walk_shallow`.Eduard-Mihai Burtescu-2/+2
2020-03-26introduce `negative_impls` feature gate and documentNiko Matsakis-22/+24
They used to be covered by `optin_builtin_traits` but negative impls are now applicable to all traits, not just auto traits. This also adds docs in the unstable book for the current state of auto traits.
2020-03-26make a custom error for overlap with negative implsNiko Matsakis-15/+14
2020-03-05review commentsEsteban Küber-2/+3
2020-03-04Tweak output for invalid negative impl AST errorsEsteban Küber-2/+2
2020-02-13Constness -> enum Const { Yes(Span), No }Mazdak Farrokhzad-1/+3
Same idea for `Unsafety` & use new span for better diagnostics.
2020-02-09Reduce queries/map lookups done by coherenceJonas Schievink-2/+2
This has negligible perf impact, but it does improve the code a bit. * Only query the specialization graph of any trait once instead of once per impl * Loop over impls only once, precomputing impl DefId and TraitRef
2020-02-06make lint warn by defaultNiko Matsakis-12/+9
2020-02-06lint impls that will become incoherent when leak-check is removedNiko Matsakis-5/+88
2020-02-04Auto merge of #68544 - Aaron1011:remove-overlapping-traits, r=estebankbors-18/+30
Remove the `overlapping_marker_traits` feature See #29864 This has been replaced by `#[feature(marker_trait_attr)]` A few notes: * Due to PR #68057 not yet being in the bootstrap compiler, it's necessary to continue using `#![feature(overlapping_marker_traits)]` under `#[cfg(bootstrap)]` to work around type inference issues. * I've updated tests that used `overlapping_marker_traits` to now use `marker_trait_attr` where applicable The test `src/test/ui/overlap-marker-trait.rs` doesn't make any sense now that `overlapping_marker_traits`, so I removed it. The test `src/test/ui/traits/overlap-permitted-for-marker-traits-neg.rs` now fails, since it's no longer possible to have multiple overlapping negative impls of `Send`. I believe that this is the behavior we want (assuming that `Send` is not going to become a `#[marker]` trait, so I renamed the test to `overlap-permitted-for-marker-traits-neg`
2020-02-04Remove the `overlapping_marker_traits` featureAaron Hill-18/+30
See #29864 This has been replaced by `#[feature(marker_trait_attr)]` A few notes: * Due to PR #68057 not yet being in the bootstrap compiler, it's necessary to continue using `#![feature(overlapping_marker_traits)]` under `#[cfg(bootstrap)]` to work around type inference issues. * I've updated tests that used `overlapping_marker_traits` to now use `marker_trait_attr` where applicable The test `src/test/ui/overlap-marker-trait.rs` doesn't make any sense now that `overlapping_marker_traits`, so I removed it. The test `src/test/ui/traits/overlap-permitted-for-marker-traits-neg.rs` now fails, since it's no longer possible to have multiple overlapping negative impls of `Send`. I believe that this is the behavior we want (assuming that `Send` is not going to become a `#[marker]` trait, so I renamed the test to `overlap-permitted-for-marker-traits-neg`
2020-02-02Use more appropriate spans on object unsafe traits and provide structured ↵Esteban Küber-1/+1
suggestions when possible
2020-02-02Wording changes to object unsafe trait errorsEsteban Küber-1/+5
Stemming from the thread at https://twitter.com/indygreg/status/1223279056398929920
2020-01-08Unify output of "variant not found" errorsEsteban Küber-2/+2
2019-11-10Improve coherence errors for wrong type orderOhad Ravid-23/+46
2019-10-31Stabilize the `re_rebalance_coherence` featureOhad Ravid-1461/+204
2019-10-28Do not display ADT type arguments and fix rebaseEsteban Küber-57/+85
2019-10-28Account for tuples in explanationEsteban Küber-20/+20
2019-10-28Talk about specific types and remove lifetimes from outputEsteban Küber-16/+16
2019-10-28Further tweak spans for better readabilityEsteban Küber-16/+16
2019-10-28Use more targeted spans for orphan rule errorsEsteban Küber-154/+238
2019-10-28Call out the types that are non local on E0117Esteban Küber-42/+46
2019-10-27Rollup merge of #65738 - ↵Mazdak Farrokhzad-0/+32
ohadravid:re-rebalance-coherence-allow-fundamental-local, r=nikomatsakis Coherence should allow fundamental types to impl traits when they are local After #64414, `impl<T> Remote for Box<T> { }` is disallowed, but it is also disallowed in liballoc, where `Box` is a local type! Enabling `#![feature(re_rebalance_coherence)]` in `liballoc` results in: ``` error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct<F>`) --> src\liballoc\boxed.rs:1098:1 | 1098 | impl<F: ?Sized + Future + Unpin> Future for Box<F> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `F` must be used as the type parameter for some local type ``` This PR relaxes `uncover_fundamental_ty` to skip local fundamental types. I didn't add a test since `liballoc` already fails to compile, but I can add one if needed. r? @nikomatsakis cc #63599
2019-10-26Coherence should allow fundamental types to impl traitsOhad Ravid-0/+32
2019-10-23Auto merge of #57545 - bovinebuddha:object_safe_for_dispatch, r=nikomatsakisbors-0/+30
Object safe for dispatch cc #43561
2019-10-23Rollup merge of #65417 - weiznich:more_coherence_tests, r=nikomatsakisYuki Okushi-0/+373
Add more coherence tests I've wrote the missing test cases listed in [this google doc](https://docs.google.com/spreadsheets/d/1WlroTEXE6qxxGvEOhICkUpqguYZP9YOZEvnmEtSNtM0/edit#gid=0) > The other thing that might be useful is to rename the existing tests so they all fit the new naming scheme we were using. I'm not entirely sure how to do this. If everything from the google sheet is covered could I just remove the remaining tests in `src/test/ui/coherence` or is there something in there that should remain? cc #63599 r? @nikomatsakis
2019-10-22RFC 2027: "first draft" of implementationMathias Blikstad-0/+30
These are a squashed series of commits.
2019-10-19Fix test pathsGeorg Semmler-29/+0
2019-10-14Add more coherence testsGeorg Semmler-0/+402
2019-09-30Fixed grammar in one diagnostic and blessed tests.Alexander Regueiro-4/+4
2019-09-29Auto merge of #64546 - weiznich:bugfix/rfc-2451-rerebalance-tests, ↵bors-16/+522
r=nikomatsakis Bugfix/rfc 2451 rerebalance tests r? @nikomatsakis Fixes #64412 Depends/Contains on #64414 cc #55437 and #63599
2019-09-24More path name fixesGeorg Semmler-2/+2
2019-09-23Remove whitespace from testnameGeorg Semmler-0/+0
2019-09-22Fix some unused variable warningsGeorg Semmler-2/+2
2019-09-19Restore whitespaceJames Munns-2/+2