diff --git a/src/libpanic_abort/lib.rs b/src/libpanic_abort/lib.rs index d8dd2e0a11337..8832a16d4ca4e 100644 --- a/src/libpanic_abort/lib.rs +++ b/src/libpanic_abort/lib.rs @@ -12,7 +12,7 @@ #![panic_runtime] #![allow(unused_features)] -#![feature(cfg_target_vendor)] +#![cfg_attr(stage0, feature(cfg_target_vendor))] #![feature(core_intrinsics)] #![feature(libc)] #![feature(nll)] diff --git a/src/librustc/hir/def.rs b/src/librustc/hir/def.rs index 2382a2ea50bba..8a74c51d3f723 100644 --- a/src/librustc/hir/def.rs +++ b/src/librustc/hir/def.rs @@ -284,7 +284,7 @@ impl Def { } } - /// A human readable kind name + /// A human readable name for the def kind ("function", "module", etc.). pub fn kind_name(&self) -> &'static str { match *self { Def::Fn(..) => "function", @@ -324,6 +324,7 @@ impl Def { } } + /// An English article for the def. pub fn article(&self) -> &'static str { match *self { Def::AssociatedTy(..) | Def::AssociatedConst(..) | Def::AssociatedExistential(..) | diff --git a/src/librustc/hir/map/collector.rs b/src/librustc/hir/map/collector.rs index 925a5fb85b81b..ae9bb37842990 100644 --- a/src/librustc/hir/map/collector.rs +++ b/src/librustc/hir/map/collector.rs @@ -6,6 +6,7 @@ use rustc_data_structures::svh::Svh; use ich::Fingerprint; use middle::cstore::CrateStore; use session::CrateDisambiguator; +use session::Session; use std::iter::repeat; use syntax::ast::{NodeId, CRATE_NODE_ID}; use syntax::source_map::SourceMap; @@ -92,11 +93,11 @@ where } impl<'a, 'hir> NodeCollector<'a, 'hir> { - pub(super) fn root(krate: &'hir Crate, + pub(super) fn root(sess: &'a Session, + krate: &'hir Crate, dep_graph: &'a DepGraph, definitions: &'a definitions::Definitions, - mut hcx: StableHashingContext<'a>, - source_map: &'a SourceMap) + mut hcx: StableHashingContext<'a>) -> NodeCollector<'a, 'hir> { let root_mod_def_path_hash = definitions.def_path_hash(CRATE_DEF_INDEX); @@ -141,8 +142,8 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> { let mut collector = NodeCollector { krate, - source_map, - map: vec![], + source_map: sess.source_map(), + map: repeat(None).take(sess.current_node_id_count()).collect(), parent_node: CRATE_NODE_ID, current_signature_dep_index: root_mod_sig_dep_index, current_full_dep_index: root_mod_full_dep_index, @@ -219,10 +220,6 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> { fn insert_entry(&mut self, id: NodeId, entry: Entry<'hir>) { debug!("hir_map: {:?} => {:?}", id, entry); - let len = self.map.len(); - if id.as_usize() >= len { - self.map.extend(repeat(None).take(id.as_usize() - len + 1)); - } self.map[id.as_usize()] = Some(entry); } diff --git a/src/librustc/hir/map/hir_id_validator.rs b/src/librustc/hir/map/hir_id_validator.rs index a8f5f93ee6cb1..91c8c29144406 100644 --- a/src/librustc/hir/map/hir_id_validator.rs +++ b/src/librustc/hir/map/hir_id_validator.rs @@ -3,19 +3,24 @@ use hir::{self, intravisit, HirId, ItemLocalId}; use syntax::ast::NodeId; use hir::itemlikevisit::ItemLikeVisitor; use rustc_data_structures::fx::FxHashMap; +use rustc_data_structures::sync::{Lock, ParallelIterator, par_iter}; pub fn check_crate<'hir>(hir_map: &hir::map::Map<'hir>) { - let mut outer_visitor = OuterVisitor { - hir_map, - errors: vec![], - }; - hir_map.dep_graph.assert_ignored(); - hir_map.krate().visit_all_item_likes(&mut outer_visitor); - if !outer_visitor.errors.is_empty() { - let message = outer_visitor - .errors + let errors = Lock::new(Vec::new()); + + par_iter(&hir_map.krate().modules).for_each(|(module_id, _)| { + hir_map.visit_item_likes_in_module(hir_map.local_def_id(*module_id), &mut OuterVisitor { + hir_map, + errors: &errors, + }); + }); + + let errors = errors.into_inner(); + + if !errors.is_empty() { + let message = errors .iter() .fold(String::new(), |s1, s2| s1 + "\n" + s2); bug!("{}", message); @@ -26,12 +31,12 @@ struct HirIdValidator<'a, 'hir: 'a> { hir_map: &'a hir::map::Map<'hir>, owner_def_index: Option, hir_ids_seen: FxHashMap, - errors: Vec, + errors: &'a Lock>, } struct OuterVisitor<'a, 'hir: 'a> { hir_map: &'a hir::map::Map<'hir>, - errors: Vec, + errors: &'a Lock>, } impl<'a, 'hir: 'a> OuterVisitor<'a, 'hir> { @@ -42,7 +47,7 @@ impl<'a, 'hir: 'a> OuterVisitor<'a, 'hir> { hir_map, owner_def_index: None, hir_ids_seen: Default::default(), - errors: Vec::new(), + errors: self.errors, } } } @@ -51,23 +56,25 @@ impl<'a, 'hir: 'a> ItemLikeVisitor<'hir> for OuterVisitor<'a, 'hir> { fn visit_item(&mut self, i: &'hir hir::Item) { let mut inner_visitor = self.new_inner_visitor(self.hir_map); inner_visitor.check(i.id, |this| intravisit::walk_item(this, i)); - self.errors.extend(inner_visitor.errors.drain(..)); } fn visit_trait_item(&mut self, i: &'hir hir::TraitItem) { let mut inner_visitor = self.new_inner_visitor(self.hir_map); inner_visitor.check(i.id, |this| intravisit::walk_trait_item(this, i)); - self.errors.extend(inner_visitor.errors.drain(..)); } fn visit_impl_item(&mut self, i: &'hir hir::ImplItem) { let mut inner_visitor = self.new_inner_visitor(self.hir_map); inner_visitor.check(i.id, |this| intravisit::walk_impl_item(this, i)); - self.errors.extend(inner_visitor.errors.drain(..)); } } impl<'a, 'hir: 'a> HirIdValidator<'a, 'hir> { + #[cold] + #[inline(never)] + fn error(&self, f: impl FnOnce() -> String) { + self.errors.lock().push(f()); + } fn check)>(&mut self, node_id: NodeId, @@ -119,7 +126,7 @@ impl<'a, 'hir: 'a> HirIdValidator<'a, 'hir> { local_id, self.hir_map.node_to_string(node_id))); } - self.errors.push(format!( + self.error(|| format!( "ItemLocalIds not assigned densely in {}. \ Max ItemLocalId = {}, missing IDs = {:?}; seens IDs = {:?}", self.hir_map.def_path(DefId::local(owner_def_index)).to_string_no_crate(), @@ -145,14 +152,14 @@ impl<'a, 'hir: 'a> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> { let stable_id = self.hir_map.definitions().node_to_hir_id[node_id]; if stable_id == hir::DUMMY_HIR_ID { - self.errors.push(format!("HirIdValidator: No HirId assigned for NodeId {}: {:?}", + self.error(|| format!("HirIdValidator: No HirId assigned for NodeId {}: {:?}", node_id, self.hir_map.node_to_string(node_id))); return; } if owner != stable_id.owner { - self.errors.push(format!( + self.error(|| format!( "HirIdValidator: The recorded owner of {} is {} instead of {}", self.hir_map.node_to_string(node_id), self.hir_map.def_path(DefId::local(stable_id.owner)).to_string_no_crate(), @@ -161,7 +168,7 @@ impl<'a, 'hir: 'a> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> { if let Some(prev) = self.hir_ids_seen.insert(stable_id.local_id, node_id) { if prev != node_id { - self.errors.push(format!( + self.error(|| format!( "HirIdValidator: Same HirId {}/{} assigned for nodes {} and {}", self.hir_map.def_path(DefId::local(stable_id.owner)).to_string_no_crate(), stable_id.local_id.as_usize(), diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 513e18b137371..869baef1f5afc 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -7,10 +7,11 @@ use dep_graph::{DepGraph, DepNode, DepKind, DepNodeIndex}; use hir::def_id::{CRATE_DEF_INDEX, DefId, LocalDefId, DefIndexAddressSpace}; -use middle::cstore::CrateStore; +use middle::cstore::CrateStoreDyn; use rustc_target::spec::abi::Abi; use rustc_data_structures::svh::Svh; +use rustc_data_structures::sync::join; use syntax::ast::{self, Name, NodeId, CRATE_NODE_ID}; use syntax::source_map::Spanned; use syntax::ext::base::MacroKind; @@ -20,6 +21,7 @@ use hir::*; use hir::itemlikevisit::ItemLikeVisitor; use hir::print::Nested; use util::nodemap::FxHashMap; +use util::common::time; use std::io; use std::result::Result::Err; @@ -1045,26 +1047,32 @@ impl Named for TraitItem { fn name(&self) -> Name { self.ident.name } } impl Named for ImplItem { fn name(&self) -> Name { self.ident.name } } pub fn map_crate<'hir>(sess: &::session::Session, - cstore: &dyn CrateStore, - forest: &'hir mut Forest, + cstore: &CrateStoreDyn, + forest: &'hir Forest, definitions: &'hir Definitions) -> Map<'hir> { - let (map, crate_hash) = { + let ((map, crate_hash), hir_to_node_id) = join(|| { let hcx = ::ich::StableHashingContext::new(sess, &forest.krate, definitions, cstore); - let mut collector = NodeCollector::root(&forest.krate, + let mut collector = NodeCollector::root(sess, + &forest.krate, &forest.dep_graph, &definitions, - hcx, - sess.source_map()); + hcx); intravisit::walk_crate(&mut collector, &forest.krate); let crate_disambiguator = sess.local_crate_disambiguator(); let cmdline_args = sess.opts.dep_tracking_hash(); - collector.finalize_and_compute_crate_hash(crate_disambiguator, - cstore, - cmdline_args) - }; + collector.finalize_and_compute_crate_hash( + crate_disambiguator, + cstore, + cmdline_args + ) + }, || { + // Build the reverse mapping of `node_to_hir_id`. + definitions.node_to_hir_id.iter_enumerated() + .map(|(node_id, &hir_id)| (hir_id, node_id)).collect() + }); if log_enabled!(::log::Level::Debug) { // This only makes sense for ordered stores; note the @@ -1078,10 +1086,6 @@ pub fn map_crate<'hir>(sess: &::session::Session, entries, vector_length, (entries as f64 / vector_length as f64) * 100.); } - // Build the reverse mapping of `node_to_hir_id`. - let hir_to_node_id = definitions.node_to_hir_id.iter_enumerated() - .map(|(node_id, &hir_id)| (hir_id, node_id)).collect(); - let map = Map { forest, dep_graph: forest.dep_graph.clone(), @@ -1091,7 +1095,9 @@ pub fn map_crate<'hir>(sess: &::session::Session, definitions, }; - hir_id_validator::check_crate(&map); + time(sess, "validate hir map", || { + hir_id_validator::check_crate(&map); + }); map } diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index ba09480f93f3d..fa0dfc4b38c8c 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -407,6 +407,9 @@ impl Session { pub fn next_node_id(&self) -> NodeId { self.reserve_node_ids(1) } + pub(crate) fn current_node_id_count(&self) -> usize { + self.next_node_id.get().as_u32() as usize + } pub fn diagnostic<'a>(&'a self) -> &'a errors::Handler { &self.parse_sess.span_diagnostic } diff --git a/src/librustc_codegen_utils/codegen_backend.rs b/src/librustc_codegen_utils/codegen_backend.rs index 09adaf848be1b..8981c542961e2 100644 --- a/src/librustc_codegen_utils/codegen_backend.rs +++ b/src/librustc_codegen_utils/codegen_backend.rs @@ -31,7 +31,6 @@ use rustc::middle::cstore::EncodedMetadata; use rustc::middle::cstore::MetadataLoader; use rustc::dep_graph::DepGraph; use rustc_target::spec::Target; -use rustc_mir::monomorphize::collector; use link::out_filename; pub use rustc_data_structures::sync::MetadataRef; @@ -136,25 +135,15 @@ impl CodegenBackend for MetadataOnlyCodegenBackend { ::symbol_names_test::report_symbol_names(tcx); ::rustc_incremental::assert_dep_graph(tcx); ::rustc_incremental::assert_module_sources::assert_module_sources(tcx); - ::rustc_mir::monomorphize::assert_symbols_are_distinct(tcx, - collector::collect_crate_mono_items( - tcx, - collector::MonoItemCollectionMode::Eager - ).0.iter() - ); // FIXME: Fix this // ::rustc::middle::dependency_format::calculate(tcx); let _ = tcx.link_args(LOCAL_CRATE); let _ = tcx.native_libraries(LOCAL_CRATE); - for mono_item in - collector::collect_crate_mono_items( - tcx, - collector::MonoItemCollectionMode::Eager - ).0 { + let (_, cgus) = tcx.collect_and_partition_mono_items(LOCAL_CRATE); + for (mono_item, _) in cgus.iter().flat_map(|cgu| cgu.items().iter()) { if let MonoItem::Fn(inst) = mono_item { let def_id = inst.def_id(); - if def_id.is_local() { - let _ = inst.def.is_inline(tcx); + if def_id.is_local() { let _ = tcx.codegen_fn_attrs(def_id); } } diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 5015ed027cc3c..4890369e13f20 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -48,7 +48,7 @@ mod diagnostics; /// Default type visitor (`TypeVisitor`) does most of the job, but it has some shortcomings. /// First, it doesn't have overridable `fn visit_trait_ref`, so we have to catch trait def-ids /// manually. Second, it doesn't visit some type components like signatures of fn types, or traits -/// in `impl Trait`, see individual commits in `DefIdVisitorSkeleton::visit_ty`. +/// in `impl Trait`, see individual comments in `DefIdVisitorSkeleton::visit_ty`. trait DefIdVisitor<'a, 'tcx: 'a> { fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx>; fn shallow(&self) -> bool { false } @@ -1579,10 +1579,15 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> // No subitems. hir::ItemKind::GlobalAsm(..) => {} // Subitems of these items have inherited publicity. - hir::ItemKind::Const(..) | hir::ItemKind::Static(..) | hir::ItemKind::Fn(..) | - hir::ItemKind::Existential(..) | hir::ItemKind::Ty(..) => { + hir::ItemKind::Const(..) | hir::ItemKind::Static(..) | + hir::ItemKind::Fn(..) | hir::ItemKind::Ty(..) => { self.check(item.id, item_visibility).generics().predicates().ty(); } + hir::ItemKind::Existential(..) => { + // `ty()` for existential types is the underlying type, + // it's not a part of interface, so we skip it. + self.check(item.id, item_visibility).generics().predicates(); + } hir::ItemKind::Trait(.., ref trait_item_refs) => { self.check(item.id, item_visibility).generics().predicates(); diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 39be3cb744080..c29b639984d81 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -120,6 +120,16 @@ struct BindingError { target: BTreeSet, } +struct TypoSuggestion { + candidate: Symbol, + + /// The kind of the binding ("crate", "module", etc.) + kind: &'static str, + + /// An appropriate article to refer to the binding ("a", "an", etc.) + article: &'static str, +} + impl PartialOrd for BindingError { fn partial_cmp(&self, other: &BindingError) -> Option { Some(self.cmp(other)) @@ -1448,7 +1458,7 @@ impl PrimitiveTypeTable { } } -#[derive(Default, Clone)] +#[derive(Debug, Default, Clone)] pub struct ExternPreludeEntry<'a> { extern_crate_item: Option<&'a NameBinding<'a>>, pub introduced_by_item: bool, @@ -3291,8 +3301,19 @@ impl<'a> Resolver<'a> { let mut levenshtein_worked = false; // Try Levenshtein algorithm. - if let Some(candidate) = this.lookup_typo_candidate(path, ns, is_expected, span) { - err.span_label(ident_span, format!("did you mean `{}`?", candidate)); + let suggestion = this.lookup_typo_candidate(path, ns, is_expected, span); + if let Some(suggestion) = suggestion { + let msg = format!( + "{} {} with a similar name exists", + suggestion.article, suggestion.kind + ); + err.span_suggestion_with_applicability( + ident_span, + &msg, + suggestion.candidate.to_string(), + Applicability::MaybeIncorrect, + ); + levenshtein_worked = true; } @@ -4183,19 +4204,25 @@ impl<'a> Resolver<'a> { None } - fn lookup_typo_candidate(&mut self, - path: &[Segment], - ns: Namespace, - filter_fn: FilterFn, - span: Span) - -> Option - where FilterFn: Fn(Def) -> bool + fn lookup_typo_candidate( + &mut self, + path: &[Segment], + ns: Namespace, + filter_fn: FilterFn, + span: Span, + ) -> Option + where + FilterFn: Fn(Def) -> bool, { - let add_module_candidates = |module: Module, names: &mut Vec| { + let add_module_candidates = |module: Module, names: &mut Vec| { for (&(ident, _), resolution) in module.resolutions.borrow().iter() { if let Some(binding) = resolution.borrow().binding { if filter_fn(binding.def()) { - names.push(ident.name); + names.push(TypoSuggestion { + candidate: ident.name, + article: binding.def().article(), + kind: binding.def().kind_name(), + }); } } } @@ -4209,7 +4236,11 @@ impl<'a> Resolver<'a> { // Locals and type parameters for (ident, def) in &rib.bindings { if filter_fn(*def) { - names.push(ident.name); + names.push(TypoSuggestion { + candidate: ident.name, + article: def.article(), + kind: def.kind_name(), + }); } } // Items in scope @@ -4222,7 +4253,13 @@ impl<'a> Resolver<'a> { } else { // Items from the prelude if !module.no_implicit_prelude { - names.extend(self.extern_prelude.iter().map(|(ident, _)| ident.name)); + names.extend(self.extern_prelude.iter().map(|(ident, _)| { + TypoSuggestion { + candidate: ident.name, + article: "a", + kind: "crate", + } + })); if let Some(prelude) = self.prelude { add_module_candidates(prelude, &mut names); } @@ -4234,7 +4271,13 @@ impl<'a> Resolver<'a> { // Add primitive types to the mix if filter_fn(Def::PrimTy(Bool)) { names.extend( - self.primitive_type_table.primitive_types.iter().map(|(name, _)| name) + self.primitive_type_table.primitive_types.iter().map(|(name, _)| { + TypoSuggestion { + candidate: *name, + article: "a", + kind: "primitive type", + } + }) ) } } else { @@ -4251,9 +4294,16 @@ impl<'a> Resolver<'a> { let name = path[path.len() - 1].ident.name; // Make sure error reporting is deterministic. - names.sort_by_cached_key(|name| name.as_str()); - match find_best_match_for_name(names.iter(), &name.as_str(), None) { - Some(found) if found != name => Some(found), + names.sort_by_cached_key(|suggestion| suggestion.candidate.as_str()); + + match find_best_match_for_name( + names.iter().map(|suggestion| &suggestion.candidate), + &name.as_str(), + None, + ) { + Some(found) if found != name => names + .into_iter() + .find(|suggestion| suggestion.candidate == found), _ => None, } } diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index bb679d340eae7..286f9a758830b 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -1015,6 +1015,7 @@ impl<'a> Resolver<'a> { }; let ident = Ident::new(Symbol::intern(name), span); self.lookup_typo_candidate(&[Segment::from_ident(ident)], MacroNS, is_macro, span) + .map(|suggestion| suggestion.candidate) }); if let Some(suggestion) = suggestion { diff --git a/src/librustdoc/clean/cfg.rs b/src/librustdoc/clean/cfg.rs index 0cfe6be7efbf3..c74a561e5a0d5 100644 --- a/src/librustdoc/clean/cfg.rs +++ b/src/librustdoc/clean/cfg.rs @@ -370,6 +370,7 @@ impl<'a> fmt::Display for Html<'a> { "pc" => "PC", "rumprun" => "Rumprun", "sun" => "Sun", + "fortanix" => "Fortanix", _ => "" }, ("target_env", Some(env)) => match &*env.as_str() { @@ -378,6 +379,7 @@ impl<'a> fmt::Display for Html<'a> { "musl" => "musl", "newlib" => "Newlib", "uclibc" => "uClibc", + "sgx" => "SGX", _ => "", }, ("target_endian", Some(endian)) => return write!(fmt, "{}-endian", endian), diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index e220080844946..41f1ac867ed15 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -238,7 +238,7 @@ #![feature(c_variadic)] #![feature(cfg_target_has_atomic)] #![feature(cfg_target_thread_local)] -#![feature(cfg_target_vendor)] +#![cfg_attr(stage0, feature(cfg_target_vendor))] #![feature(char_error_internals)] #![feature(compiler_builtins_lib)] #![feature(concat_idents)] diff --git a/src/libstd/net/tcp.rs b/src/libstd/net/tcp.rs index b75591e53fc72..86ecb10edf2f9 100644 --- a/src/libstd/net/tcp.rs +++ b/src/libstd/net/tcp.rs @@ -1673,17 +1673,6 @@ mod tests { }) } - #[test] - fn connect_timeout_unroutable() { - // this IP is unroutable, so connections should always time out, - // provided the network is reachable to begin with. - let addr = "10.255.255.1:80".parse().unwrap(); - let e = TcpStream::connect_timeout(&addr, Duration::from_millis(250)).unwrap_err(); - assert!(e.kind() == io::ErrorKind::TimedOut || - e.kind() == io::ErrorKind::Other, - "bad error: {} {:?}", e, e.kind()); - } - #[test] fn connect_timeout_unbound() { // bind and drop a socket to track down a "probably unassigned" port diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 9b4231d8803a3..ac20a62f11787 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -244,9 +244,6 @@ declare_features! ( // rustc internal (active, omit_gdb_pretty_printer_section, "1.5.0", None, None), - // Allows `cfg(target_vendor = "...")`. - (active, cfg_target_vendor, "1.5.0", Some(29718), None), - // Allows attributes on expressions and non-item statements. (active, stmt_expr_attributes, "1.6.0", Some(15701), None), @@ -686,6 +683,8 @@ declare_features! ( (accepted, if_while_or_patterns, "1.33.0", Some(48215), None), // Allows `use x::y;` to search `x` in the current scope. (accepted, uniform_paths, "1.32.0", Some(53130), None), + // Allows `cfg(target_vendor = "...")`. + (accepted, cfg_target_vendor, "1.33.0", Some(29718), None), ); // If you change this, please modify `src/doc/unstable-book` as well. You must @@ -1181,7 +1180,6 @@ pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeGate)] = &[ // cfg(...)'s that are feature gated const GATED_CFGS: &[(&str, &str, fn(&Features) -> bool)] = &[ // (name in cfg, feature, function to check if the feature is enabled) - ("target_vendor", "cfg_target_vendor", cfg_fn!(cfg_target_vendor)), ("target_thread_local", "cfg_target_thread_local", cfg_fn!(cfg_target_thread_local)), ("target_has_atomic", "cfg_target_has_atomic", cfg_fn!(cfg_target_has_atomic)), ("rustdoc", "doc_cfg", cfg_fn!(doc_cfg)), diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index ec96ea067082f..2cc80ddea2df4 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -23,7 +23,7 @@ html_favicon_url = "https://doc.rust-lang.org/favicon.ico", html_root_url = "https://doc.rust-lang.org/nightly/", test(attr(deny(warnings))))] #![feature(asm)] -#![feature(cfg_target_vendor)] +#![cfg_attr(stage0, feature(cfg_target_vendor))] #![feature(fnbox)] #![cfg_attr(any(unix, target_os = "cloudabi"), feature(libc))] #![feature(nll)] diff --git a/src/libunwind/lib.rs b/src/libunwind/lib.rs index 5e51995145461..7ed7837268dcd 100644 --- a/src/libunwind/lib.rs +++ b/src/libunwind/lib.rs @@ -1,7 +1,7 @@ #![no_std] #![unstable(feature = "panic_unwind", issue = "32837")] -#![feature(cfg_target_vendor)] +#![cfg_attr(stage0, feature(cfg_target_vendor))] #![feature(link_cfg)] #![feature(nll)] #![feature(staged_api)] diff --git a/src/test/run-pass/cfg/cfg-target-vendor.rs b/src/test/run-pass/cfg/cfg-target-vendor.rs index 01b904874be04..7824585162e5c 100644 --- a/src/test/run-pass/cfg/cfg-target-vendor.rs +++ b/src/test/run-pass/cfg/cfg-target-vendor.rs @@ -1,6 +1,4 @@ // run-pass -#![feature(cfg_target_vendor)] - #[cfg(target_vendor = "unknown")] pub fn main() { } diff --git a/src/test/ui/associated-types/associated-types-eq-1.stderr b/src/test/ui/associated-types/associated-types-eq-1.stderr index a517bf86a87eb..0935d6ae3e611 100644 --- a/src/test/ui/associated-types/associated-types-eq-1.stderr +++ b/src/test/ui/associated-types/associated-types-eq-1.stderr @@ -2,7 +2,7 @@ error[E0412]: cannot find type `A` in this scope --> $DIR/associated-types-eq-1.rs:10:12 | LL | let _: A = x.boo(); //~ ERROR cannot find type `A` in this scope - | ^ did you mean `I`? + | ^ help: a type parameter with a similar name exists: `I` error: aborting due to previous error diff --git a/src/test/ui/empty/empty-struct-braces-expr.stderr b/src/test/ui/empty/empty-struct-braces-expr.stderr index d3e1cebd26fe1..e595e0ccb9293 100644 --- a/src/test/ui/empty/empty-struct-braces-expr.stderr +++ b/src/test/ui/empty/empty-struct-braces-expr.stderr @@ -4,8 +4,8 @@ error[E0423]: expected value, found struct `Empty1` LL | let e1 = Empty1; //~ ERROR expected value, found struct `Empty1` | ^^^^^^ | | - | did you mean `XEmpty2`? | did you mean `Empty1 { /* fields */ }`? + | help: a unit struct with a similar name exists: `XEmpty2` error[E0423]: expected function, found struct `Empty1` --> $DIR/empty-struct-braces-expr.rs:16:14 @@ -13,8 +13,8 @@ error[E0423]: expected function, found struct `Empty1` LL | let e1 = Empty1(); //~ ERROR expected function, found struct `Empty1` | ^^^^^^ | | - | did you mean `XEmpty2`? | did you mean `Empty1 { /* fields */ }`? + | help: a unit struct with a similar name exists: `XEmpty2` error[E0423]: expected value, found struct variant `E::Empty3` --> $DIR/empty-struct-braces-expr.rs:17:14 @@ -34,8 +34,8 @@ error[E0423]: expected value, found struct `XEmpty1` LL | let xe1 = XEmpty1; //~ ERROR expected value, found struct `XEmpty1` | ^^^^^^^ | | - | did you mean `XEmpty2`? | did you mean `XEmpty1 { /* fields */ }`? + | help: a unit struct with a similar name exists: `XEmpty2` error[E0423]: expected function, found struct `XEmpty1` --> $DIR/empty-struct-braces-expr.rs:21:15 @@ -43,8 +43,8 @@ error[E0423]: expected function, found struct `XEmpty1` LL | let xe1 = XEmpty1(); //~ ERROR expected function, found struct `XEmpty1` | ^^^^^^^ | | - | did you mean `XEmpty2`? | did you mean `XEmpty1 { /* fields */ }`? + | help: a unit struct with a similar name exists: `XEmpty2` error[E0599]: no variant named `Empty3` found for type `empty_struct::XE` in the current scope --> $DIR/empty-struct-braces-expr.rs:22:19 diff --git a/src/test/ui/empty/empty-struct-braces-pat-1.stderr b/src/test/ui/empty/empty-struct-braces-pat-1.stderr index f43262574fbf0..6c361c703440c 100644 --- a/src/test/ui/empty/empty-struct-braces-pat-1.stderr +++ b/src/test/ui/empty/empty-struct-braces-pat-1.stderr @@ -10,7 +10,7 @@ error[E0532]: expected unit struct/variant or constant, found struct variant `XE LL | XE::XEmpty3 => () | ^^^^------- | | | - | | did you mean `XEmpty4`? + | | help: a unit variant with a similar name exists: `XEmpty4` | did you mean `XE::XEmpty3 { /* fields */ }`? error: aborting due to 2 previous errors diff --git a/src/test/ui/empty/empty-struct-braces-pat-2.stderr b/src/test/ui/empty/empty-struct-braces-pat-2.stderr index 8c55b2119f196..fc2ed79bb2e05 100644 --- a/src/test/ui/empty/empty-struct-braces-pat-2.stderr +++ b/src/test/ui/empty/empty-struct-braces-pat-2.stderr @@ -4,8 +4,8 @@ error[E0532]: expected tuple struct/variant, found struct `Empty1` LL | Empty1() => () //~ ERROR expected tuple struct/variant, found struct `Empty1` | ^^^^^^ | | - | did you mean `XEmpty6`? | did you mean `Empty1 { /* fields */ }`? + | help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found struct `XEmpty1` --> $DIR/empty-struct-braces-pat-2.rs:18:9 @@ -13,8 +13,8 @@ error[E0532]: expected tuple struct/variant, found struct `XEmpty1` LL | XEmpty1() => () //~ ERROR expected tuple struct/variant, found struct `XEmpty1` | ^^^^^^^ | | - | did you mean `XEmpty6`? | did you mean `XEmpty1 { /* fields */ }`? + | help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found struct `Empty1` --> $DIR/empty-struct-braces-pat-2.rs:21:9 @@ -22,8 +22,8 @@ error[E0532]: expected tuple struct/variant, found struct `Empty1` LL | Empty1(..) => () //~ ERROR expected tuple struct/variant, found struct `Empty1` | ^^^^^^ | | - | did you mean `XEmpty6`? | did you mean `Empty1 { /* fields */ }`? + | help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found struct `XEmpty1` --> $DIR/empty-struct-braces-pat-2.rs:24:9 @@ -31,8 +31,8 @@ error[E0532]: expected tuple struct/variant, found struct `XEmpty1` LL | XEmpty1(..) => () //~ ERROR expected tuple struct/variant, found struct `XEmpty1` | ^^^^^^^ | | - | did you mean `XEmpty6`? | did you mean `XEmpty1 { /* fields */ }`? + | help: a tuple struct with a similar name exists: `XEmpty6` error: aborting due to 4 previous errors diff --git a/src/test/ui/empty/empty-struct-braces-pat-3.stderr b/src/test/ui/empty/empty-struct-braces-pat-3.stderr index 17670cb0bd6d1..af8731b5f0596 100644 --- a/src/test/ui/empty/empty-struct-braces-pat-3.stderr +++ b/src/test/ui/empty/empty-struct-braces-pat-3.stderr @@ -10,7 +10,7 @@ error[E0532]: expected tuple struct/variant, found struct variant `XE::XEmpty3` LL | XE::XEmpty3() => () | ^^^^------- | | | - | | did you mean `XEmpty5`? + | | help: a tuple variant with a similar name exists: `XEmpty5` | did you mean `XE::XEmpty3 { /* fields */ }`? error[E0532]: expected tuple struct/variant, found struct variant `E::Empty3` @@ -25,7 +25,7 @@ error[E0532]: expected tuple struct/variant, found struct variant `XE::XEmpty3` LL | XE::XEmpty3(..) => () | ^^^^------- | | | - | | did you mean `XEmpty5`? + | | help: a tuple variant with a similar name exists: `XEmpty5` | did you mean `XE::XEmpty3 { /* fields */ }`? error: aborting due to 4 previous errors diff --git a/src/test/ui/empty/empty-struct-tuple-pat.stderr b/src/test/ui/empty/empty-struct-tuple-pat.stderr index 4cb869e64a5da..f92c4e5c46346 100644 --- a/src/test/ui/empty/empty-struct-tuple-pat.stderr +++ b/src/test/ui/empty/empty-struct-tuple-pat.stderr @@ -28,7 +28,7 @@ error[E0532]: expected unit struct/variant or constant, found tuple variant `XE: LL | XE::XEmpty5 => (), | ^^^^------- | | - | did you mean `XEmpty4`? + | help: a unit variant with a similar name exists: `XEmpty4` error: aborting due to 4 previous errors diff --git a/src/test/ui/empty/empty-struct-unit-pat.stderr b/src/test/ui/empty/empty-struct-unit-pat.stderr index 3711bd6dcb74d..e62246562be67 100644 --- a/src/test/ui/empty/empty-struct-unit-pat.stderr +++ b/src/test/ui/empty/empty-struct-unit-pat.stderr @@ -2,25 +2,25 @@ error[E0532]: expected tuple struct/variant, found unit struct `Empty2` --> $DIR/empty-struct-unit-pat.rs:21:9 | LL | Empty2() => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2` - | ^^^^^^ did you mean `XEmpty6`? + | ^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found unit struct `XEmpty2` --> $DIR/empty-struct-unit-pat.rs:24:9 | LL | XEmpty2() => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2` - | ^^^^^^^ did you mean `XEmpty6`? + | ^^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found unit struct `Empty2` --> $DIR/empty-struct-unit-pat.rs:27:9 | LL | Empty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2` - | ^^^^^^ did you mean `XEmpty6`? + | ^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found unit struct `XEmpty2` --> $DIR/empty-struct-unit-pat.rs:30:9 | LL | XEmpty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2` - | ^^^^^^^ did you mean `XEmpty6`? + | ^^^^^^^ help: a tuple struct with a similar name exists: `XEmpty6` error[E0532]: expected tuple struct/variant, found unit variant `E::Empty4` --> $DIR/empty-struct-unit-pat.rs:34:9 @@ -34,7 +34,7 @@ error[E0532]: expected tuple struct/variant, found unit variant `XE::XEmpty4` LL | XE::XEmpty4() => (), | ^^^^------- | | - | did you mean `XEmpty5`? + | help: a tuple variant with a similar name exists: `XEmpty5` error[E0532]: expected tuple struct/variant, found unit variant `E::Empty4` --> $DIR/empty-struct-unit-pat.rs:42:9 @@ -48,7 +48,7 @@ error[E0532]: expected tuple struct/variant, found unit variant `XE::XEmpty4` LL | XE::XEmpty4(..) => (), | ^^^^------- | | - | did you mean `XEmpty5`? + | help: a tuple variant with a similar name exists: `XEmpty5` error: aborting due to 8 previous errors diff --git a/src/test/ui/error-codes/E0423.stderr b/src/test/ui/error-codes/E0423.stderr index df9ed631a1c2e..c422a1e79574b 100644 --- a/src/test/ui/error-codes/E0423.stderr +++ b/src/test/ui/error-codes/E0423.stderr @@ -22,8 +22,8 @@ error[E0423]: expected function, found struct `Foo` LL | let f = Foo(); //~ ERROR E0423 | ^^^ | | - | did you mean `foo`? | did you mean `Foo { /* fields */ }`? + | help: a function with a similar name exists: `foo` error[E0423]: expected value, found struct `S` --> $DIR/E0423.rs:12:32 diff --git a/src/test/ui/error-festival.stderr b/src/test/ui/error-festival.stderr index ef7b49399bf3a..a600ff14d3b87 100644 --- a/src/test/ui/error-festival.stderr +++ b/src/test/ui/error-festival.stderr @@ -2,7 +2,7 @@ error[E0425]: cannot find value `y` in this scope --> $DIR/error-festival.rs:14:5 | LL | y = 2; - | ^ did you mean `x`? + | ^ help: a local variable with a similar name exists: `x` error[E0603]: constant `FOO` is private --> $DIR/error-festival.rs:22:10 diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs b/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs deleted file mode 100644 index acd310e7e2e07..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[cfg(target_vendor = "x")] //~ ERROR `cfg(target_vendor)` is experimental -#[cfg_attr(target_vendor = "x", x)] //~ ERROR `cfg(target_vendor)` is experimental -struct Foo(u64, u64); - -#[cfg(not(any(all(target_vendor = "x"))))] //~ ERROR `cfg(target_vendor)` is experimental -fn foo() {} - -fn main() { - cfg!(target_vendor = "x"); - //~^ ERROR `cfg(target_vendor)` is experimental and subject to change -} diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr b/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr deleted file mode 100644 index dd514a5d90a03..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-cfg-target-vendor.stderr +++ /dev/null @@ -1,35 +0,0 @@ -error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718) - --> $DIR/feature-gate-cfg-target-vendor.rs:2:12 - | -LL | #[cfg_attr(target_vendor = "x", x)] //~ ERROR `cfg(target_vendor)` is experimental - | ^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable - -error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718) - --> $DIR/feature-gate-cfg-target-vendor.rs:1:7 - | -LL | #[cfg(target_vendor = "x")] //~ ERROR `cfg(target_vendor)` is experimental - | ^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable - -error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718) - --> $DIR/feature-gate-cfg-target-vendor.rs:5:19 - | -LL | #[cfg(not(any(all(target_vendor = "x"))))] //~ ERROR `cfg(target_vendor)` is experimental - | ^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable - -error[E0658]: `cfg(target_vendor)` is experimental and subject to change (see issue #29718) - --> $DIR/feature-gate-cfg-target-vendor.rs:9:10 - | -LL | cfg!(target_vendor = "x"); - | ^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(cfg_target_vendor)] to the crate attributes to enable - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/glob-resolve1.stderr b/src/test/ui/glob-resolve1.stderr index 899ffbf0d09a0..10a57aa6ca649 100644 --- a/src/test/ui/glob-resolve1.stderr +++ b/src/test/ui/glob-resolve1.stderr @@ -47,7 +47,11 @@ error[E0412]: cannot find type `A` in this scope --> $DIR/glob-resolve1.rs:28:11 | LL | foo::(); //~ ERROR: cannot find type `A` in this scope - | ^ did you mean `B`? + | ^ +help: an enum with a similar name exists + | +LL | foo::(); //~ ERROR: cannot find type `A` in this scope + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use bar::A; @@ -57,7 +61,11 @@ error[E0412]: cannot find type `C` in this scope --> $DIR/glob-resolve1.rs:29:11 | LL | foo::(); //~ ERROR: cannot find type `C` in this scope - | ^ did you mean `B`? + | ^ +help: an enum with a similar name exists + | +LL | foo::(); //~ ERROR: cannot find type `C` in this scope + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use bar::C; @@ -67,7 +75,11 @@ error[E0412]: cannot find type `D` in this scope --> $DIR/glob-resolve1.rs:30:11 | LL | foo::(); //~ ERROR: cannot find type `D` in this scope - | ^ did you mean `B`? + | ^ +help: an enum with a similar name exists + | +LL | foo::(); //~ ERROR: cannot find type `D` in this scope + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use bar::D; diff --git a/src/test/ui/issues/issue-10200.stderr b/src/test/ui/issues/issue-10200.stderr index 78e601568f187..ac1ad118a7152 100644 --- a/src/test/ui/issues/issue-10200.stderr +++ b/src/test/ui/issues/issue-10200.stderr @@ -2,7 +2,7 @@ error[E0532]: expected tuple struct/variant, found function `foo` --> $DIR/issue-10200.rs:6:9 | LL | foo(x) //~ ERROR expected tuple struct/variant, found function `foo` - | ^^^ did you mean `Foo`? + | ^^^ help: a tuple struct with a similar name exists: `Foo` error: aborting due to previous error diff --git a/src/test/ui/issues/issue-17546.stderr b/src/test/ui/issues/issue-17546.stderr index 4f2c6cfc4bba7..1fbb229ed98b4 100644 --- a/src/test/ui/issues/issue-17546.stderr +++ b/src/test/ui/issues/issue-17546.stderr @@ -2,10 +2,15 @@ error[E0573]: expected type, found variant `NoResult` --> $DIR/issue-17546.rs:12:17 | LL | fn new() -> NoResult { - | --------^^^^^^^^^^^^^^^^ - | | - | did you mean `Result`? - | help: try using the variant's enum: `foo::MyEnum` + | ^^^^^^^^^^^^^^^^^^^^^^^^ +help: try using the variant's enum + | +LL | fn new() -> foo::MyEnum { + | ^^^^^^^^^^^ +help: an enum with a similar name exists + | +LL | fn new() -> Result { + | ^^^^^^ error[E0573]: expected type, found variant `Result` --> $DIR/issue-17546.rs:22:17 @@ -45,10 +50,15 @@ error[E0573]: expected type, found variant `NoResult` --> $DIR/issue-17546.rs:33:15 | LL | fn newer() -> NoResult { - | --------^^^^^^^^^^^^^^^^^^^^^ - | | - | did you mean `Result`? - | help: try using the variant's enum: `foo::MyEnum` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +help: try using the variant's enum + | +LL | fn newer() -> foo::MyEnum { + | ^^^^^^^^^^^ +help: an enum with a similar name exists + | +LL | fn newer() -> Result { + | ^^^^^^ error: aborting due to 4 previous errors diff --git a/src/test/ui/issues/issue-31845.stderr b/src/test/ui/issues/issue-31845.stderr index d04a884a9336a..7ee1a41a3870d 100644 --- a/src/test/ui/issues/issue-31845.stderr +++ b/src/test/ui/issues/issue-31845.stderr @@ -2,7 +2,7 @@ error[E0425]: cannot find function `g` in this scope --> $DIR/issue-31845.rs:7:12 | LL | g(); //~ ERROR cannot find function `g` in this scope - | ^ did you mean `h`? + | ^ help: a function with a similar name exists: `h` error: aborting due to previous error diff --git a/src/test/ui/issues/issue-32004.stderr b/src/test/ui/issues/issue-32004.stderr index 04cd27b8bdb6c..f8c418b25a0e4 100644 --- a/src/test/ui/issues/issue-32004.stderr +++ b/src/test/ui/issues/issue-32004.stderr @@ -4,7 +4,7 @@ error[E0532]: expected unit struct/variant or constant, found tuple variant `Foo LL | Foo::Bar => {} | ^^^^^--- | | - | did you mean `Baz`? + | help: a unit variant with a similar name exists: `Baz` error[E0532]: expected tuple struct/variant, found unit struct `S` --> $DIR/issue-32004.rs:16:9 diff --git a/src/test/ui/issues/issue-32086.stderr b/src/test/ui/issues/issue-32086.stderr index 98a6200cdae8a..bb2cc7c101b77 100644 --- a/src/test/ui/issues/issue-32086.stderr +++ b/src/test/ui/issues/issue-32086.stderr @@ -2,13 +2,13 @@ error[E0532]: expected tuple struct/variant, found constant `C` --> $DIR/issue-32086.rs:5:9 | LL | let C(a) = S(11); //~ ERROR expected tuple struct/variant, found constant `C` - | ^ did you mean `S`? + | ^ help: a tuple struct with a similar name exists: `S` error[E0532]: expected tuple struct/variant, found constant `C` --> $DIR/issue-32086.rs:6:9 | LL | let C(..) = S(11); //~ ERROR expected tuple struct/variant, found constant `C` - | ^ did you mean `S`? + | ^ help: a tuple struct with a similar name exists: `S` error: aborting due to 2 previous errors diff --git a/src/test/ui/issues/issue-46332.stderr b/src/test/ui/issues/issue-46332.stderr index 785deb77ef7a2..812a50000d1c2 100644 --- a/src/test/ui/issues/issue-46332.stderr +++ b/src/test/ui/issues/issue-46332.stderr @@ -2,7 +2,7 @@ error[E0422]: cannot find struct, variant or union type `TyUInt` in this scope --> $DIR/issue-46332.rs:9:5 | LL | TyUInt {}; - | ^^^^^^ did you mean `TyUint`? + | ^^^^^^ help: a struct with a similar name exists: `TyUint` error: aborting due to previous error diff --git a/src/test/ui/issues/issue-7607-1.stderr b/src/test/ui/issues/issue-7607-1.stderr index ffe03f521e005..aa0a6c761bf07 100644 --- a/src/test/ui/issues/issue-7607-1.stderr +++ b/src/test/ui/issues/issue-7607-1.stderr @@ -2,7 +2,7 @@ error[E0412]: cannot find type `Fo` in this scope --> $DIR/issue-7607-1.rs:5:6 | LL | impl Fo { //~ ERROR cannot find type `Fo` in this scope - | ^^ did you mean `Fn`? + | ^^ help: a trait with a similar name exists: `Fn` error: aborting due to previous error diff --git a/src/test/ui/namespace/namespace-mix.stderr b/src/test/ui/namespace/namespace-mix.stderr index 18d426979fab1..5ebb40e75b395 100644 --- a/src/test/ui/namespace/namespace-mix.stderr +++ b/src/test/ui/namespace/namespace-mix.stderr @@ -2,11 +2,13 @@ error[E0423]: expected value, found type alias `m1::S` --> $DIR/namespace-mix.rs:34:11 | LL | check(m1::S); //~ ERROR expected value, found type alias `m1::S` - | ^^^^- - | | - | did you mean `TS`? + | ^^^^^ | = note: can't use a type alias as a constructor +help: a tuple struct with a similar name exists + | +LL | check(m1::TS); //~ ERROR expected value, found type alias `m1::S` + | ^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use m2::S; @@ -18,11 +20,13 @@ error[E0423]: expected value, found type alias `xm1::S` --> $DIR/namespace-mix.rs:40:11 | LL | check(xm1::S); //~ ERROR expected value, found type alias `xm1::S` - | ^^^^^- - | | - | did you mean `TS`? + | ^^^^^^ | = note: can't use a type alias as a constructor +help: a tuple struct with a similar name exists + | +LL | check(xm1::TS); //~ ERROR expected value, found type alias `xm1::S` + | ^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use m2::S; @@ -34,10 +38,11 @@ error[E0423]: expected value, found struct variant `m7::V` --> $DIR/namespace-mix.rs:100:11 | LL | check(m7::V); //~ ERROR expected value, found struct variant `m7::V` - | ^^^^- - | | | - | | did you mean `TV`? - | did you mean `m7::V { /* fields */ }`? + | ^^^^^ did you mean `m7::V { /* fields */ }`? +help: a tuple variant with a similar name exists + | +LL | check(m7::TV); //~ ERROR expected value, found struct variant `m7::V` + | ^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use m8::V; @@ -49,10 +54,11 @@ error[E0423]: expected value, found struct variant `xm7::V` --> $DIR/namespace-mix.rs:106:11 | LL | check(xm7::V); //~ ERROR expected value, found struct variant `xm7::V` - | ^^^^^- - | | | - | | did you mean `TV`? - | did you mean `xm7::V { /* fields */ }`? + | ^^^^^^ did you mean `xm7::V { /* fields */ }`? +help: a tuple variant with a similar name exists + | +LL | check(xm7::TV); //~ ERROR expected value, found struct variant `xm7::V` + | ^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use m8::V; diff --git a/src/test/ui/pattern/pattern-error-continue.stderr b/src/test/ui/pattern/pattern-error-continue.stderr index c2810d764c2ce..654814afcfe17 100644 --- a/src/test/ui/pattern/pattern-error-continue.stderr +++ b/src/test/ui/pattern/pattern-error-continue.stderr @@ -10,7 +10,7 @@ error[E0532]: expected tuple struct/variant, found unit variant `A::D` LL | A::D(_) => (), //~ ERROR expected tuple struct/variant, found unit variant `A::D` | ^^^- | | - | did you mean `B`? + | help: a tuple variant with a similar name exists: `B` error[E0023]: this pattern has 3 fields, but the corresponding tuple variant has 2 fields --> $DIR/pattern-error-continue.rs:17:9 diff --git a/src/test/ui/privacy/privacy-ns1.stderr b/src/test/ui/privacy/privacy-ns1.stderr index e778b6ec3505d..6ba2dbe41a2b4 100644 --- a/src/test/ui/privacy/privacy-ns1.stderr +++ b/src/test/ui/privacy/privacy-ns1.stderr @@ -2,7 +2,11 @@ error[E0423]: expected function, found trait `Bar` --> $DIR/privacy-ns1.rs:20:5 | LL | Bar(); //~ ERROR expected function, found trait `Bar` - | ^^^ did you mean `Baz`? + | ^^^ +help: a unit struct with a similar name exists + | +LL | Baz(); //~ ERROR expected function, found trait `Bar` + | ^^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -16,7 +20,11 @@ error[E0573]: expected type, found function `Bar` --> $DIR/privacy-ns1.rs:35:17 | LL | let _x: Box; //~ ERROR expected type, found function `Bar` - | ^^^ did you mean `Baz`? + | ^^^ +help: a struct with a similar name exists + | +LL | let _x: Box; //~ ERROR expected type, found function `Bar` + | ^^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -30,7 +38,11 @@ error[E0425]: cannot find function `Bar` in this scope --> $DIR/privacy-ns1.rs:50:5 | LL | Bar(); //~ ERROR cannot find function `Bar` in this scope - | ^^^ did you mean `Baz`? + | ^^^ +help: a unit struct with a similar name exists + | +LL | Baz(); //~ ERROR cannot find function `Bar` in this scope + | ^^^ help: possible candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -44,7 +56,11 @@ error[E0412]: cannot find type `Bar` in this scope --> $DIR/privacy-ns1.rs:51:17 | LL | let _x: Box; //~ ERROR cannot find type `Bar` in this scope - | ^^^ did you mean `Baz`? + | ^^^ +help: a struct with a similar name exists + | +LL | let _x: Box; //~ ERROR cannot find type `Bar` in this scope + | ^^^ help: possible candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; diff --git a/src/test/ui/privacy/privacy-ns2.stderr b/src/test/ui/privacy/privacy-ns2.stderr index 74f8667778954..0012072ed1138 100644 --- a/src/test/ui/privacy/privacy-ns2.stderr +++ b/src/test/ui/privacy/privacy-ns2.stderr @@ -16,7 +16,11 @@ error[E0423]: expected function, found trait `Bar` --> $DIR/privacy-ns2.rs:26:5 | LL | Bar(); //~ ERROR expected function, found trait `Bar` - | ^^^ did you mean `Baz`? + | ^^^ +help: a unit struct with a similar name exists + | +LL | Baz(); //~ ERROR expected function, found trait `Bar` + | ^^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -44,7 +48,11 @@ error[E0573]: expected type, found function `Bar` --> $DIR/privacy-ns2.rs:47:17 | LL | let _x: Box; //~ ERROR expected type, found function `Bar` - | ^^^ did you mean `Baz`? + | ^^^ +help: a struct with a similar name exists + | +LL | let _x: Box; //~ ERROR expected type, found function `Bar` + | ^^^ help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; diff --git a/src/test/ui/privacy/private-in-public-existential.rs b/src/test/ui/privacy/private-in-public-existential.rs new file mode 100644 index 0000000000000..95658f45df6f5 --- /dev/null +++ b/src/test/ui/privacy/private-in-public-existential.rs @@ -0,0 +1,15 @@ +// compile-pass + +#![feature(existential_type)] +#![deny(private_in_public)] + +pub existential type Pub: Default; + +#[derive(Default)] +struct Priv; + +fn check() -> Pub { + Priv +} + +fn main() {} diff --git a/src/test/ui/proc-macro/lints_in_proc_macros.rs b/src/test/ui/proc-macro/lints_in_proc_macros.rs index 8f76cc48c4f20..8d2957ef5da74 100644 --- a/src/test/ui/proc-macro/lints_in_proc_macros.rs +++ b/src/test/ui/proc-macro/lints_in_proc_macros.rs @@ -11,6 +11,7 @@ fn main() { let foobar = 42; bang_proc_macro2!(); //~^ ERROR cannot find value `foobar2` in this scope - //~^^ did you mean `foobar`? + //~| HELP a local variable with a similar name exists + //~| SUGGESTION foobar println!("{}", x); } diff --git a/src/test/ui/proc-macro/lints_in_proc_macros.stderr b/src/test/ui/proc-macro/lints_in_proc_macros.stderr index c10a8a0ffa65f..2d97cd700be9f 100644 --- a/src/test/ui/proc-macro/lints_in_proc_macros.stderr +++ b/src/test/ui/proc-macro/lints_in_proc_macros.stderr @@ -2,7 +2,7 @@ error[E0425]: cannot find value `foobar2` in this scope --> $DIR/lints_in_proc_macros.rs:12:5 | LL | bang_proc_macro2!(); - | ^^^^^^^^^^^^^^^^^^^^ did you mean `foobar`? + | ^^^^^^^^^^^^^^^^^^^^ help: a local variable with a similar name exists: `foobar` error: aborting due to previous error diff --git a/src/test/ui/proc-macro/parent-source-spans.stderr b/src/test/ui/proc-macro/parent-source-spans.stderr index a8ee325b41de5..423122539c803 100644 --- a/src/test/ui/proc-macro/parent-source-spans.stderr +++ b/src/test/ui/proc-macro/parent-source-spans.stderr @@ -128,7 +128,7 @@ error[E0425]: cannot find value `ok` in this scope --> $DIR/parent-source-spans.rs:30:5 | LL | parent_source_spans!($($tokens)*); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`? + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok` ... LL | one!("hello", "world"); | ----------------------- in this macro invocation @@ -137,7 +137,7 @@ error[E0425]: cannot find value `ok` in this scope --> $DIR/parent-source-spans.rs:30:5 | LL | parent_source_spans!($($tokens)*); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`? + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok` ... LL | two!("yay", "rust"); | -------------------- in this macro invocation @@ -146,7 +146,7 @@ error[E0425]: cannot find value `ok` in this scope --> $DIR/parent-source-spans.rs:30:5 | LL | parent_source_spans!($($tokens)*); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `Ok`? + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a tuple variant with a similar name exists: `Ok` ... LL | three!("hip", "hop"); | --------------------- in this macro invocation diff --git a/src/test/ui/resolve/issue-39226.stderr b/src/test/ui/resolve/issue-39226.stderr index 3a93928aef95f..c97fb4db6be6b 100644 --- a/src/test/ui/resolve/issue-39226.stderr +++ b/src/test/ui/resolve/issue-39226.stderr @@ -4,8 +4,8 @@ error[E0423]: expected value, found struct `Handle` LL | handle: Handle | ^^^^^^ | | - | did you mean `handle`? | did you mean `Handle { /* fields */ }`? + | help: a local variable with a similar name exists: `handle` error: aborting due to previous error diff --git a/src/test/ui/resolve/issue-5035.stderr b/src/test/ui/resolve/issue-5035.stderr index 39216c6ec0c42..57ad5f22f4c24 100644 --- a/src/test/ui/resolve/issue-5035.stderr +++ b/src/test/ui/resolve/issue-5035.stderr @@ -10,8 +10,8 @@ error[E0404]: expected trait, found type alias `K` LL | impl K for isize {} //~ ERROR expected trait, found type alias `K` | ^ | | - | did you mean `I`? | type aliases cannot be used as traits + | help: a trait with a similar name exists: `I` | = note: did you mean to use a trait alias? diff --git a/src/test/ui/resolve/levenshtein.stderr b/src/test/ui/resolve/levenshtein.stderr index df075d15d7fef..cddfe4e7ff55a 100644 --- a/src/test/ui/resolve/levenshtein.stderr +++ b/src/test/ui/resolve/levenshtein.stderr @@ -2,19 +2,19 @@ error[E0412]: cannot find type `esize` in this scope --> $DIR/levenshtein.rs:5:11 | LL | fn foo(c: esize) {} // Misspelled primitive type name. - | ^^^^^ did you mean `isize`? + | ^^^^^ help: a primitive type with a similar name exists: `isize` error[E0412]: cannot find type `Baz` in this scope --> $DIR/levenshtein.rs:10:10 | LL | type A = Baz; // Misspelled type name. - | ^^^ did you mean `Bar`? + | ^^^ help: an enum with a similar name exists: `Bar` error[E0412]: cannot find type `Opiton` in this scope --> $DIR/levenshtein.rs:12:10 | LL | type B = Opiton; // Misspelled type name from the prelude. - | ^^^^^^ did you mean `Option`? + | ^^^^^^ help: an enum with a similar name exists: `Option` error[E0412]: cannot find type `Baz` in this scope --> $DIR/levenshtein.rs:16:14 @@ -26,25 +26,25 @@ error[E0425]: cannot find value `MAXITEM` in this scope --> $DIR/levenshtein.rs:24:20 | LL | let v = [0u32; MAXITEM]; // Misspelled constant name. - | ^^^^^^^ did you mean `MAX_ITEM`? + | ^^^^^^^ help: a constant with a similar name exists: `MAX_ITEM` error[E0425]: cannot find function `foobar` in this scope --> $DIR/levenshtein.rs:26:5 | LL | foobar(); // Misspelled function name. - | ^^^^^^ did you mean `foo_bar`? + | ^^^^^^ help: a function with a similar name exists: `foo_bar` error[E0412]: cannot find type `first` in module `m` --> $DIR/levenshtein.rs:28:15 | LL | let b: m::first = m::second; // Misspelled item in module. - | ^^^^^ did you mean `First`? + | ^^^^^ help: a struct with a similar name exists: `First` error[E0425]: cannot find value `second` in module `m` --> $DIR/levenshtein.rs:28:26 | LL | let b: m::first = m::second; // Misspelled item in module. - | ^^^^^^ did you mean `Second`? + | ^^^^^^ help: a unit struct with a similar name exists: `Second` error: aborting due to 8 previous errors diff --git a/src/test/ui/resolve/privacy-enum-ctor.stderr b/src/test/ui/resolve/privacy-enum-ctor.stderr index 71b1ec46247ff..01f0941282e35 100644 --- a/src/test/ui/resolve/privacy-enum-ctor.stderr +++ b/src/test/ui/resolve/privacy-enum-ctor.stderr @@ -13,7 +13,7 @@ error[E0423]: expected value, found enum `Z` --> $DIR/privacy-enum-ctor.rs:25:9 | LL | Z; - | ^ did you mean `f`? + | ^ help: a function with a similar name exists: `f` | = note: did you mean to use one of the following variants? - `m::Z::Fn` @@ -30,14 +30,16 @@ error[E0423]: expected value, found enum `m::E` --> $DIR/privacy-enum-ctor.rs:41:16 | LL | let _: E = m::E; - | ^^^- - | | - | did you mean `f`? + | ^^^^ | = note: did you mean to use one of the following variants? - `E::Fn` - `E::Struct` - `E::Unit` +help: a function with a similar name exists + | +LL | let _: E = m::f; + | ^ help: possible better candidates are found in other modules, you can import them into scope | LL | use std::f32::consts::E; @@ -78,7 +80,11 @@ error[E0412]: cannot find type `Z` in this scope --> $DIR/privacy-enum-ctor.rs:57:12 | LL | let _: Z = m::n::Z; - | ^ did you mean `E`? + | ^ +help: an enum with a similar name exists + | +LL | let _: E = m::n::Z; + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use m::n::Z; @@ -99,7 +105,11 @@ error[E0412]: cannot find type `Z` in this scope --> $DIR/privacy-enum-ctor.rs:61:12 | LL | let _: Z = m::n::Z::Fn; - | ^ did you mean `E`? + | ^ +help: an enum with a similar name exists + | +LL | let _: E = m::n::Z::Fn; + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use m::n::Z; @@ -109,7 +119,11 @@ error[E0412]: cannot find type `Z` in this scope --> $DIR/privacy-enum-ctor.rs:64:12 | LL | let _: Z = m::n::Z::Struct; - | ^ did you mean `E`? + | ^ +help: an enum with a similar name exists + | +LL | let _: E = m::n::Z::Struct; + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use m::n::Z; @@ -125,7 +139,11 @@ error[E0412]: cannot find type `Z` in this scope --> $DIR/privacy-enum-ctor.rs:68:12 | LL | let _: Z = m::n::Z::Unit {}; - | ^ did you mean `E`? + | ^ +help: an enum with a similar name exists + | +LL | let _: E = m::n::Z::Unit {}; + | ^ help: possible candidate is found in another module, you can import it into scope | LL | use m::n::Z; diff --git a/src/test/ui/resolve/privacy-struct-ctor.stderr b/src/test/ui/resolve/privacy-struct-ctor.stderr index edb7a672edda7..44ecf6b97bf50 100644 --- a/src/test/ui/resolve/privacy-struct-ctor.stderr +++ b/src/test/ui/resolve/privacy-struct-ctor.stderr @@ -2,10 +2,11 @@ error[E0423]: expected value, found struct `Z` --> $DIR/privacy-struct-ctor.rs:20:9 | LL | Z; + | ^ constructor is not visible here due to private fields +help: a tuple struct with a similar name exists + | +LL | S; | ^ - | | - | did you mean `S`? - | constructor is not visible here due to private fields help: possible better candidate is found in another module, you can import it into scope | LL | use m::n::Z; diff --git a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr index 157b4cc79dfc1..8a9426bfee862 100644 --- a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr +++ b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr @@ -28,7 +28,7 @@ error[E0423]: expected value, found module `a::b` LL | a::b.J | ^^^--- | | | - | | did you mean `I`? + | | help: a constant with a similar name exists: `I` | did you mean `a::b::J`? error[E0423]: expected value, found module `a` @@ -45,7 +45,7 @@ error[E0423]: expected value, found module `a::b` LL | v.push(a::b); | ^^^- | | - | did you mean `I`? + | help: a constant with a similar name exists: `I` error[E0423]: expected value, found module `a::b` --> $DIR/suggest-path-instead-of-mod-dot-item.rs:45:5 @@ -53,7 +53,7 @@ error[E0423]: expected value, found module `a::b` LL | a::b.f() | ^^^----- | | | - | | did you mean `I`? + | | help: a constant with a similar name exists: `I` | did you mean `a::b::f(...)`? error[E0423]: expected value, found module `a::b` @@ -62,7 +62,7 @@ error[E0423]: expected value, found module `a::b` LL | a::b | ^^^- | | - | did you mean `I`? + | help: a constant with a similar name exists: `I` error[E0423]: expected function, found module `a::b` --> $DIR/suggest-path-instead-of-mod-dot-item.rs:55:5 @@ -70,7 +70,7 @@ error[E0423]: expected function, found module `a::b` LL | a::b() | ^^^- | | - | did you mean `I`? + | help: a constant with a similar name exists: `I` error: aborting due to 9 previous errors diff --git a/src/test/ui/resolve/tuple-struct-alias.stderr b/src/test/ui/resolve/tuple-struct-alias.stderr index 6338c340c23c7..f299aa40a31ef 100644 --- a/src/test/ui/resolve/tuple-struct-alias.stderr +++ b/src/test/ui/resolve/tuple-struct-alias.stderr @@ -2,7 +2,7 @@ error[E0423]: expected function, found type alias `A` --> $DIR/tuple-struct-alias.rs:5:13 | LL | let s = A(0, 1); //~ ERROR expected function - | ^ did you mean `S`? + | ^ help: a tuple struct with a similar name exists: `S` | = note: can't use a type alias as a constructor @@ -10,7 +10,7 @@ error[E0532]: expected tuple struct/variant, found type alias `A` --> $DIR/tuple-struct-alias.rs:7:9 | LL | A(..) => {} //~ ERROR expected tuple struct/variant - | ^ did you mean `S`? + | ^ help: a tuple struct with a similar name exists: `S` | = note: can't use a type alias as a constructor diff --git a/src/test/ui/span/typo-suggestion.stderr b/src/test/ui/span/typo-suggestion.stderr index 5c564f7dd740d..7b12c4430ed4a 100644 --- a/src/test/ui/span/typo-suggestion.stderr +++ b/src/test/ui/span/typo-suggestion.stderr @@ -8,7 +8,7 @@ error[E0425]: cannot find value `fob` in this scope --> $DIR/typo-suggestion.rs:8:26 | LL | println!("Hello {}", fob); //~ ERROR cannot find value - | ^^^ did you mean `foo`? + | ^^^ help: a local variable with a similar name exists: `foo` error: aborting due to 2 previous errors diff --git a/src/test/ui/span/visibility-ty-params.stderr b/src/test/ui/span/visibility-ty-params.stderr index 1fb54df15704b..d7914528f4686 100644 --- a/src/test/ui/span/visibility-ty-params.stderr +++ b/src/test/ui/span/visibility-ty-params.stderr @@ -16,7 +16,7 @@ error[E0577]: expected module, found struct `S` LL | m!{ S } //~ ERROR unexpected generic arguments in path | -^^^^ | | - | did you mean `m`? + | help: a module with a similar name exists: `m` error: aborting due to 3 previous errors diff --git a/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr b/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr index 0fcaac55fd617..37ec6c0f015ff 100644 --- a/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr +++ b/src/test/ui/structs/struct-fields-shorthand-unresolved.stderr @@ -2,7 +2,7 @@ error[E0425]: cannot find value `y` in this scope --> $DIR/struct-fields-shorthand-unresolved.rs:10:9 | LL | y //~ ERROR cannot find value `y` in this scope - | ^ did you mean `x`? + | ^ help: a local variable with a similar name exists: `x` error: aborting due to previous error diff --git a/src/test/ui/traits/trait-impl-for-module.stderr b/src/test/ui/traits/trait-impl-for-module.stderr index 3f9407e683516..99da4b7c87af0 100644 --- a/src/test/ui/traits/trait-impl-for-module.stderr +++ b/src/test/ui/traits/trait-impl-for-module.stderr @@ -2,7 +2,7 @@ error[E0573]: expected type, found module `a` --> $DIR/trait-impl-for-module.rs:7:12 | LL | impl A for a { //~ ERROR expected type, found module - | ^ did you mean `A`? + | ^ help: a trait with a similar name exists: `A` error: aborting due to previous error diff --git a/src/test/ui/ufcs/ufcs-partially-resolved.stderr b/src/test/ui/ufcs/ufcs-partially-resolved.stderr index a576fdde1173e..3cd1cac71fa76 100644 --- a/src/test/ui/ufcs/ufcs-partially-resolved.stderr +++ b/src/test/ui/ufcs/ufcs-partially-resolved.stderr @@ -14,7 +14,7 @@ error[E0576]: cannot find associated type `N` in trait `Tr` --> $DIR/ufcs-partially-resolved.rs:19:24 | LL | let _: ::N; //~ ERROR cannot find associated type `N` in trait `Tr` - | ^ did you mean `Y`? + | ^ help: an associated type with a similar name exists: `Y` error[E0576]: cannot find associated type `N` in enum `E` --> $DIR/ufcs-partially-resolved.rs:20:23 @@ -32,7 +32,7 @@ error[E0576]: cannot find method or associated constant `N` in trait `Tr` --> $DIR/ufcs-partially-resolved.rs:22:17 | LL | ::N; //~ ERROR cannot find method or associated constant `N` in trait `Tr` - | ^ did you mean `Y`? + | ^ help: a method with a similar name exists: `Y` error[E0576]: cannot find method or associated constant `N` in enum `E` --> $DIR/ufcs-partially-resolved.rs:23:16 @@ -62,7 +62,7 @@ error[E0576]: cannot find associated type `N` in trait `Tr` --> $DIR/ufcs-partially-resolved.rs:30:24 | LL | let _: ::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr` - | ^ did you mean `Y`? + | ^ help: an associated type with a similar name exists: `Y` error[E0576]: cannot find associated type `N` in enum `E` --> $DIR/ufcs-partially-resolved.rs:31:23 @@ -80,7 +80,7 @@ error[E0576]: cannot find associated type `N` in trait `Tr` --> $DIR/ufcs-partially-resolved.rs:33:17 | LL | ::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr` - | ^ did you mean `Y`? + | ^ help: an associated type with a similar name exists: `Y` error[E0576]: cannot find associated type `N` in enum `E` --> $DIR/ufcs-partially-resolved.rs:34:16 @@ -160,7 +160,7 @@ error[E0575]: expected associated type, found method `Dr::Z` LL | let _: ::Z; //~ ERROR expected associated type, found method `Dr::Z` | ^^^^^^^^^^^^- | | - | did you mean `X`? + | help: an associated type with a similar name exists: `X` error[E0575]: expected method or associated constant, found associated type `Dr::X` --> $DIR/ufcs-partially-resolved.rs:53:5 @@ -168,7 +168,7 @@ error[E0575]: expected method or associated constant, found associated type `Dr: LL | ::X; //~ ERROR expected method or associated constant, found associated type `Dr::X` | ^^^^^^^^^^^^- | | - | did you mean `Z`? + | help: a method with a similar name exists: `Z` | = note: can't use a type alias as a constructor @@ -178,7 +178,7 @@ error[E0575]: expected associated type, found method `Dr::Z` LL | let _: ::Z::N; //~ ERROR expected associated type, found method `Dr::Z` | ^^^^^^^^^^^^-^^^ | | - | did you mean `X`? + | help: an associated type with a similar name exists: `X` error[E0223]: ambiguous associated type --> $DIR/ufcs-partially-resolved.rs:36:12 diff --git a/src/test/ui/ui-testing-optout.stderr b/src/test/ui/ui-testing-optout.stderr index 3233715d32572..5a662e0ea89c2 100644 --- a/src/test/ui/ui-testing-optout.stderr +++ b/src/test/ui/ui-testing-optout.stderr @@ -2,19 +2,19 @@ error[E0412]: cannot find type `B` in this scope --> $DIR/ui-testing-optout.rs:4:10 | 4 | type A = B; //~ ERROR - | ^ did you mean `A`? + | ^ help: a type alias with a similar name exists: `A` error[E0412]: cannot find type `D` in this scope --> $DIR/ui-testing-optout.rs:10:10 | 10 | type C = D; //~ ERROR - | ^ did you mean `A`? + | ^ help: a type alias with a similar name exists: `A` error[E0412]: cannot find type `F` in this scope --> $DIR/ui-testing-optout.rs:95:10 | 95 | type E = F; //~ ERROR - | ^ did you mean `A`? + | ^ help: a type alias with a similar name exists: `A` error: aborting due to 3 previous errors