From f3b44929856283c43742f86692349c27bb701034 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 17 Jul 2018 15:11:00 +0200 Subject: [PATCH] Add some tests around associated types --- .../ui/existential_types/bound_reduction.rs | 30 +++++++++++++++++++ .../ui/existential_types/bound_reduction2.rs | 28 +++++++++++++++++ .../existential_types/bound_reduction2.stderr | 16 ++++++++++ .../no_revealing_outside_defining_module.rs | 2 +- .../ui/existential_types/not_well_formed.rs | 28 +++++++++++++++++ .../existential_types/not_well_formed.stderr | 9 ++++++ 6 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/existential_types/bound_reduction.rs create mode 100644 src/test/ui/existential_types/bound_reduction2.rs create mode 100644 src/test/ui/existential_types/bound_reduction2.stderr create mode 100644 src/test/ui/existential_types/not_well_formed.rs create mode 100644 src/test/ui/existential_types/not_well_formed.stderr diff --git a/src/test/ui/existential_types/bound_reduction.rs b/src/test/ui/existential_types/bound_reduction.rs new file mode 100644 index 000000000000..2e42c92ab30a --- /dev/null +++ b/src/test/ui/existential_types/bound_reduction.rs @@ -0,0 +1,30 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-pass + +#![allow(warnings)] + +#![feature(existential_type)] + +fn main() { +} + +existential type Foo: std::fmt::Debug; + +trait Trait {} + +fn foo_desugared>(_: T) -> Foo { + (42, std::marker::PhantomData::) +} diff --git a/src/test/ui/existential_types/bound_reduction2.rs b/src/test/ui/existential_types/bound_reduction2.rs new file mode 100644 index 000000000000..d098a4ef4c8e --- /dev/null +++ b/src/test/ui/existential_types/bound_reduction2.rs @@ -0,0 +1,28 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(existential_type)] + +fn main() { +} + +trait TraitWithAssoc { + type Assoc; +} + +existential type Foo: Trait; + +trait Trait {} + +impl Trait for () {} + +fn foo_desugared(_: T) -> Foo { //~ ERROR non-defining + () +} diff --git a/src/test/ui/existential_types/bound_reduction2.stderr b/src/test/ui/existential_types/bound_reduction2.stderr new file mode 100644 index 000000000000..33b8b71bffb1 --- /dev/null +++ b/src/test/ui/existential_types/bound_reduction2.stderr @@ -0,0 +1,16 @@ +error: non-defining existential type use in defining scope + --> $DIR/bound_reduction2.rs:26:1 + | +LL | / fn foo_desugared(_: T) -> Foo { //~ ERROR non-defining +LL | | () +LL | | } + | |_^ + | +note: used non-generic type ::Assoc for generic parameter + --> $DIR/bound_reduction2.rs:20:22 + | +LL | existential type Foo: Trait; + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/existential_types/no_revealing_outside_defining_module.rs b/src/test/ui/existential_types/no_revealing_outside_defining_module.rs index 41c17c357bc8..f646891b3b4f 100644 --- a/src/test/ui/existential_types/no_revealing_outside_defining_module.rs +++ b/src/test/ui/existential_types/no_revealing_outside_defining_module.rs @@ -32,4 +32,4 @@ fn bomp() -> boo::Boo { fn bomp_loop() -> boo::Boo { loop {} -} \ No newline at end of file +} diff --git a/src/test/ui/existential_types/not_well_formed.rs b/src/test/ui/existential_types/not_well_formed.rs new file mode 100644 index 000000000000..b3d38aee8c53 --- /dev/null +++ b/src/test/ui/existential_types/not_well_formed.rs @@ -0,0 +1,28 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(existential_type)] + +fn main() { +} + +trait TraitWithAssoc { + type Assoc; +} + +existential type Foo: Trait; //~ associated type `Assoc` not found for `V` + +trait Trait {} + +impl Trait for () {} + +fn foo_desugared(_: T) -> Foo { + () +} diff --git a/src/test/ui/existential_types/not_well_formed.stderr b/src/test/ui/existential_types/not_well_formed.stderr new file mode 100644 index 000000000000..6b7d1be98a77 --- /dev/null +++ b/src/test/ui/existential_types/not_well_formed.stderr @@ -0,0 +1,9 @@ +error[E0220]: associated type `Assoc` not found for `V` + --> $DIR/not_well_formed.rs:20:32 + | +LL | existential type Foo: Trait; //~ associated type `Assoc` not found for `V` + | ^^^^^^^^ associated type `Assoc` not found + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0220`.