Stabilize pub(restricted)
This commit is contained in:
parent
0aeb9c1297
commit
28626ca5b1
|
@ -65,7 +65,6 @@
|
||||||
- [plugin_registrar](plugin-registrar.md)
|
- [plugin_registrar](plugin-registrar.md)
|
||||||
- [prelude_import](prelude-import.md)
|
- [prelude_import](prelude-import.md)
|
||||||
- [proc_macro](proc-macro.md)
|
- [proc_macro](proc-macro.md)
|
||||||
- [pub_restricted](pub-restricted.md)
|
|
||||||
- [quote](quote.md)
|
- [quote](quote.md)
|
||||||
- [relaxed_adts](relaxed-adts.md)
|
- [relaxed_adts](relaxed-adts.md)
|
||||||
- [repr_simd](repr-simd.md)
|
- [repr_simd](repr-simd.md)
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
# `pub_restricted`
|
|
||||||
|
|
||||||
The tracking issue for this feature is: [#32409]
|
|
||||||
|
|
||||||
[#32409]: https://github.com/rust-lang/rust/issues/32409
|
|
||||||
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#![feature(libc)]
|
#![feature(libc)]
|
||||||
#![feature(loop_break_value)]
|
#![feature(loop_break_value)]
|
||||||
#![feature(nonzero)]
|
#![feature(nonzero)]
|
||||||
#![feature(pub_restricted)]
|
#![cfg_attr(stage0, feature(pub_restricted))]
|
||||||
#![feature(quote)]
|
#![feature(quote)]
|
||||||
#![feature(rustc_diagnostic_macros)]
|
#![feature(rustc_diagnostic_macros)]
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![feature(conservative_impl_trait)]
|
#![feature(conservative_impl_trait)]
|
||||||
#![cfg_attr(stage0,feature(field_init_shorthand))]
|
#![cfg_attr(stage0,feature(field_init_shorthand))]
|
||||||
#![feature(pub_restricted)]
|
#![cfg_attr(stage0, feature(pub_restricted))]
|
||||||
|
|
||||||
extern crate graphviz;
|
extern crate graphviz;
|
||||||
#[macro_use] extern crate rustc;
|
#[macro_use] extern crate rustc;
|
||||||
|
|
|
@ -951,7 +951,7 @@ impl<'a, 'tcx: 'a> TypeVisitor<'tcx> for SearchInterfaceForPrivateItemsVisitor<'
|
||||||
self.min_visibility = vis;
|
self.min_visibility = vis;
|
||||||
}
|
}
|
||||||
if !vis.is_at_least(self.required_visibility, self.tcx) {
|
if !vis.is_at_least(self.required_visibility, self.tcx) {
|
||||||
if self.tcx.sess.features.borrow().pub_restricted || self.has_old_errors {
|
if self.has_old_errors {
|
||||||
let mut err = struct_span_err!(self.tcx.sess, self.span, E0446,
|
let mut err = struct_span_err!(self.tcx.sess, self.span, E0446,
|
||||||
"private type `{}` in public interface", ty);
|
"private type `{}` in public interface", ty);
|
||||||
err.span_label(self.span, &format!("can't leak private type"));
|
err.span_label(self.span, &format!("can't leak private type"));
|
||||||
|
@ -986,7 +986,7 @@ impl<'a, 'tcx: 'a> TypeVisitor<'tcx> for SearchInterfaceForPrivateItemsVisitor<'
|
||||||
self.min_visibility = vis;
|
self.min_visibility = vis;
|
||||||
}
|
}
|
||||||
if !vis.is_at_least(self.required_visibility, self.tcx) {
|
if !vis.is_at_least(self.required_visibility, self.tcx) {
|
||||||
if self.tcx.sess.features.borrow().pub_restricted || self.has_old_errors {
|
if self.has_old_errors {
|
||||||
struct_span_err!(self.tcx.sess, self.span, E0445,
|
struct_span_err!(self.tcx.sess, self.span, E0445,
|
||||||
"private trait `{}` in public interface", trait_ref)
|
"private trait `{}` in public interface", trait_ref)
|
||||||
.span_label(self.span, &format!(
|
.span_label(self.span, &format!(
|
||||||
|
|
|
@ -283,7 +283,6 @@
|
||||||
#![feature(placement_in_syntax)]
|
#![feature(placement_in_syntax)]
|
||||||
#![feature(placement_new_protocol)]
|
#![feature(placement_new_protocol)]
|
||||||
#![feature(prelude_import)]
|
#![feature(prelude_import)]
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![feature(rand)]
|
#![feature(rand)]
|
||||||
#![feature(raw)]
|
#![feature(raw)]
|
||||||
#![feature(repr_simd)]
|
#![feature(repr_simd)]
|
||||||
|
@ -309,6 +308,7 @@
|
||||||
#![feature(vec_push_all)]
|
#![feature(vec_push_all)]
|
||||||
#![feature(zero_one)]
|
#![feature(zero_one)]
|
||||||
#![cfg_attr(test, feature(update_panic_count))]
|
#![cfg_attr(test, feature(update_panic_count))]
|
||||||
|
#![cfg_attr(stage0, feature(pub_restricted))]
|
||||||
|
|
||||||
// Explicitly import the prelude. The compiler uses this same unstable attribute
|
// Explicitly import the prelude. The compiler uses this same unstable attribute
|
||||||
// to import the prelude implicitly when building crates that depend on std.
|
// to import the prelude implicitly when building crates that depend on std.
|
||||||
|
|
|
@ -260,9 +260,6 @@ declare_features! (
|
||||||
// impl specialization (RFC 1210)
|
// impl specialization (RFC 1210)
|
||||||
(active, specialization, "1.7.0", Some(31844)),
|
(active, specialization, "1.7.0", Some(31844)),
|
||||||
|
|
||||||
// pub(restricted) visibilities (RFC 1422)
|
|
||||||
(active, pub_restricted, "1.9.0", Some(32409)),
|
|
||||||
|
|
||||||
// Allow Drop types in statics/const functions (RFC 1440)
|
// Allow Drop types in statics/const functions (RFC 1440)
|
||||||
(active, drop_types_in_const, "1.9.0", Some(33156)),
|
(active, drop_types_in_const, "1.9.0", Some(33156)),
|
||||||
|
|
||||||
|
@ -406,6 +403,9 @@ declare_features! (
|
||||||
(accepted, field_init_shorthand, "1.17.0", Some(37340)),
|
(accepted, field_init_shorthand, "1.17.0", Some(37340)),
|
||||||
// Allows the definition recursive static items.
|
// Allows the definition recursive static items.
|
||||||
(accepted, static_recursion, "1.17.0", Some(29719)),
|
(accepted, static_recursion, "1.17.0", Some(29719)),
|
||||||
|
// pub(restricted) visibilities (RFC 1422)
|
||||||
|
(accepted, pub_restricted, "1.17.0", Some(32409)),
|
||||||
|
|
||||||
);
|
);
|
||||||
// If you change this, please modify src/doc/unstable-book as well. You must
|
// If you change this, please modify src/doc/unstable-book as well. You must
|
||||||
// move that documentation into the relevant place in the other docs, and
|
// move that documentation into the relevant place in the other docs, and
|
||||||
|
@ -1410,17 +1410,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||||
visit::walk_impl_item(self, ii);
|
visit::walk_impl_item(self, ii);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_vis(&mut self, vis: &'a ast::Visibility) {
|
|
||||||
let span = match *vis {
|
|
||||||
ast::Visibility::Crate(span) => span,
|
|
||||||
ast::Visibility::Restricted { ref path, .. } => path.span,
|
|
||||||
_ => return,
|
|
||||||
};
|
|
||||||
gate_feature_post!(&self, pub_restricted, span, "`pub(restricted)` syntax is experimental");
|
|
||||||
|
|
||||||
visit::walk_vis(self, vis)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_generics(&mut self, g: &'a ast::Generics) {
|
fn visit_generics(&mut self, g: &'a ast::Generics) {
|
||||||
for t in &g.ty_params {
|
for t in &g.ty_params {
|
||||||
if !t.attrs.is_empty() {
|
if !t.attrs.is_empty() {
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
// non-pub fields, marked with SILLY below)
|
// non-pub fields, marked with SILLY below)
|
||||||
|
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
#![stable(feature = "unit_test", since = "0.0.0")]
|
#![stable(feature = "unit_test", since = "0.0.0")]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![deny(unused)]
|
#![deny(unused)]
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
pub(crate) struct Crate;
|
pub(crate) struct Crate;
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Universe {
|
pub struct Universe {
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
// Copyright 2016 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.
|
|
||||||
|
|
||||||
// gate-test-pub_restricted
|
|
||||||
|
|
||||||
pub(crate) //~ ERROR experimental
|
|
||||||
mod foo {}
|
|
||||||
|
|
||||||
pub(self) //~ ERROR experimental
|
|
||||||
mod bar {}
|
|
||||||
|
|
||||||
struct S {
|
|
||||||
pub(self) x: i32, //~ ERROR experimental
|
|
||||||
}
|
|
||||||
impl S {
|
|
||||||
pub(self) fn f() {} //~ ERROR experimental
|
|
||||||
}
|
|
||||||
extern {
|
|
||||||
pub(self) fn f(); //~ ERROR experimental
|
|
||||||
}
|
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(rustc_attrs, pub_restricted)]
|
#![feature(rustc_attrs)]
|
||||||
#![allow(warnings)]
|
#![allow(warnings)]
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
#![deny(warnings)]
|
||||||
|
#![allow(unused)]
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
struct Priv;
|
struct Priv;
|
||||||
|
@ -16,6 +17,7 @@ mod foo {
|
||||||
use foo::Priv;
|
use foo::Priv;
|
||||||
pub(super) fn f(_: Priv) {}
|
pub(super) fn f(_: Priv) {}
|
||||||
pub(crate) fn g(_: Priv) {} //~ ERROR E0446
|
pub(crate) fn g(_: Priv) {} //~ ERROR E0446
|
||||||
|
//~^ this was previously accepted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![deny(private_in_public)]
|
#![deny(private_in_public)]
|
||||||
#![allow(warnings)]
|
#![allow(warnings)]
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// aux-build:pub_restricted.rs
|
// aux-build:pub_restricted.rs
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![deny(private_in_public)]
|
#![deny(private_in_public)]
|
||||||
#![allow(warnings)]
|
#![allow(warnings)]
|
||||||
extern crate pub_restricted;
|
extern crate pub_restricted;
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
type T = ();
|
type T = ();
|
||||||
struct S1(pub(foo) (), pub(T), pub(crate) (), pub(((), T)));
|
struct S1(pub(foo) (), pub(T), pub(crate) (), pub(((), T)));
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
macro_rules! define_struct {
|
macro_rules! define_struct {
|
||||||
($t:ty) => {
|
($t:ty) => {
|
||||||
struct S1(pub $t);
|
struct S1(pub $t);
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
macro_rules! define_struct {
|
macro_rules! define_struct {
|
||||||
($t:ty) => {
|
($t:ty) => {
|
||||||
struct S1(pub($t));
|
struct S1(pub($t));
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
macro_rules! m {
|
macro_rules! m {
|
||||||
($p: path) => (pub(in $p) struct Z;)
|
($p: path) => (pub(in $p) struct Z;)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![feature(untagged_unions)]
|
#![feature(untagged_unions)]
|
||||||
|
|
||||||
mod m {
|
mod m {
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
#![feature(untagged_unions)]
|
#![feature(untagged_unions)]
|
||||||
|
|
||||||
mod m {
|
mod m {
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
enum E {}
|
enum E {}
|
||||||
trait Tr {}
|
trait Tr {}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
pub mod m {
|
pub mod m {
|
||||||
pub struct S(u8);
|
pub struct S(u8);
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// aux-build:privacy-struct-ctor.rs
|
// aux-build:privacy-struct-ctor.rs
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
extern crate privacy_struct_ctor as xcrate;
|
extern crate privacy_struct_ctor as xcrate;
|
||||||
|
|
||||||
mod m {
|
mod m {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
error[E0423]: expected value, found struct `Z`
|
error[E0423]: expected value, found struct `Z`
|
||||||
--> $DIR/privacy-struct-ctor.rs:28:9
|
--> $DIR/privacy-struct-ctor.rs:26:9
|
||||||
|
|
|
|
||||||
28 | Z;
|
26 | Z;
|
||||||
| ^
|
| ^
|
||||||
| |
|
| |
|
||||||
| did you mean `Z { /* fields */ }`?
|
| did you mean `Z { /* fields */ }`?
|
||||||
|
@ -11,9 +11,9 @@ error[E0423]: expected value, found struct `Z`
|
||||||
`use m::n::Z;`
|
`use m::n::Z;`
|
||||||
|
|
||||||
error[E0423]: expected value, found struct `S`
|
error[E0423]: expected value, found struct `S`
|
||||||
--> $DIR/privacy-struct-ctor.rs:38:5
|
--> $DIR/privacy-struct-ctor.rs:36:5
|
||||||
|
|
|
|
||||||
38 | S;
|
36 | S;
|
||||||
| ^
|
| ^
|
||||||
| |
|
| |
|
||||||
| did you mean `S { /* fields */ }`?
|
| did you mean `S { /* fields */ }`?
|
||||||
|
@ -23,9 +23,9 @@ error[E0423]: expected value, found struct `S`
|
||||||
`use m::S;`
|
`use m::S;`
|
||||||
|
|
||||||
error[E0423]: expected value, found struct `xcrate::S`
|
error[E0423]: expected value, found struct `xcrate::S`
|
||||||
--> $DIR/privacy-struct-ctor.rs:44:5
|
--> $DIR/privacy-struct-ctor.rs:42:5
|
||||||
|
|
|
|
||||||
44 | xcrate::S;
|
42 | xcrate::S;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
| |
|
| |
|
||||||
| did you mean `xcrate::S { /* fields */ }`?
|
| did you mean `xcrate::S { /* fields */ }`?
|
||||||
|
@ -35,33 +35,33 @@ error[E0423]: expected value, found struct `xcrate::S`
|
||||||
`use m::S;`
|
`use m::S;`
|
||||||
|
|
||||||
error: tuple struct `Z` is private
|
error: tuple struct `Z` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:27:9
|
--> $DIR/privacy-struct-ctor.rs:25:9
|
||||||
|
|
|
|
||||||
27 | n::Z; //~ ERROR tuple struct `Z` is private
|
25 | n::Z; //~ ERROR tuple struct `Z` is private
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: tuple struct `S` is private
|
error: tuple struct `S` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:37:5
|
--> $DIR/privacy-struct-ctor.rs:35:5
|
||||||
|
|
|
|
||||||
37 | m::S; //~ ERROR tuple struct `S` is private
|
35 | m::S; //~ ERROR tuple struct `S` is private
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: tuple struct `Z` is private
|
error: tuple struct `Z` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:41:5
|
--> $DIR/privacy-struct-ctor.rs:39:5
|
||||||
|
|
|
|
||||||
41 | m::n::Z; //~ ERROR tuple struct `Z` is private
|
39 | m::n::Z; //~ ERROR tuple struct `Z` is private
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: tuple struct `S` is private
|
error: tuple struct `S` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:43:5
|
--> $DIR/privacy-struct-ctor.rs:41:5
|
||||||
|
|
|
|
||||||
43 | xcrate::m::S; //~ ERROR tuple struct `S` is private
|
41 | xcrate::m::S; //~ ERROR tuple struct `S` is private
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
||||||
error: tuple struct `Z` is private
|
error: tuple struct `Z` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:47:5
|
--> $DIR/privacy-struct-ctor.rs:45:5
|
||||||
|
|
|
|
||||||
47 | xcrate::m::n::Z; //~ ERROR tuple struct `Z` is private
|
45 | xcrate::m::n::Z; //~ ERROR tuple struct `Z` is private
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: aborting due to 8 previous errors
|
error: aborting due to 8 previous errors
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
// Regression test for issue #26083 and #35435
|
// Regression test for issue #26083 and #35435
|
||||||
// Test that span for public struct fields start at `pub`
|
// Test that span for public struct fields start at `pub`
|
||||||
|
|
||||||
#![feature(pub_restricted)]
|
|
||||||
|
|
||||||
struct Foo {
|
struct Foo {
|
||||||
bar: u8,
|
bar: u8,
|
||||||
pub bar: u8,
|
pub bar: u8,
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
error[E0124]: field `bar` is already declared
|
error[E0124]: field `bar` is already declared
|
||||||
--> $DIR/pub-struct-field.rs:18:5
|
--> $DIR/pub-struct-field.rs:16:5
|
||||||
|
|
|
|
||||||
17 | bar: u8,
|
15 | bar: u8,
|
||||||
| ------- `bar` first declared here
|
| ------- `bar` first declared here
|
||||||
18 | pub bar: u8,
|
16 | pub bar: u8,
|
||||||
| ^^^^^^^^^^^ field already declared
|
| ^^^^^^^^^^^ field already declared
|
||||||
|
|
||||||
error[E0124]: field `bar` is already declared
|
error[E0124]: field `bar` is already declared
|
||||||
--> $DIR/pub-struct-field.rs:19:5
|
--> $DIR/pub-struct-field.rs:17:5
|
||||||
|
|
|
|
||||||
17 | bar: u8,
|
15 | bar: u8,
|
||||||
| ------- `bar` first declared here
|
| ------- `bar` first declared here
|
||||||
18 | pub bar: u8,
|
16 | pub bar: u8,
|
||||||
19 | pub(crate) bar: u8,
|
17 | pub(crate) bar: u8,
|
||||||
| ^^^^^^^^^^^^^^^^^^ field already declared
|
| ^^^^^^^^^^^^^^^^^^ field already declared
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
Reference in New Issue