new trait alias tests

Co-authored-by: Alexander Regueiro <alexreg@me.com>
This commit is contained in:
Niko Matsakis 2019-01-10 16:56:05 -05:00
parent 1336b8e8c7
commit b411994b3b
6 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,13 @@
// run-pass
#![feature(trait_alias)]
mod alpha {
pub trait A {}
pub trait C = A;
}
#[allow(unused_imports)]
use alpha::C;
fn main() {}

View File

@ -0,0 +1,21 @@
// ignore-tidy-linelength
trait Foo {}
impl Foo for dyn Send {}
impl Foo for dyn Send + Send {}
//~^ ERROR conflicting implementations
//~| hard error
impl Foo for dyn Send + Sync {}
impl Foo for dyn Sync + Send {}
//~^ ERROR conflicting implementations
//~| hard error
impl Foo for dyn Send + Sync + Send {}
//~^ ERROR conflicting implementations
//~| hard error
fn main() {}

View File

@ -0,0 +1,39 @@
error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + 'static)`: (E0119)
--> $DIR/lint-incoherent-auto-trait-objects.rs:7:1
|
LL | impl Foo for dyn Send {}
| --------------------- first implementation here
LL |
LL | impl Foo for dyn Send + Send {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + 'static)`
|
= note: #[deny(order_dependent_trait_objects)] on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119)
--> $DIR/lint-incoherent-auto-trait-objects.rs:13:1
|
LL | impl Foo for dyn Send + Sync {}
| ---------------------------- first implementation here
LL |
LL | impl Foo for dyn Sync + Send {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)`
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119)
--> $DIR/lint-incoherent-auto-trait-objects.rs:17:1
|
LL | impl Foo for dyn Sync + Send {}
| ---------------------------- first implementation here
...
LL | impl Foo for dyn Send + Sync + Send {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)`
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
error: aborting due to 3 previous errors

View File

@ -0,0 +1,3 @@
#![feature(trait_alias)]
pub trait SendSync = Send + Sync;

View File

@ -0,0 +1,17 @@
// aux-build:trait_alias.rs
#![feature(trait_alias)]
extern crate trait_alias;
use std::rc::Rc;
use trait_alias::SendSync;
fn use_alias<T: SendSync>() {}
fn main() {
use_alias::<u32>();
use_alias::<Rc<u32>>();
//~^ ERROR `std::rc::Rc<u32>` cannot be sent between threads safely [E0277]
//~^^ ERROR `std::rc::Rc<u32>` cannot be shared between threads safely [E0277]
}

View File

@ -0,0 +1,29 @@
error[E0277]: `std::rc::Rc<u32>` cannot be sent between threads safely
--> $DIR/trait-alias-cross-crate.rs:14:5
|
LL | use_alias::<Rc<u32>>();
| ^^^^^^^^^^^^^^^^^^^^ `std::rc::Rc<u32>` cannot be sent between threads safely
|
= help: the trait `std::marker::Send` is not implemented for `std::rc::Rc<u32>`
note: required by `use_alias`
--> $DIR/trait-alias-cross-crate.rs:10:1
|
LL | fn use_alias<T: SendSync>() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0277]: `std::rc::Rc<u32>` cannot be shared between threads safely
--> $DIR/trait-alias-cross-crate.rs:14:5
|
LL | use_alias::<Rc<u32>>();
| ^^^^^^^^^^^^^^^^^^^^ `std::rc::Rc<u32>` cannot be shared between threads safely
|
= help: the trait `std::marker::Sync` is not implemented for `std::rc::Rc<u32>`
note: required by `use_alias`
--> $DIR/trait-alias-cross-crate.rs:10:1
|
LL | fn use_alias<T: SendSync>() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0277`.