-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Remove an outdated test #148918
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
Remove an outdated test #148918
Conversation
|
r? @davidtwco rustbot has assigned @davidtwco. Use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've looked through the tests, and I can't find one (not even doc test) that tests the fact that try_from has a blanket impl for T: Into, etc. So maybe having some library test for that would be nice? This test on its own seems indeed useless though, since 1.41 definitely.
This... is a weird test. It has two impls: - `impl<T> From<Foo<T>> for Box<T>` (commented out, more on that later), and - `impl<T> Into<Vec<T>> for Foo<T>` The idea of that test is to show that the first impl doesn't compile, but the second does, thus `TryFrom` should be using `Into` and not `From` (because `Into` is more general, since the `From` impl doesn't compile). However: 1. The types are different -- `Box` vs `Vec`, which is significant b/c `Box` is fundamental 2. The commented out impl actually compiles! (which wasn't detected b/c it's commented out :\ ) Here is a table for compilation of the impls: | | `Vec` | `Box` | |--------|--------------|----------------| | `From` | since 1.41.0 | never | | `Into` | always | not since 1.28 | [godbolt used to test this](https://godbolt.org/z/T38E3jGKa) Order of events: 1. in `1.28` the `incoherent_fundamental_impls` lint becomes deny by default (this is *not* mentioned in the changelog yay) 2. `1.32` changed absolutely nothing, even though this version is credited in the test 3. the test was added (I'm not exactly sure when) (see rust-lang#56796) 4. in `1.41` coherence was relaxed to allow `From`+`Vec` to compile To conclude: since `1.41` this test does nothing (and before that it was written in a way which did not detect this change). It looks to me like today (since `1.41`) we *could* bound `TryFrom` impl with `From` (but now it'd be a useless breaking change of course). Am I missing anything? Is there a useful version of this test that could be written?
b9c620e to
e645e51
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
@rustbot review |
|
@bors r+ rollup |
Rollup of 5 pull requests Successful merges: - #148918 (Remove an outdated test) - #149244 (Fix std::mem::drop rustdoc misleading statement) - #149532 (Rename supertrait item shadowing lints) - #149541 (Various never type test improvements) - #149590 (linker: Remove special case for `rust-lld` in `detect_self_contained_mingw`) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of #148918 - WaffleLapkin:tryfromwhattttt, r=jdonszelmann Remove an outdated test This... is a weird test. It has two impls: - `impl<T> From<Foo<T>> for Box<T>` (commented out, more on that later), and - `impl<T> Into<Vec<T>> for Foo<T>` The idea of that test is to show that the first impl doesn't compile, but the second does, thus `TryFrom` should be using `Into` and not `From` (because `Into` is more general, since the `From` impl doesn't compile). However: 1. The types are different -- `Box` vs `Vec`, which is significant b/c `Box` is fundamental 2. The commented out impl actually compiles! (which wasn't detected b/c it's commented out :\ ) Here is a table for compilation of the impls: | | `Vec` | `Box` | |--------|--------------|----------------| | `From` | since 1.41.0 | never | | `Into` | always | not since 1.28 | [godbolt used to test this](https://godbolt.org/z/T38E3jGKa) Order of events: 1. in `1.28` the `incoherent_fundamental_impls` lint becomes deny by default (this is *not* mentioned in the changelog yay) 2. `1.32` changed absolutely nothing, even though this version is credited in the test 3. the test was added (I'm not exactly sure when) (see #56796) 4. in `1.41` coherence was relaxed to allow `From`+`Vec` to compile To conclude: since `1.41` this test does nothing (and before that it was written in a way which did not detect this change). It looks to me like today (since `1.41`) we *could* bound `TryFrom` impl with `From` (but now it'd be a useless breaking change of course). Am I missing anything? Is there a useful version of this test that could be written?
This... is a weird test.
It has two impls:
impl<T> From<Foo<T>> for Box<T>(commented out, more on that later), andimpl<T> Into<Vec<T>> for Foo<T>The idea of that test is to show that the first impl doesn't compile, but the second does, thus
TryFromshould be usingIntoand notFrom(becauseIntois more general, since theFromimpl doesn't compile).However:
BoxvsVec, which is significant b/cBoxis fundamentalHere is a table for compilation of the impls:
VecBoxFromIntogodbolt used to test this
Order of events:
1.28theincoherent_fundamental_implslint becomes deny by default (this is not mentioned in the changelog yay)1.32changed absolutely nothing, even though this version is credited in the testTryFromblanket impl to useIntoinstead ofFrom#56796)1.41coherence was relaxed to allowFrom+Vecto compileTo conclude: since
1.41this test does nothing (and before that it was written in a way which did not detect this change). It looks to me like today (since1.41) we could boundTryFromimpl withFrom(but now it'd be a useless breaking change of course).Am I missing anything? Is there a useful version of this test that could be written?