summaryrefslogtreecommitdiffstats
path: root/src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs')
-rw-r--r--src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs b/src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs
new file mode 100644
index 000000000..cbf1daabe
--- /dev/null
+++ b/src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs
@@ -0,0 +1,74 @@
+#![allow(bare_trait_objects)]
+struct Struct;
+trait Trait {}
+impl Trait for Struct {}
+impl Trait for u32 {}
+
+fn fuz() -> (usize, Trait) { (42, Struct) }
+//~^ ERROR E0277
+//~| ERROR E0308
+fn bar() -> (usize, dyn Trait) { (42, Struct) }
+//~^ ERROR E0277
+//~| ERROR E0308
+fn bap() -> Trait { Struct }
+//~^ ERROR E0746
+fn ban() -> dyn Trait { Struct }
+//~^ ERROR E0746
+fn bak() -> dyn Trait { unimplemented!() } //~ ERROR E0746
+// Suggest using `Box<dyn Trait>`
+fn bal() -> dyn Trait { //~ ERROR E0746
+ if true {
+ return Struct;
+ }
+ 42
+}
+fn bax() -> dyn Trait { //~ ERROR E0746
+ if true {
+ Struct
+ } else {
+ 42 //~ ERROR `if` and `else` have incompatible types
+ }
+}
+fn bam() -> Box<dyn Trait> {
+ if true {
+ return Struct; //~ ERROR mismatched types
+ }
+ 42 //~ ERROR mismatched types
+}
+fn baq() -> Box<dyn Trait> {
+ if true {
+ return 0; //~ ERROR mismatched types
+ }
+ 42 //~ ERROR mismatched types
+}
+fn baz() -> Box<dyn Trait> {
+ if true {
+ Struct //~ ERROR mismatched types
+ } else {
+ 42 //~ ERROR mismatched types
+ }
+}
+fn baw() -> Box<dyn Trait> {
+ if true {
+ 0 //~ ERROR mismatched types
+ } else {
+ 42 //~ ERROR mismatched types
+ }
+}
+
+// Suggest using `impl Trait`
+fn bat() -> dyn Trait { //~ ERROR E0746
+ if true {
+ return 0;
+ }
+ 42
+}
+fn bay() -> dyn Trait { //~ ERROR E0746
+ if true {
+ 0
+ } else {
+ 42
+ }
+}
+
+fn main() {}