Skip to content

Commit 31fa916

Browse files
committed
test: Add regression test for "source trait is private"
1 parent cb0ce69 commit 31fa916

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/test/compile-fail/privacy-ufcs.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Test to ensure private traits are inaccessible with UFCS angle-bracket syntax.
12+
13+
mod foo {
14+
trait Bar {
15+
fn baz() {}
16+
}
17+
18+
impl Bar for i32 {}
19+
}
20+
21+
fn main() {
22+
<i32 as ::foo::Bar>::baz(); //~ERROR method `baz` is inaccessible
23+
//~^NOTE: trait `Bar` is private
24+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
mod m {
12+
trait Priv {
13+
fn f(&self) {}
14+
}
15+
impl Priv for super::S {}
16+
pub trait Pub: Priv {}
17+
}
18+
19+
struct S;
20+
impl m::Pub for S {}
21+
22+
fn g<T: m::Pub>(arg: T) {
23+
arg.f(); //~ ERROR: source trait is private
24+
}
25+
26+
fn main() {
27+
g(S);
28+
}

0 commit comments

Comments
 (0)