Disable drop range tracking in generators
Generator drop tracking caused an ICE for generators involving the Never type (Issue #93161). Since this breaks miri, we temporarily disable drop tracking so miri is unblocked while we properly fix the issue.
This commit is contained in:
parent
84e918971d
commit
13090889f5
6 changed files with 28 additions and 1 deletions
|
@ -22,6 +22,10 @@ use tracing::debug;
|
||||||
|
|
||||||
mod drop_ranges;
|
mod drop_ranges;
|
||||||
|
|
||||||
|
// FIXME(eholk): This flag is here to give a quick way to disable drop tracking in case we find
|
||||||
|
// unexpected breakages while it's still new. It should be removed before too long.
|
||||||
|
const ENABLE_DROP_TRACKING: bool = false;
|
||||||
|
|
||||||
struct InteriorVisitor<'a, 'tcx> {
|
struct InteriorVisitor<'a, 'tcx> {
|
||||||
fcx: &'a FnCtxt<'a, 'tcx>,
|
fcx: &'a FnCtxt<'a, 'tcx>,
|
||||||
types: FxIndexSet<ty::GeneratorInteriorTypeCause<'tcx>>,
|
types: FxIndexSet<ty::GeneratorInteriorTypeCause<'tcx>>,
|
||||||
|
@ -77,7 +81,10 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
|
||||||
yield_data.expr_and_pat_count, self.expr_count, source_span
|
yield_data.expr_and_pat_count, self.expr_count, source_span
|
||||||
);
|
);
|
||||||
|
|
||||||
if self.drop_ranges.is_dropped_at(hir_id, yield_data.expr_and_pat_count)
|
if ENABLE_DROP_TRACKING
|
||||||
|
&& self
|
||||||
|
.drop_ranges
|
||||||
|
.is_dropped_at(hir_id, yield_data.expr_and_pat_count)
|
||||||
{
|
{
|
||||||
debug!("value is dropped at yield point; not recording");
|
debug!("value is dropped at yield point; not recording");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
// edition:2018
|
// edition:2018
|
||||||
// compile-flags: --crate-type lib
|
// compile-flags: --crate-type lib
|
||||||
|
|
||||||
|
// FIXME(eholk): temporarily disabled while drop range tracking is disabled
|
||||||
|
// (see generator_interior.rs:27)
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
use std::{cell::RefCell, fmt::Debug, rc::Rc};
|
use std::{cell::RefCell, fmt::Debug, rc::Rc};
|
||||||
|
|
||||||
fn non_sync() -> impl Debug {
|
fn non_sync() -> impl Debug {
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
// (rather than give a general error message)
|
// (rather than give a general error message)
|
||||||
// edition:2018
|
// edition:2018
|
||||||
|
|
||||||
|
// FIXME(eholk): temporarily disabled while drop range tracking is disabled
|
||||||
|
// (see generator_interior.rs:27)
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
async fn bar<T>() -> () {}
|
async fn bar<T>() -> () {}
|
||||||
|
|
||||||
async fn foo() {
|
async fn foo() {
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
// build-pass
|
// build-pass
|
||||||
|
|
||||||
|
// FIXME(eholk): temporarily disabled while drop range tracking is disabled
|
||||||
|
// (see generator_interior.rs:27)
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
// A test to ensure generators capture values that were conditionally dropped,
|
// A test to ensure generators capture values that were conditionally dropped,
|
||||||
// and also that values that are dropped along all paths to a yield do not get
|
// and also that values that are dropped along all paths to a yield do not get
|
||||||
// included in the generator type.
|
// included in the generator type.
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
// check-pass
|
// check-pass
|
||||||
|
|
||||||
|
// FIXME(eholk): temporarily disabled while drop range tracking is disabled
|
||||||
|
// (see generator_interior.rs:27)
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
#![feature(negative_impls, generators)]
|
#![feature(negative_impls, generators)]
|
||||||
|
|
||||||
struct Foo;
|
struct Foo;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// FIXME(eholk): temporarily disabled while drop range tracking is disabled
|
||||||
|
// (see generator_interior.rs:27)
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
#![feature(negative_impls, generators)]
|
#![feature(negative_impls, generators)]
|
||||||
|
|
||||||
struct Foo;
|
struct Foo;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue