Auto merge of #58010 - Zoxc:parallel-passes, r=michaelwoerister

Move privacy checking later in the pipeline and make some passes run in parallel

r? @michaelwoerister
This commit is contained in:
bors 2019-02-07 09:49:08 +00:00
commit ad433894ab
15 changed files with 157 additions and 104 deletions

View file

@ -1,4 +1,4 @@
mod Foo {
mod foo {
struct Bar(u32);
pub fn bar() -> Bar { //~ ERROR E0446

View file

@ -1,8 +1,8 @@
error[E0446]: private type `Foo::Bar` in public interface
error[E0446]: private type `foo::Bar` in public interface
--> $DIR/E0446.rs:4:5
|
LL | struct Bar(u32);
| - `Foo::Bar` declared as private
| - `foo::Bar` declared as private
LL |
LL | / pub fn bar() -> Bar { //~ ERROR E0446
LL | | Bar(0)

View file

@ -1,4 +1,4 @@
mod Bar {
mod bar {
pub struct Foo {
pub a: isize,
b: isize,
@ -10,10 +10,10 @@ mod Bar {
);
}
fn pat_match(foo: Bar::Foo) {
let Bar::Foo{a:a, b:b} = foo; //~ ERROR E0451
fn pat_match(foo: bar::Foo) {
let bar::Foo{a, b} = foo; //~ ERROR E0451
}
fn main() {
let f = Bar::Foo{ a: 0, b: 0 }; //~ ERROR E0451
let f = bar::Foo{ a: 0, b: 0 }; //~ ERROR E0451
}

View file

@ -1,13 +1,13 @@
error[E0451]: field `b` of struct `Bar::Foo` is private
--> $DIR/E0451.rs:14:23
error[E0451]: field `b` of struct `bar::Foo` is private
--> $DIR/E0451.rs:14:21
|
LL | let Bar::Foo{a:a, b:b} = foo; //~ ERROR E0451
| ^^^ field `b` is private
LL | let bar::Foo{a, b} = foo; //~ ERROR E0451
| ^ field `b` is private
error[E0451]: field `b` of struct `Bar::Foo` is private
error[E0451]: field `b` of struct `bar::Foo` is private
--> $DIR/E0451.rs:18:29
|
LL | let f = Bar::Foo{ a: 0, b: 0 }; //~ ERROR E0451
LL | let f = bar::Foo{ a: 0, b: 0 }; //~ ERROR E0451
| ^^^^ field `b` is private
error: aborting due to 2 previous errors

View file

@ -6,12 +6,12 @@ use self::foo::S;
mod foo {
use std::cell::{UnsafeCell};
static mut count : UnsafeCell<u64> = UnsafeCell::new(1);
static mut COUNT : UnsafeCell<u64> = UnsafeCell::new(1);
pub struct S { pub a: u8, pub b: String, secret_uid: u64 }
pub fn make_secrets(a: u8, b: String) -> S {
let val = unsafe { let p = count.get(); let val = *p; *p = val + 1; val };
let val = unsafe { let p = COUNT.get(); let val = *p; *p = val + 1; val };
println!("creating {}, uid {}", b, val);
S { a: a, b: b, secret_uid: val }
}

View file

@ -49,6 +49,7 @@ mod traits {
pub type Alias<T: PrivTr> = T; //~ ERROR private trait `traits::PrivTr` in public interface
//~| WARNING hard error
//~| WARNING bounds on generic parameters are not enforced in type aliases
pub trait Tr1: PrivTr {} //~ ERROR private trait `traits::PrivTr` in public interface
//~^ WARNING hard error
pub trait Tr2<T: PrivTr> {} //~ ERROR private trait `traits::PrivTr` in public interface
@ -74,6 +75,7 @@ mod traits_where {
pub type Alias<T> where T: PrivTr = T;
//~^ ERROR private trait `traits_where::PrivTr` in public interface
//~| WARNING hard error
//~| WARNING where clauses are not enforced in type aliases
pub trait Tr2<T> where T: PrivTr {}
//~^ ERROR private trait `traits_where::PrivTr` in public interface
//~| WARNING hard error

View file

@ -112,7 +112,7 @@ LL | pub type Alias<T: PrivTr> = T; //~ ERROR private trait `traits::PrivTr`
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:52:5
--> $DIR/private-in-public-warn.rs:53:5
|
LL | pub trait Tr1: PrivTr {} //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^
@ -121,7 +121,7 @@ LL | pub trait Tr1: PrivTr {} //~ ERROR private trait `traits::PrivTr` in pu
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:54:5
--> $DIR/private-in-public-warn.rs:55:5
|
LL | pub trait Tr2<T: PrivTr> {} //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -130,7 +130,7 @@ LL | pub trait Tr2<T: PrivTr> {} //~ ERROR private trait `traits::PrivTr` in
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:56:5
--> $DIR/private-in-public-warn.rs:57:5
|
LL | / pub trait Tr3 {
LL | | //~^ ERROR private trait `traits::PrivTr` in public interface
@ -145,7 +145,7 @@ LL | | }
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:60:9
--> $DIR/private-in-public-warn.rs:61:9
|
LL | fn f<T: PrivTr>(arg: T) {} //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -154,7 +154,7 @@ LL | fn f<T: PrivTr>(arg: T) {} //~ ERROR private trait `traits::PrivTr`
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:63:5
--> $DIR/private-in-public-warn.rs:64:5
|
LL | impl<T: PrivTr> Pub<T> {} //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^
@ -163,7 +163,7 @@ LL | impl<T: PrivTr> Pub<T> {} //~ ERROR private trait `traits::PrivTr` in p
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:65:5
--> $DIR/private-in-public-warn.rs:66:5
|
LL | impl<T: PrivTr> PubTr for Pub<T> {} //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -172,7 +172,7 @@ LL | impl<T: PrivTr> PubTr for Pub<T> {} //~ ERROR private trait `traits::Pr
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits_where::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:74:5
--> $DIR/private-in-public-warn.rs:75:5
|
LL | pub type Alias<T> where T: PrivTr = T;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -181,7 +181,7 @@ LL | pub type Alias<T> where T: PrivTr = T;
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits_where::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:77:5
--> $DIR/private-in-public-warn.rs:79:5
|
LL | pub trait Tr2<T> where T: PrivTr {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -190,7 +190,7 @@ LL | pub trait Tr2<T> where T: PrivTr {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits_where::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:81:9
--> $DIR/private-in-public-warn.rs:83:9
|
LL | fn f<T>(arg: T) where T: PrivTr {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -199,7 +199,7 @@ LL | fn f<T>(arg: T) where T: PrivTr {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits_where::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:85:5
--> $DIR/private-in-public-warn.rs:87:5
|
LL | impl<T> Pub<T> where T: PrivTr {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -208,7 +208,7 @@ LL | impl<T> Pub<T> where T: PrivTr {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `traits_where::PrivTr` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:88:5
--> $DIR/private-in-public-warn.rs:90:5
|
LL | impl<T> PubTr for Pub<T> where T: PrivTr {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -217,7 +217,7 @@ LL | impl<T> PubTr for Pub<T> where T: PrivTr {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `generics::PrivTr<generics::Pub>` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:99:5
--> $DIR/private-in-public-warn.rs:101:5
|
LL | pub trait Tr1: PrivTr<Pub> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -226,7 +226,7 @@ LL | pub trait Tr1: PrivTr<Pub> {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private type `generics::Priv` in public interface (error E0446)
--> $DIR/private-in-public-warn.rs:102:5
--> $DIR/private-in-public-warn.rs:104:5
|
LL | pub trait Tr2: PubTr<Priv> {} //~ ERROR private type `generics::Priv` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -235,7 +235,7 @@ LL | pub trait Tr2: PubTr<Priv> {} //~ ERROR private type `generics::Priv` i
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private type `generics::Priv` in public interface (error E0446)
--> $DIR/private-in-public-warn.rs:104:5
--> $DIR/private-in-public-warn.rs:106:5
|
LL | pub trait Tr3: PubTr<[Priv; 1]> {} //~ ERROR private type `generics::Priv` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -244,7 +244,7 @@ LL | pub trait Tr3: PubTr<[Priv; 1]> {} //~ ERROR private type `generics::Pr
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private type `generics::Priv` in public interface (error E0446)
--> $DIR/private-in-public-warn.rs:106:5
--> $DIR/private-in-public-warn.rs:108:5
|
LL | pub trait Tr4: PubTr<Pub<Priv>> {} //~ ERROR private type `generics::Priv` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -253,7 +253,7 @@ LL | pub trait Tr4: PubTr<Pub<Priv>> {} //~ ERROR private type `generics::Pr
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error[E0446]: private type `impls::Priv` in public interface
--> $DIR/private-in-public-warn.rs:133:9
--> $DIR/private-in-public-warn.rs:135:9
|
LL | struct Priv;
| - `impls::Priv` declared as private
@ -262,7 +262,7 @@ LL | type Alias = Priv; //~ ERROR private type `impls::Priv` in public i
| ^^^^^^^^^^^^^^^^^^ can't leak private type
error: private type `aliases_pub::Priv` in public interface (error E0446)
--> $DIR/private-in-public-warn.rs:204:9
--> $DIR/private-in-public-warn.rs:206:9
|
LL | pub fn f(arg: Priv) {} //~ ERROR private type `aliases_pub::Priv` in public interface
| ^^^^^^^^^^^^^^^^^^^^^^
@ -271,7 +271,7 @@ LL | pub fn f(arg: Priv) {} //~ ERROR private type `aliases_pub::Priv` i
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error[E0446]: private type `aliases_pub::Priv` in public interface
--> $DIR/private-in-public-warn.rs:208:9
--> $DIR/private-in-public-warn.rs:210:9
|
LL | struct Priv;
| - `aliases_pub::Priv` declared as private
@ -280,7 +280,7 @@ LL | type Check = Priv; //~ ERROR private type `aliases_pub::Priv` in pu
| ^^^^^^^^^^^^^^^^^^ can't leak private type
error[E0446]: private type `aliases_pub::Priv` in public interface
--> $DIR/private-in-public-warn.rs:211:9
--> $DIR/private-in-public-warn.rs:213:9
|
LL | struct Priv;
| - `aliases_pub::Priv` declared as private
@ -289,7 +289,7 @@ LL | type Check = Priv; //~ ERROR private type `aliases_pub::Priv` in pu
| ^^^^^^^^^^^^^^^^^^ can't leak private type
error[E0446]: private type `aliases_pub::Priv` in public interface
--> $DIR/private-in-public-warn.rs:214:9
--> $DIR/private-in-public-warn.rs:216:9
|
LL | struct Priv;
| - `aliases_pub::Priv` declared as private
@ -298,7 +298,7 @@ LL | type Check = Priv; //~ ERROR private type `aliases_pub::Priv` in pu
| ^^^^^^^^^^^^^^^^^^ can't leak private type
error[E0446]: private type `aliases_pub::Priv` in public interface
--> $DIR/private-in-public-warn.rs:217:9
--> $DIR/private-in-public-warn.rs:219:9
|
LL | struct Priv;
| - `aliases_pub::Priv` declared as private
@ -307,7 +307,7 @@ LL | type Check = Priv; //~ ERROR private type `aliases_pub::Priv` in pu
| ^^^^^^^^^^^^^^^^^^ can't leak private type
error: private trait `aliases_priv::PrivTr1` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:247:5
--> $DIR/private-in-public-warn.rs:249:5
|
LL | pub trait Tr1: PrivUseAliasTr {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -316,7 +316,7 @@ LL | pub trait Tr1: PrivUseAliasTr {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private trait `aliases_priv::PrivTr1<aliases_priv::Priv2>` in public interface (error E0445)
--> $DIR/private-in-public-warn.rs:250:5
--> $DIR/private-in-public-warn.rs:252:5
|
LL | pub trait Tr2: PrivUseAliasTr<PrivAlias> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -325,7 +325,7 @@ LL | pub trait Tr2: PrivUseAliasTr<PrivAlias> {}
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
error: private type `aliases_priv::Priv2` in public interface (error E0446)
--> $DIR/private-in-public-warn.rs:250:5
--> $DIR/private-in-public-warn.rs:252:5
|
LL | pub trait Tr2: PrivUseAliasTr<PrivAlias> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -333,6 +333,23 @@ LL | pub trait Tr2: PrivUseAliasTr<PrivAlias> {}
= 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: bounds on generic parameters are not enforced in type aliases
--> $DIR/private-in-public-warn.rs:50:23
|
LL | pub type Alias<T: PrivTr> = T; //~ ERROR private trait `traits::PrivTr` in public interface
| ^^^^^^
|
= note: #[warn(type_alias_bounds)] on by default
= help: the bound will not be checked when the type alias is used, and should be removed
warning: where clauses are not enforced in type aliases
--> $DIR/private-in-public-warn.rs:75:29
|
LL | pub type Alias<T> where T: PrivTr = T;
| ^^^^^^^^^
|
= help: the clause will not be checked when the type alias is used, and should be removed
error: aborting due to 36 previous errors
For more information about this error, try `rustc --explain E0446`.

View file

@ -1,4 +1,3 @@
#![feature(associated_consts)]
#![feature(decl_macro)]
#![allow(private_in_public)]
@ -15,6 +14,7 @@ mod m {
pub struct PubTupleStruct(u8);
impl PubTupleStruct { fn method() {} }
#[derive(Clone, Copy)]
struct Priv;
pub type Alias = Priv;
pub struct Pub<T = Alias>(pub T);