-
Notifications
You must be signed in to change notification settings - Fork 13k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Always report private-in-public in associated types as hard errors
according to RFC 2145. Fix a silly label message.
- Loading branch information
1 parent
020961d
commit c6209a3
Showing
7 changed files
with
108 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// Copyright 2017 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. | ||
|
||
// Private types and traits are not allowed in interfaces of associated types. | ||
// This test also ensures that the checks are performed even inside private modules. | ||
|
||
#![feature(associated_type_defaults)] | ||
|
||
mod m { | ||
struct Priv; | ||
trait PrivTr {} | ||
impl PrivTr for Priv {} | ||
pub trait PubTrAux1<T> {} | ||
pub trait PubTrAux2 { type A; } | ||
|
||
// "Private-in-public in associated types is hard error" in RFC 2145 | ||
// applies only to the aliased types, not bounds. | ||
pub trait PubTr { | ||
//~^ WARN private trait `m::PrivTr` in public interface | ||
//~| WARN this was previously accepted | ||
//~| WARN private type `m::Priv` in public interface | ||
//~| WARN this was previously accepted | ||
type Alias1: PrivTr; | ||
type Alias2: PubTrAux1<Priv> = u8; | ||
type Alias3: PubTrAux2<A = Priv> = u8; | ||
|
||
type Alias4 = Priv; | ||
//~^ ERROR private type `m::Priv` in public interface | ||
} | ||
impl PubTr for u8 { | ||
type Alias1 = Priv; | ||
//~^ ERROR private type `m::Priv` in public interface | ||
} | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// Copyright 2017 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 aliases_pub { | ||
struct Priv; | ||
mod m { | ||
pub struct Pub3; | ||
} | ||
|
||
trait PrivTr { | ||
type AssocAlias; | ||
} | ||
impl PrivTr for Priv { | ||
type AssocAlias = m::Pub3; | ||
} | ||
|
||
impl (<Priv as PrivTr>::AssocAlias) { //~ ERROR no base type found for inherent implementation | ||
pub fn f(arg: Priv) {} // private type `aliases_pub::Priv` in public interface | ||
} | ||
} | ||
|
||
mod aliases_priv { | ||
struct Priv; | ||
struct Priv3; | ||
|
||
trait PrivTr { | ||
type AssocAlias; | ||
} | ||
impl PrivTr for Priv { | ||
type AssocAlias = Priv3; | ||
} | ||
|
||
impl (<Priv as PrivTr>::AssocAlias) { //~ ERROR no base type found for inherent implementation | ||
pub fn f(arg: Priv) {} // OK | ||
} | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters