Relate existential associated types with variance Invariant#71896
Relate existential associated types with variance Invariant#71896bors merged 1 commit intorust-lang:masterfrom
Conversation
c06d4ae to
b3099be
Compare
|
It seems certainly possible that this will cause regressions in people's code on crater. I wonder if a crater run is appropriate, or if we should just move forward. @Mark-Simulacrum -- weren't you saying that the crater queue is very long at present? |
b3099be to
4a376a9
Compare
|
Just pushed some minor stderr files fixes. |
|
r=me but the only question is whether we should do a crater run -- see zulip topic |
|
@bors try Let's prepare a try build for a potential crater run |
|
⌛ Trying commit 4a376a9ca7c5c0d6f3bb12ef241ace06641963f9 with merge 96b3c169cd2d8959926fa240f10342f1659f8ae3... |
|
☀️ Try build successful - checks-actions, checks-azure |
|
@craterbot check p=1 |
|
👌 Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🚧 Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🚨 Experiment 🆘 Can someone from the infra team check in on this? @rust-lang/infra |
|
@craterbot retry I can't find anything in logs... |
|
🛠️ Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🚧 Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🎉 Experiment
|
Spurious
Regressions
|
|
Fewer regressions that I feared, though more than I would like. =) |
|
So I'm pondering a few things:
|
|
💥 Test timed out |
|
Uh... @bors retry |
|
⌛ Testing commit c99164e with merge f33d195b1d8402ecdbbc7492d2b9fc61868f0c9e... |
|
@bors retry yield |
|
⌛ Testing commit c99164e with merge 3d9aab01630687424b650880ce3cbc1338c2ce02... |
|
💔 Test failed - checks-azure |
|
I failed somehow to find the logs in that output above... what the heck =) |
|
@bors retry |
|
☀️ Test successful - checks-azure |
according to various people on tech-pkg@, there are no problems with
the Firefox build
Version 1.46.0 (2020-08-27)
==========================
Language
--------
- [`if`, `match`, and `loop` expressions can now be used in const functions.][72437]
- [Additionally you are now also able to coerce and cast to slices (`&[T]`) in
const functions.][73862]
- [The `#[track_caller]` attribute can now be added to functions to use the
function's caller's location information for panic messages.][72445]
- [Recursively indexing into tuples no longer needs parentheses.][71322] E.g.
`x.0.0` over `(x.0).0`.
- [`mem::transmute` can now be used in static and constants.][72920] **Note**
You currently can't use `mem::transmute` in constant functions.
Compiler
--------
- [You can now use the `cdylib` target on Apple iOS and tvOS platforms.][73516]
- [Enabled static "Position Independent Executables" by default
for `x86_64-unknown-linux-musl`.][70740]
Libraries
---------
- [`mem::forget` is now a `const fn`.][73887]
- [`String` now implements `From<char>`.][73466]
- [The `leading_ones`, and `trailing_ones` methods have been stabilised for all
integer types.][73032]
- [`vec::IntoIter<T>` now implements `AsRef<[T]>`.][72583]
- [All non-zero integer types (`NonZeroU8`) now implement `TryFrom` for their
zero-able equivalent (e.g. `TryFrom<u8>`).][72717]
- [`&[T]` and `&mut [T]` now implement `PartialEq<Vec<T>>`.][71660]
- [`(String, u16)` now implements `ToSocketAddrs`.][73007]
- [`vec::Drain<'_, T>` now implements `AsRef<[T]>`.][72584]
Stabilized APIs
---------------
- [`Option::zip`]
- [`vec::Drain::as_slice`]
Cargo
-----
Added a number of new environment variables that are now available when
compiling your crate.
- [`CARGO_BIN_NAME` and `CARGO_CRATE_NAME`][cargo/8270] Providing the name of
the specific binary being compiled and the name of the crate.
- [`CARGO_PKG_LICENSE`][cargo/8325] The license from the manifest of the package.
- [`CARGO_PKG_LICENSE_FILE`][cargo/8387] The path to the license file.
Compatibility Notes
-------------------
- [The target configuration option `abi_blacklist` has been renamed
to `unsupported_abis`.][74150] The old name will still continue to work.
- [Rustc will now warn if you cast a C-like enum that implements `Drop`.][72331]
This was previously accepted but will become a hard error in a future release.
- [Rustc will fail to compile if you have a struct with
`#[repr(i128)]` or `#[repr(u128)]`.][74109] This representation is currently only
allowed on `enum`s.
- [Tokens passed to `macro_rules!` are now always captured.][73293] This helps
ensure that spans have the correct information, and may cause breakage if you
were relying on receiving spans with dummy information.
- [The InnoSetup installer for Windows is no longer available.][72569] This was
a legacy installer that was replaced by a MSI installer a few years ago but
was still being built.
- [`{f32, f64}::asinh` now returns the correct values for negative numbers.][72486]
- [Rustc will no longer accept overlapping trait implementations that only
differ in how the lifetime was bound.][72493]
- [Rustc now correctly relates the lifetime of an existential associated
type.][71896] This fixes some edge cases where `rustc` would erroneously allow
you to pass a shorter lifetime than expected.
- [Rustc now dynamically links to `libz` (also called `zlib`) on Linux.][74420]
The library will need to be installed for `rustc` to work, even though we
expect it to be already available on most systems.
- [Tests annotated with `#[should_panic]` are broken on ARMv7 while running
under QEMU.][74820]
- [Pretty printing of some tokens in procedural macros changed.][75453] The
exact output returned by rustc's pretty printing is an unstable
implementation detail: we recommend any macro relying on it to switch to a
more robust parsing system.
[75453]: rust-lang/rust#75453
[74820]: rust-lang/rust#74820
[74420]: rust-lang/rust#74420
[74109]: rust-lang/rust#74109
[74150]: rust-lang/rust#74150
[73862]: rust-lang/rust#73862
[73887]: rust-lang/rust#73887
[73466]: rust-lang/rust#73466
[73516]: rust-lang/rust#73516
[73293]: rust-lang/rust#73293
[73007]: rust-lang/rust#73007
[73032]: rust-lang/rust#73032
[72920]: rust-lang/rust#72920
[72569]: rust-lang/rust#72569
[72583]: rust-lang/rust#72583
[72584]: rust-lang/rust#72584
[72717]: rust-lang/rust#72717
[72437]: rust-lang/rust#72437
[72445]: rust-lang/rust#72445
[72486]: rust-lang/rust#72486
[72493]: rust-lang/rust#72493
[72331]: rust-lang/rust#72331
[71896]: rust-lang/rust#71896
[71660]: rust-lang/rust#71660
[71322]: rust-lang/rust#71322
[70740]: rust-lang/rust#70740
[cargo/8270]: rust-lang/cargo#8270
[cargo/8325]: rust-lang/cargo#8325
[cargo/8387]: rust-lang/cargo#8387
[`Option::zip`]: https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
[`vec::Drain::as_slice`]: https://doc.rust-lang.org/stable/std/vec/struct.Drain.html#method.as_slice
|
Here's a piece of code that broke with this: fn c_string_array_to_rust<'a>(
arr: *const *const ::std::os::raw::c_char,
count: usize,
) -> Box<dyn Iterator<Item = &'a str>> {
//assert!(!arr.is_null());
if arr.is_null() {
Box::new(iter::empty::<&'a str>())
// ~^ ERROR cannot infer an appropriate lifetime due to conflicting requirements [E0495]
} else {
let slice_of_pointers = unsafe { slice::from_raw_parts(arr, count) };
Box::new(
slice_of_pointers.iter()
.map(|s| unsafe { CStr::from_ptr(*s) }.to_str().unwrap()),
)
}
}I'm pretty sure this is sound? Since full message: |
|
@coolreader18 try using |
|
I resolved it another way, just wanted to bring this to attention. Thanks for the suggestion though @kennytm, that does fix it as well. |
|
Just to clarify the problem: This is expected. The cause is the same as I explained for ezksd.combinator. In fact, i'm going to inline the hackmd for posterity's sake, since it has a lot more detailed that never made it into a github comment. regressions for #71896Crater report: https://crater-reports.s3.amazonaws.com/pr-71896/index.html summary
Key:
ezksd.combinator.a2989e2e8fc92c9c8b1b4c949d9d8cc0b4de1986This one is tricky. The actual interaction of subtyping is unsound. The code is However, the tricky bit is in the reason that a The problem here is that there is an implicit bound of Moreover, if we used the invariant rule that this PR puts in place, but we had better githubaccount624.rocket-rooms.181ae13300244f79e7295eff84b3d07f7b28bdd5The actual error occurs in The relevant code is: pub trait Responder<'r> {
fn respond_to(self, request: &'r Request<'_>) -> response::ResultFuture<'r>;
}
impl Responder<'_> for String {
fn respond_to(self, _: &Request<'_>) -> response::ResultFuture<'static> {
Box::pin(async move {
Response::build()
.header(ContentType::Plain)
.sized_body(Cursor::new(self))
.ok()
})
}
}The subtyping is occuring in a covariant position (the return type), so accepting gribbet.rust_api_example.6c2086f619b7e3f591cae6a7aa1deed91a504824The errors are mich101mich.game_rs.f5e2796d3f8437e9630777e745ed7b8b2a513d30
spacemeowx2.slp-server-rust.2aaf02c7f0a352c6c826c45b6f12f5978604b089Not a root regression, but related to https://github.com/spacemeowx2/juniper/blob/95686b7ce530538d14bd42aafd47e07989dc9c2a/juniper_subscriptions/src/lib.rs#L149 sstanfield.slsh.b3068a910f91a5bd35b2e2b61a18b5ea18071785
attr-0.1.0Not totally sure what's going on here but I think it's related to dcmdump-0.1.0Not very clear happyreally derives from a use of combine v2.4.0: looks unsound given Parser trait, possibly a similar pattern to the first symbolic-debuginfo-7.3.0 |
Pkgsrc changes:
* Portability patches for Illumos have been intregrated upstream,
so are no longer needed in pkgsrc.
* Adjust one other patch, and update vendor/libc cargo checksum.
Upstream changes:
Version 1.46.0 (2020-08-27)
==========================
Language
--------
- [`if`, `match`, and `loop` expressions can now be used in const functions.]
[72437]
- [Additionally you are now also able to coerce and cast to slices (`&[T]`) in
const functions.][73862]
- [The `#[track_caller]` attribute can now be added to functions to use the
function's caller's location information for panic messages.][72445]
- [Recursively indexing into tuples no longer needs parentheses.][71322] E.g.
`x.0.0` over `(x.0).0`.
- [`mem::transmute` can now be used in static and constants.][72920] **Note**
You currently can't use `mem::transmute` in constant functions.
Compiler
--------
- [You can now use the `cdylib` target on Apple iOS and tvOS platforms.][73516]
- [Enabled static "Position Independent Executables" by default
for `x86_64-unknown-linux-musl`.][70740]
Libraries
---------
- [`mem::forget` is now a `const fn`.][73887]
- [`String` now implements `From<char>`.][73466]
- [The `leading_ones`, and `trailing_ones` methods have been stabilised for all
integer types.][73032]
- [`vec::IntoIter<T>` now implements `AsRef<[T]>`.][72583]
- [All non-zero integer types (`NonZeroU8`) now implement `TryFrom` for their
zero-able equivalent (e.g. `TryFrom<u8>`).][72717]
- [`&[T]` and `&mut [T]` now implement `PartialEq<Vec<T>>`.][71660]
- [`(String, u16)` now implements `ToSocketAddrs`.][73007]
- [`vec::Drain<'_, T>` now implements `AsRef<[T]>`.][72584]
Stabilized APIs
---------------
- [`Option::zip`]
- [`vec::Drain::as_slice`]
Cargo
-----
Added a number of new environment variables that are now available when
compiling your crate.
- [`CARGO_BIN_NAME` and `CARGO_CRATE_NAME`][cargo/8270] Providing the name of
the specific binary being compiled and the name of the crate.
- [`CARGO_PKG_LICENSE`][cargo/8325] The license from the manifest of the
package.
- [`CARGO_PKG_LICENSE_FILE`][cargo/8387] The path to the license file.
Compatibility Notes
-------------------
- [The target configuration option `abi_blacklist` has been renamed
to `unsupported_abis`.][74150] The old name will still continue to work.
- [Rustc will now warn if you have a C-like enum that implements `Drop`.][72331]
This was previously accepted but will become a hard error in a future release.
- [Rustc will fail to compile if you have a struct with
`#[repr(i128)]` or `#[repr(u128)]`.][74109] This representation is currently
only allowed on `enum`s.
- [Tokens passed to `macro_rules!` are now always captured.][73293] This helps
ensure that spans have the correct information, and may cause breakage if you
were relying on receiving spans with dummy information.
- [The InnoSetup installer for Windows is no longer available.][72569] This was
a legacy installer that was replaced by a MSI installer a few years ago but
was still being built.
- [`{f32, f64}::asinh` now returns the correct values for negative numbers.]
[72486]
- [Rustc will no longer accept overlapping trait implementations that only
differ in how the lifetime was bound.][72493]
- [Rustc now correctly relates the lifetime of an existential associated
type.][71896] This fixes some edge cases where `rustc` would erroneously
allow you to pass a shorter lifetime than expected.
- [Rustc now dynamically links to `libz` (also called `zlib`) on Linux.][74420]
The library will need to be installed for `rustc` to work, even though we
expect it to be already available on most systems.
- [Tests annotated with `#[should_panic]` are broken on ARMv7 while running
under QEMU.][74820]
- [Pretty printing of some tokens in procedural macros changed.][75453] The
exact output returned by rustc's pretty printing is an unstable
implementation detail: we recommend any macro relying on it to switch to a
more robust parsing system.
[75453]: rust-lang/rust#75453
[74820]: rust-lang/rust#74820
[74420]: rust-lang/rust#74420
[74109]: rust-lang/rust#74109
[74150]: rust-lang/rust#74150
[73862]: rust-lang/rust#73862
[73887]: rust-lang/rust#73887
[73466]: rust-lang/rust#73466
[73516]: rust-lang/rust#73516
[73293]: rust-lang/rust#73293
[73007]: rust-lang/rust#73007
[73032]: rust-lang/rust#73032
[72920]: rust-lang/rust#72920
[72569]: rust-lang/rust#72569
[72583]: rust-lang/rust#72583
[72584]: rust-lang/rust#72584
[72717]: rust-lang/rust#72717
[72437]: rust-lang/rust#72437
[72445]: rust-lang/rust#72445
[72486]: rust-lang/rust#72486
[72493]: rust-lang/rust#72493
[72331]: rust-lang/rust#72331
[71896]: rust-lang/rust#71896
[71660]: rust-lang/rust#71660
[71322]: rust-lang/rust#71322
[70740]: rust-lang/rust#70740
[cargo/8270]: rust-lang/cargo#8270
[cargo/8325]: rust-lang/cargo#8325
[cargo/8387]: rust-lang/cargo#8387
[`Option::zip`]: https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
[`vec::Drain::as_slice`]: https://doc.rust-lang.org/stable/std/vec/struct.Drain.html#method.as_slice
Fixes #71550 #72315
r? @nikomatsakis
The test case reported in that issue now errors with the following message ...
I could also add that test case if we want to have a weaponized one too.