about summary refs log tree commit diff
path: root/src/test/ui
diff options
context:
space:
mode:
authorkadmin <julianknodt@gmail.com>2020-11-22 09:37:37 +0000
committerkadmin <julianknodt@gmail.com>2021-01-31 20:45:13 +0000
commit6a03f0350d2c6603eab20ca463d1dd4581c64edf (patch)
treef32b374c2ebf4211149a60bf8e3ab93b396b62b0 /src/test/ui
parentd1aed50ab81df3140977c610c5a7d00f36dc519f (diff)
downloadrust-6a03f0350d2c6603eab20ca463d1dd4581c64edf.tar.gz
rust-6a03f0350d2c6603eab20ca463d1dd4581c64edf.zip
Add error message for private fn
Bless tests

Update with changes from comments
Diffstat (limited to 'src/test/ui')
-rw-r--r--src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.rs31
-rw-r--r--src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.stderr43
2 files changed, 74 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.rs b/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.rs
new file mode 100644
index 00000000000..9f457fbd346
--- /dev/null
+++ b/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.rs
@@ -0,0 +1,31 @@
+#![crate_type = "lib"]
+#![feature(const_generics, const_evaluatable_checked)]
+#![allow(incomplete_features)]
+
+pub struct Const<const U: u8>;
+
+pub trait Trait {
+    type AssocTy;
+    fn assoc_fn() -> Self::AssocTy;
+}
+
+impl<const U: u8> Trait for Const<U>
+//~^ WARN private type
+//~| WARN this was previously
+//~| WARN private type
+//~| WARN this was previously
+
+where
+    Const<{ my_const_fn(U) }>: ,
+{
+    type AssocTy = Const<{ my_const_fn(U) }>;
+    //~^ ERROR private type
+    fn assoc_fn() -> Self::AssocTy {
+        Const
+    }
+}
+
+const fn my_const_fn(val: u8) -> u8 {
+    // body of this function doesn't matter
+    val
+}
diff --git a/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.stderr b/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.stderr
new file mode 100644
index 00000000000..842c22c5c67
--- /dev/null
+++ b/src/test/ui/const-generics/const_evaluatable_checked/eval-privacy.stderr
@@ -0,0 +1,43 @@
+warning: private type `fn(u8) -> u8 {my_const_fn}` in public interface (error E0446)
+  --> $DIR/eval-privacy.rs:12:1
+   |
+LL | / impl<const U: u8> Trait for Const<U>
+LL | |
+LL | |
+LL | |
+...  |
+LL | |     }
+LL | | }
+   | |_^
+   |
+   = note: `#[warn(private_in_public)]` 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
+
+warning: private type `fn(u8) -> u8 {my_const_fn}` in public interface (error E0446)
+  --> $DIR/eval-privacy.rs:12:1
+   |
+LL | / impl<const U: u8> Trait for Const<U>
+LL | |
+LL | |
+LL | |
+...  |
+LL | |     }
+LL | | }
+   | |_^
+   |
+   = 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 #34537 <https://github.com/rust-lang/rust/issues/34537>
+
+error[E0446]: private type `fn(u8) -> u8 {my_const_fn}` in public interface
+  --> $DIR/eval-privacy.rs:21:5
+   |
+LL |     type AssocTy = Const<{ my_const_fn(U) }>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private type
+...
+LL | const fn my_const_fn(val: u8) -> u8 {
+   | ----------------------------------- `fn(u8) -> u8 {my_const_fn}` declared as private
+
+error: aborting due to previous error; 2 warnings emitted
+
+For more information about this error, try `rustc --explain E0446`.