//@ compile-flags: -Znext-solver #![feature(type_alias_impl_trait)] use std::future::Future; // Test for https://github.com/rust-lang/trait-system-refactor-initiative/issues/235 // These are cases where an opaque types become "stranded" due to // some errors. Make sure we don't ICE in either case. // Case 1: `impl Send` is stranded fn foo() -> impl ?Future { //~^ ERROR bound modifier `?` can only be applied to `Sized` //~| ERROR bound modifier `?` can only be applied to `Sized` () } // Case 2: `Assoc = impl Trait` is stranded trait Trait {} impl Trait for i32 {} fn produce() -> impl Trait { //~^ ERROR associated type `Assoc` not found for `Trait` //~| ERROR associated type `Assoc` not found for `Trait` 16 } // Case 3: `impl Trait` is stranded fn ill_formed_string() -> String { //~^ ERROR struct takes 0 generic arguments but 1 generic argument was supplied String::from("a string") } // Case 4: TAIT variant of Case 1 to 3 type Foo = impl ?Future; //~^ ERROR unconstrained opaque type //~| ERROR unconstrained opaque type //~| ERROR bound modifier `?` can only be applied to `Sized` //~| ERROR bound modifier `?` can only be applied to `Sized` type Produce = impl Trait; //~^ ERROR unconstrained opaque type //~| ERROR unconstrained opaque type //~| ERROR associated type `Assoc` not found for `Trait` //~| ERROR associated type `Assoc` not found for `Trait` type IllFormedString = String; //~^ ERROR unconstrained opaque type //~| ERROR struct takes 0 generic arguments but 1 generic argument was supplied fn main() {}