diff options
| author | Jack Huey <jack.huey@umassmed.edu> | 2021-04-28 10:18:52 -0400 |
|---|---|---|
| committer | Jack Huey <jack.huey@umassmed.edu> | 2021-04-28 10:18:52 -0400 |
| commit | 31ae3b2bdb9376b749fc1d64b531e86806e03c73 (patch) | |
| tree | 167b4e70edad00d0c4696c4a90232290e3bc34e5 | |
| parent | 1919b3f22706fee0b2c6ac3d42316545900b7734 (diff) | |
| download | rust-31ae3b2bdb9376b749fc1d64b531e86806e03c73.tar.gz rust-31ae3b2bdb9376b749fc1d64b531e86806e03c73.zip | |
Add HAS_RE_LATE_BOUND if there are bound vars
| -rw-r--r-- | compiler/rustc_middle/src/ty/flags.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/lifetimes/issue-83737-erasing-bound-vars.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/lifetimes/issue-84604.rs | 9 |
3 files changed, 27 insertions, 0 deletions
diff --git a/compiler/rustc_middle/src/ty/flags.rs b/compiler/rustc_middle/src/ty/flags.rs index 01bc5cc761c..92288c89827 100644 --- a/compiler/rustc_middle/src/ty/flags.rs +++ b/compiler/rustc_middle/src/ty/flags.rs @@ -59,6 +59,10 @@ impl FlagComputation { { let mut computation = FlagComputation::new(); + if !value.bound_vars().is_empty() { + computation.flags = computation.flags | TypeFlags::HAS_RE_LATE_BOUND; + } + f(&mut computation, value.skip_binder()); self.add_flags(computation.flags); diff --git a/src/test/ui/lifetimes/issue-83737-erasing-bound-vars.rs b/src/test/ui/lifetimes/issue-83737-erasing-bound-vars.rs new file mode 100644 index 00000000000..c496a3556c8 --- /dev/null +++ b/src/test/ui/lifetimes/issue-83737-erasing-bound-vars.rs @@ -0,0 +1,14 @@ +// build-pass +// compile-flags: --edition 2018 +// compile-flags: --crate-type rlib + +use std::future::Future; + +async fn handle<F>(slf: &F) +where + F: Fn(&()) -> Box<dyn for<'a> Future<Output = ()> + Unpin>, +{ + (slf)(&()).await; +} + +fn main() {} diff --git a/src/test/ui/lifetimes/issue-84604.rs b/src/test/ui/lifetimes/issue-84604.rs new file mode 100644 index 00000000000..df8368da0a0 --- /dev/null +++ b/src/test/ui/lifetimes/issue-84604.rs @@ -0,0 +1,9 @@ +// run-pass +// compile-flags: -Zsymbol-mangling-version=v0 + +pub fn f<T: ?Sized>() {} +pub trait Frob<T: ?Sized> {} +fn main() { + f::<dyn Frob<str>>(); + f::<dyn for<'a> Frob<str>>(); +} |
