Propagate reachability through reexported impls
When re-exporting a trait/structure/enum, then we need to propagate the reachability of the type through the methods that are defined on it. Closes #9906 Closes #9968
This commit is contained in:
parent
ebb9b46191
commit
a25bbcc27f
5 changed files with 172 additions and 35 deletions
28
src/test/auxiliary/issue-9906.rs
Normal file
28
src/test/auxiliary/issue-9906.rs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright 2013 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.
|
||||
|
||||
// xfail-fast windows doesn't like extern mod
|
||||
// aux-build:issue-9906.rs
|
||||
|
||||
pub use other::FooBar;
|
||||
pub use other::foo;
|
||||
|
||||
mod other {
|
||||
pub struct FooBar{value: int}
|
||||
impl FooBar{
|
||||
pub fn new(val: int) -> FooBar {
|
||||
FooBar{value: val}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn foo(){
|
||||
1+1;
|
||||
}
|
||||
}
|
||||
32
src/test/auxiliary/issue-9968.rs
Normal file
32
src/test/auxiliary/issue-9968.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright 2013 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 internal::core::{Trait, Struct};
|
||||
|
||||
mod internal {
|
||||
pub mod core {
|
||||
pub struct Struct;
|
||||
impl Struct {
|
||||
pub fn init() -> Struct {
|
||||
Struct
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Trait {
|
||||
fn test(&self) {
|
||||
private();
|
||||
}
|
||||
}
|
||||
|
||||
impl Trait for Struct {}
|
||||
|
||||
fn private() { }
|
||||
}
|
||||
}
|
||||
19
src/test/run-pass/issue-9906.rs
Normal file
19
src/test/run-pass/issue-9906.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2013 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.
|
||||
|
||||
// xfail-fast windows doesn't like extern mod
|
||||
// aux-build:issue-9906.rs
|
||||
|
||||
extern mod testmod(name = "issue-9906");
|
||||
|
||||
fn main() {
|
||||
testmod::foo();
|
||||
testmod::FooBar::new(1);
|
||||
}
|
||||
21
src/test/run-pass/issue-9968.rs
Normal file
21
src/test/run-pass/issue-9968.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2013 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.
|
||||
|
||||
// xfail-fast windows doesn't like extern mod
|
||||
// aux-build:issue-9968.rs
|
||||
|
||||
extern mod lib(name = "issue-9968");
|
||||
|
||||
use lib::{Trait, Struct};
|
||||
|
||||
fn main()
|
||||
{
|
||||
Struct::init().test();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue