mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
new trait alias tests
Co-authored-by: Alexander Regueiro <alexreg@me.com>
This commit is contained in:
parent
1336b8e8c7
commit
b411994b3b
13
src/test/ui/issues/issue-56488.rs
Normal file
13
src/test/ui/issues/issue-56488.rs
Normal 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() {}
|
21
src/test/ui/lint/lint-incoherent-auto-trait-objects.rs
Normal file
21
src/test/ui/lint/lint-incoherent-auto-trait-objects.rs
Normal 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() {}
|
39
src/test/ui/lint/lint-incoherent-auto-trait-objects.stderr
Normal file
39
src/test/ui/lint/lint-incoherent-auto-trait-objects.stderr
Normal 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
|
||||||
|
|
3
src/test/ui/traits/auxiliary/trait_alias.rs
Normal file
3
src/test/ui/traits/auxiliary/trait_alias.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#![feature(trait_alias)]
|
||||||
|
|
||||||
|
pub trait SendSync = Send + Sync;
|
17
src/test/ui/traits/trait-alias-cross-crate.rs
Normal file
17
src/test/ui/traits/trait-alias-cross-crate.rs
Normal 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]
|
||||||
|
}
|
29
src/test/ui/traits/trait-alias-cross-crate.stderr
Normal file
29
src/test/ui/traits/trait-alias-cross-crate.stderr
Normal 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`.
|
Loading…
Reference in New Issue
Block a user