If a symbol name can only be imported from one place for a type, and as long as it was not glob-imported anywhere in the current crate, we can trim its printed path and print only the name. This has wide implications on error messages with types, for example, shortening `std::vec::Vec` to just `Vec`, as long as there is no other `Vec` importable anywhere. This adds a new '-Z trim-diagnostic-paths=false' option to control this feature. On the good path, with no diagnosis printed, we should try to avoid issuing this query, so we need to prevent trimmed_def_paths query on several cases. This change also relies on a previous commit that differentiates between `Debug` and `Display` on various rustc types, where the latter is trimmed and presented to the user and the former is not.
29 lines
857 B
Rust
29 lines
857 B
Rust
// compile-flags: -Zsave-analysis
|
|
// Also regression test for #69416
|
|
|
|
mod my_mod {
|
|
pub struct MyStruct {
|
|
priv_field: isize
|
|
}
|
|
pub fn MyStruct () -> MyStruct {
|
|
MyStruct {priv_field: 4}
|
|
}
|
|
impl MyStruct {
|
|
fn happyfun(&self) {}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let my_struct = my_mod::MyStruct();
|
|
let _woohoo = (&my_struct).priv_field;
|
|
//~^ ERROR field `priv_field` of struct `MyStruct` is private
|
|
|
|
let _woohoo = (Box::new(my_struct)).priv_field;
|
|
//~^ ERROR field `priv_field` of struct `MyStruct` is private
|
|
|
|
(&my_struct).happyfun(); //~ ERROR associated function `happyfun` is private
|
|
|
|
(Box::new(my_struct)).happyfun(); //~ ERROR associated function `happyfun` is private
|
|
let nope = my_struct.priv_field;
|
|
//~^ ERROR field `priv_field` of struct `MyStruct` is private
|
|
}
|