about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-10-26 09:17:09 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-10-26 10:38:26 -0700
commit31fa9167c0046b3f225864d3e7317120694bfb8f (patch)
tree6573155cb8a12202e694fe52f31afd953c5cf51a /src
parentcb0ce69026e895b41e7512d4665be05e212e8a7f (diff)
downloadrust-31fa9167c0046b3f225864d3e7317120694bfb8f.tar.gz
rust-31fa9167c0046b3f225864d3e7317120694bfb8f.zip
test: Add regression test for "source trait is private"
Diffstat (limited to 'src')
-rw-r--r--src/test/compile-fail/privacy-ufcs.rs24
-rw-r--r--src/test/compile-fail/trait-not-accessible.rs28
2 files changed, 52 insertions, 0 deletions
diff --git a/src/test/compile-fail/privacy-ufcs.rs b/src/test/compile-fail/privacy-ufcs.rs
new file mode 100644
index 00000000000..ccb379c7179
--- /dev/null
+++ b/src/test/compile-fail/privacy-ufcs.rs
@@ -0,0 +1,24 @@
+// Copyright 2015 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.
+
+// Test to ensure private traits are inaccessible with UFCS angle-bracket syntax.
+
+mod foo {
+    trait Bar {
+        fn baz() {}
+    }
+
+    impl Bar for i32 {}
+}
+
+fn main() {
+    <i32 as ::foo::Bar>::baz(); //~ERROR method `baz` is inaccessible
+                                //~^NOTE: trait `Bar` is private
+}
diff --git a/src/test/compile-fail/trait-not-accessible.rs b/src/test/compile-fail/trait-not-accessible.rs
new file mode 100644
index 00000000000..21668fcfeae
--- /dev/null
+++ b/src/test/compile-fail/trait-not-accessible.rs
@@ -0,0 +1,28 @@
+// Copyright 2015 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.
+
+mod m {
+    trait Priv {
+        fn f(&self) {}
+    }
+    impl Priv for super::S {}
+    pub trait Pub: Priv {}
+}
+
+struct S;
+impl m::Pub for S {}
+
+fn g<T: m::Pub>(arg: T) {
+    arg.f(); //~ ERROR: source trait is private
+}
+
+fn main() {
+    g(S);
+}