about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-07-14 22:54:36 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-08-11 23:19:04 +0300
commitb052dd6240b136c02837b1c27bc3b49b4663be02 (patch)
tree34f8d410ae6802912b7ce021d86581485a5f3e5a
parent737961b6c66800c94ae25e0738f1ccf033f4fd9b (diff)
downloadrust-b052dd6240b136c02837b1c27bc3b49b4663be02.tar.gz
rust-b052dd6240b136c02837b1c27bc3b49b4663be02.zip
Add test for #28514
Fixes #28514
-rw-r--r--src/test/compile-fail/issue-28514.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/test/compile-fail/issue-28514.rs b/src/test/compile-fail/issue-28514.rs
new file mode 100644
index 00000000000..6ee375503c2
--- /dev/null
+++ b/src/test/compile-fail/issue-28514.rs
@@ -0,0 +1,45 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub use inner::C;
+
+mod inner {
+    trait A {
+        fn a(&self) { }
+    }
+
+    pub trait B {
+        fn b(&self) { }
+    }
+
+    pub trait C: A + B { //~ ERROR private trait in public interface
+                         //~^ WARN will become a hard error
+        fn c(&self) { }
+    }
+
+    impl A for i32 {}
+    impl B for i32 {}
+    impl C for i32 {}
+
+}
+
+fn main() {
+    // A is private
+    // B is pub, not reexported
+    // C : A + B is pub, reexported
+
+    // 0.a(); // can't call
+    // 0.b(); // can't call
+    0.c(); // ok
+
+    C::a(&0); // can call
+    C::b(&0); // can call
+    C::c(&0); // ok
+}