Skip to content

Change E0451 to output proper indices for tuple-struct fields. #31721

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 20, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/librustc_privacy/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,8 @@ let f = Bar::Foo{ a: 0, b: 0 }; // error: field `b` of struct `Bar::Foo`
// is private
```

To fix this error, please ensure that all the fields of the struct, or
implement a function for easy instantiation. Examples:
To fix this error, please ensure that all the fields of the struct are public,
or implement a function for easy instantiation. Examples:

```
mod Bar {
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_privacy/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,7 @@ impl<'a, 'tcx> PrivacyVisitor<'a, 'tcx> {
NamedField(name) => format!("field `{}` of {} is private",
name, struct_desc),
UnnamedField(idx) => format!("field #{} of {} is private",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This use of # always irks me - is it an american thing? I thought using '#' for 'number' went out of fashion in about 1900. The error message would be just as good without the '#', IMO.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More so when describing the fields as 0-indexed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm inclined to agree about the error message itself -- it would probably look nicer just as "field X of Y is private". I figure that such a change would be better in another PR, but I could add it to this one.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another PR is fine

idx + 1, struct_desc),
idx, struct_desc),
};
span_err!(self.tcx.sess, span, E0451,
"{}", &msg[..]);
Expand Down
36 changes: 18 additions & 18 deletions src/test/compile-fail/privacy5.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,25 +63,25 @@ fn this_crate() {
let c = a::C(2, 3); //~ ERROR: cannot invoke tuple struct constructor
let d = a::D(4);

let a::A(()) = a; //~ ERROR: field #1 of struct `a::A` is private
let a::A(()) = a; //~ ERROR: field #0 of struct `a::A` is private
let a::A(_) = a;
match a { a::A(()) => {} } //~ ERROR: field #1 of struct `a::A` is private
match a { a::A(()) => {} } //~ ERROR: field #0 of struct `a::A` is private
match a { a::A(_) => {} }

let a::B(_) = b;
let a::B(_b) = b; //~ ERROR: field #1 of struct `a::B` is private
let a::B(_b) = b; //~ ERROR: field #0 of struct `a::B` is private
match b { a::B(_) => {} }
match b { a::B(_b) => {} } //~ ERROR: field #1 of struct `a::B` is private
match b { a::B(1) => {} a::B(_) => {} } //~ ERROR: field #1 of struct `a::B` is private
match b { a::B(_b) => {} } //~ ERROR: field #0 of struct `a::B` is private
match b { a::B(1) => {} a::B(_) => {} } //~ ERROR: field #0 of struct `a::B` is private

let a::C(_, _) = c;
let a::C(_a, _) = c;
let a::C(_, _b) = c; //~ ERROR: field #2 of struct `a::C` is private
let a::C(_a, _b) = c; //~ ERROR: field #2 of struct `a::C` is private
let a::C(_, _b) = c; //~ ERROR: field #1 of struct `a::C` is private
let a::C(_a, _b) = c; //~ ERROR: field #1 of struct `a::C` is private
match c { a::C(_, _) => {} }
match c { a::C(_a, _) => {} }
match c { a::C(_, _b) => {} } //~ ERROR: field #2 of struct `a::C` is private
match c { a::C(_a, _b) => {} } //~ ERROR: field #2 of struct `a::C` is private
match c { a::C(_, _b) => {} } //~ ERROR: field #1 of struct `a::C` is private
match c { a::C(_a, _b) => {} } //~ ERROR: field #1 of struct `a::C` is private

let a::D(_) = d;
let a::D(_d) = d;
Expand All @@ -101,30 +101,30 @@ fn xcrate() {
let c = other::C(2, 3); //~ ERROR: cannot invoke tuple struct constructor
let d = other::D(4);

let other::A(()) = a; //~ ERROR: field #1 of struct `other::A` is private
let other::A(()) = a; //~ ERROR: field #0 of struct `other::A` is private
let other::A(_) = a;
match a { other::A(()) => {} }
//~^ ERROR: field #1 of struct `other::A` is private
//~^ ERROR: field #0 of struct `other::A` is private
match a { other::A(_) => {} }

let other::B(_) = b;
let other::B(_b) = b; //~ ERROR: field #1 of struct `other::B` is private
let other::B(_b) = b; //~ ERROR: field #0 of struct `other::B` is private
match b { other::B(_) => {} }
match b { other::B(_b) => {} }
//~^ ERROR: field #1 of struct `other::B` is private
//~^ ERROR: field #0 of struct `other::B` is private
match b { other::B(1) => {} other::B(_) => {} }
//~^ ERROR: field #1 of struct `other::B` is private
//~^ ERROR: field #0 of struct `other::B` is private

let other::C(_, _) = c;
let other::C(_a, _) = c;
let other::C(_, _b) = c; //~ ERROR: field #2 of struct `other::C` is private
let other::C(_a, _b) = c; //~ ERROR: field #2 of struct `other::C` is private
let other::C(_, _b) = c; //~ ERROR: field #1 of struct `other::C` is private
let other::C(_a, _b) = c; //~ ERROR: field #1 of struct `other::C` is private
match c { other::C(_, _) => {} }
match c { other::C(_a, _) => {} }
match c { other::C(_, _b) => {} }
//~^ ERROR: field #2 of struct `other::C` is private
//~^ ERROR: field #1 of struct `other::C` is private
match c { other::C(_a, _b) => {} }
//~^ ERROR: field #2 of struct `other::C` is private
//~^ ERROR: field #1 of struct `other::C` is private

let other::D(_) = d;
let other::D(_d) = d;
Expand Down