summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/issue-33140.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/traits/issue-33140.rs')
-rw-r--r--src/test/ui/traits/issue-33140.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/test/ui/traits/issue-33140.rs b/src/test/ui/traits/issue-33140.rs
new file mode 100644
index 000000000..9bdac4b83
--- /dev/null
+++ b/src/test/ui/traits/issue-33140.rs
@@ -0,0 +1,47 @@
+trait Trait {
+ fn xyz() -> bool;
+}
+
+impl Trait for dyn Send + Sync {
+ fn xyz() -> bool { false }
+}
+
+impl Trait for dyn Sync + Send {
+//~^ ERROR conflicting implementations
+ fn xyz() -> bool { true }
+}
+
+trait Trait2 {
+ fn uvw() -> bool;
+}
+
+impl Trait2 for dyn Send + Sync {
+ fn uvw() -> bool { false }
+}
+
+impl Trait2 for dyn Sync + Send + Sync {
+//~^ ERROR conflicting implementations
+ fn uvw() -> bool { true }
+}
+
+struct Foo<T: ?Sized>(T);
+impl Foo<dyn Send + Sync> {
+ fn abc() -> bool { //~ ERROR duplicate definitions with name `abc`
+ false
+ }
+}
+
+impl Foo<dyn Sync + Send> {
+ fn abc() -> bool {
+ true
+ }
+}
+
+fn main() {
+ assert_eq!(<dyn Send + Sync>::xyz(), false);
+ assert_eq!(<dyn Sync + Send>::xyz(), true);
+ assert_eq!(<dyn Send + Sync>::uvw(), false);
+ assert_eq!(<dyn Sync + Send+ Sync>::uvw(), true);
+ assert_eq!(<Foo<dyn Send + Sync>>::abc(), false);
+ assert_eq!(<Foo<dyn Sync + Send>>::abc(), true);
+}