From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- .../ui/generic-associated-types/issue-93341.rs | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/ui/generic-associated-types/issue-93341.rs (limited to 'src/test/ui/generic-associated-types/issue-93341.rs') diff --git a/src/test/ui/generic-associated-types/issue-93341.rs b/src/test/ui/generic-associated-types/issue-93341.rs new file mode 100644 index 000000000..e96a768ec --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-93341.rs @@ -0,0 +1,55 @@ +// check-pass + +#![feature(generic_associated_types)] +use std::marker::PhantomData; + +pub struct Id<'id>(PhantomData &'id ()>); + +fn new_id() -> Id<'static> { + Id(PhantomData) +} + +pub trait HasLifetime where { + type AtLifetime<'a>; +} + +pub struct ExistentialLifetime(S::AtLifetime<'static>); + +impl ExistentialLifetime { + pub fn new(f: F) -> ExistentialLifetime + where for<'id> F: FnOnce(Id<'id>) -> S::AtLifetime<'id> { + ExistentialLifetime(f(new_id())) + } +} + + +struct ExampleS<'id>(Id<'id>); + +struct ExampleMarker; + +impl HasLifetime for ExampleMarker { + type AtLifetime<'id> = ExampleS<'id>; +} + + +fn broken0() -> ExistentialLifetime { + fn new_helper<'id>(id: Id<'id>) -> ExampleS<'id> { + ExampleS(id) + } + + ExistentialLifetime::::new(new_helper) +} + +fn broken1() -> ExistentialLifetime { + fn new_helper<'id>(id: Id<'id>) -> ::AtLifetime<'id> { + ExampleS(id) + } + + ExistentialLifetime::::new(new_helper) +} + +fn broken2() -> ExistentialLifetime { + ExistentialLifetime::::new(|id| ExampleS(id)) +} + +fn main() {} -- cgit v1.2.3