From ab1e6342956620901723106761eacb0113e1583b Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sun, 22 Nov 2020 12:57:55 -0500 Subject: [PATCH 01/12] Make `fold_item_recur` non-nullable This gets rid of a bunch of `unwrap()`s and makes it a little more clear what's going on. Originally I wanted to make `fold_item` non-nullable too, which would have been a lot nicer to work with, but unfortunately `stripper` does actually return `None` in some places. I might make a follow-up moving stripper to be special and not a pass so that passes can be non-nullable. --- src/librustdoc/fold.rs | 13 ++- src/librustdoc/formats/cache.rs | 83 +++++++++---------- src/librustdoc/html/sources.rs | 2 +- .../passes/calculate_doc_coverage.rs | 2 +- .../passes/check_code_block_syntax.rs | 2 +- src/librustdoc/passes/collapse_docs.rs | 2 +- .../passes/collect_intra_doc_links.rs | 6 +- src/librustdoc/passes/collect_trait_impls.rs | 4 +- src/librustdoc/passes/doc_test_lints.rs | 2 +- src/librustdoc/passes/html_tags.rs | 4 +- src/librustdoc/passes/non_autolinks.rs | 4 +- src/librustdoc/passes/propagate_doc_cfg.rs | 2 +- src/librustdoc/passes/strip_hidden.rs | 4 +- src/librustdoc/passes/stripper.rs | 16 ++-- src/librustdoc/passes/unindent_comments.rs | 2 +- 15 files changed, 70 insertions(+), 78 deletions(-) diff --git a/src/librustdoc/fold.rs b/src/librustdoc/fold.rs index a72860ef0a8f..285fabdc3723 100644 --- a/src/librustdoc/fold.rs +++ b/src/librustdoc/fold.rs @@ -16,7 +16,7 @@ impl StripItem { crate trait DocFolder: Sized { fn fold_item(&mut self, item: Item) -> Option { - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } /// don't override! @@ -71,15 +71,12 @@ crate trait DocFolder: Sized { } /// don't override! - fn fold_item_recur(&mut self, item: Item) -> Option { - let Item { attrs, name, source, visibility, def_id, kind, stability, deprecation } = item; - - let kind = match kind { + fn fold_item_recur(&mut self, mut item: Item) -> Item { + item.kind = match item.kind { StrippedItem(box i) => StrippedItem(box self.fold_inner_recur(i)), - _ => self.fold_inner_recur(kind), + _ => self.fold_inner_recur(item.kind), }; - - Some(Item { attrs, name, source, kind, visibility, stability, deprecation, def_id }) + item } fn fold_mod(&mut self, m: Module) -> Module { diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 917c1a95fdbf..39b750279ac5 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -421,55 +421,52 @@ impl DocFolder for Cache { // Once we've recursively found all the generics, hoard off all the // implementations elsewhere. - let ret = self.fold_item_recur(item).and_then(|item| { - if let clean::Item { kind: clean::ImplItem(_), .. } = item { - // Figure out the id of this impl. This may map to a - // primitive rather than always to a struct/enum. - // Note: matching twice to restrict the lifetime of the `i` borrow. - let mut dids = FxHashSet::default(); - if let clean::Item { kind: clean::ImplItem(ref i), .. } = item { - match i.for_ { - clean::ResolvedPath { did, .. } - | clean::BorrowedRef { - type_: box clean::ResolvedPath { did, .. }, .. - } => { + let item = self.fold_item_recur(item); + let ret = if let clean::Item { kind: clean::ImplItem(_), .. } = item { + // Figure out the id of this impl. This may map to a + // primitive rather than always to a struct/enum. + // Note: matching twice to restrict the lifetime of the `i` borrow. + let mut dids = FxHashSet::default(); + if let clean::Item { kind: clean::ImplItem(ref i), .. } = item { + match i.for_ { + clean::ResolvedPath { did, .. } + | clean::BorrowedRef { type_: box clean::ResolvedPath { did, .. }, .. } => { + dids.insert(did); + } + ref t => { + let did = t + .primitive_type() + .and_then(|t| self.primitive_locations.get(&t).cloned()); + + if let Some(did) = did { + dids.insert(did); + } + } + } + + if let Some(generics) = i.trait_.as_ref().and_then(|t| t.generics()) { + for bound in generics { + if let Some(did) = bound.def_id() { dids.insert(did); } - ref t => { - let did = t - .primitive_type() - .and_then(|t| self.primitive_locations.get(&t).cloned()); - - if let Some(did) = did { - dids.insert(did); - } - } } - - if let Some(generics) = i.trait_.as_ref().and_then(|t| t.generics()) { - for bound in generics { - if let Some(did) = bound.def_id() { - dids.insert(did); - } - } - } - } else { - unreachable!() - }; - let impl_item = Impl { impl_item: item }; - if impl_item.trait_did().map_or(true, |d| self.traits.contains_key(&d)) { - for did in dids { - self.impls.entry(did).or_insert(vec![]).push(impl_item.clone()); - } - } else { - let trait_did = impl_item.trait_did().expect("no trait did"); - self.orphan_trait_impls.push((trait_did, dids, impl_item)); } - None } else { - Some(item) + unreachable!() + }; + let impl_item = Impl { impl_item: item }; + if impl_item.trait_did().map_or(true, |d| self.traits.contains_key(&d)) { + for did in dids { + self.impls.entry(did).or_insert(vec![]).push(impl_item.clone()); + } + } else { + let trait_did = impl_item.trait_did().expect("no trait did"); + self.orphan_trait_impls.push((trait_did, dids, impl_item)); } - }); + None + } else { + Some(item) + }; if pushed { self.stack.pop().expect("stack already empty"); diff --git a/src/librustdoc/html/sources.rs b/src/librustdoc/html/sources.rs index 0f82649409f3..e7b5a90d84df 100644 --- a/src/librustdoc/html/sources.rs +++ b/src/librustdoc/html/sources.rs @@ -60,7 +60,7 @@ impl<'a> DocFolder for SourceCollector<'a> { } }; } - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } } diff --git a/src/librustdoc/passes/calculate_doc_coverage.rs b/src/librustdoc/passes/calculate_doc_coverage.rs index aca218e53816..3f9978c8fca8 100644 --- a/src/librustdoc/passes/calculate_doc_coverage.rs +++ b/src/librustdoc/passes/calculate_doc_coverage.rs @@ -268,6 +268,6 @@ impl<'a, 'b> fold::DocFolder for CoverageCalculator<'a, 'b> { } } - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } diff --git a/src/librustdoc/passes/check_code_block_syntax.rs b/src/librustdoc/passes/check_code_block_syntax.rs index a48fa738e3b7..0c76dc571bee 100644 --- a/src/librustdoc/passes/check_code_block_syntax.rs +++ b/src/librustdoc/passes/check_code_block_syntax.rs @@ -105,7 +105,7 @@ impl<'a, 'tcx> DocFolder for SyntaxChecker<'a, 'tcx> { } } - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } } diff --git a/src/librustdoc/passes/collapse_docs.rs b/src/librustdoc/passes/collapse_docs.rs index 1f9f5c58e5a9..e1ba75baa0fa 100644 --- a/src/librustdoc/passes/collapse_docs.rs +++ b/src/librustdoc/passes/collapse_docs.rs @@ -23,7 +23,7 @@ struct Collapser; impl fold::DocFolder for Collapser { fn fold_item(&mut self, mut i: Item) -> Option { i.attrs.collapse_doc_comments(); - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index fd09ba04b3db..b0639e43ae65 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -858,7 +858,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { // we don't display docs on `extern crate` items anyway, so don't process them. clean::ExternCrateItem(..) => { debug!("ignoring extern crate item {:?}", item.def_id); - return self.fold_item_recur(item); + return Some(self.fold_item_recur(item)); } clean::ImportItem(Import { kind: clean::ImportKind::Simple(ref name, ..), .. }) => { Some(name.clone()) @@ -958,7 +958,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { } } - if item.is_mod() { + Some(if item.is_mod() { if !item.attrs.inner_docs { self.mod_ids.push(item.def_id); } @@ -968,7 +968,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { ret } else { self.fold_item_recur(item) - } + }) } } diff --git a/src/librustdoc/passes/collect_trait_impls.rs b/src/librustdoc/passes/collect_trait_impls.rs index 2946db1f4620..4c3defabc329 100644 --- a/src/librustdoc/passes/collect_trait_impls.rs +++ b/src/librustdoc/passes/collect_trait_impls.rs @@ -133,7 +133,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> { } } - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } @@ -152,7 +152,7 @@ impl DocFolder for ItemCollector { fn fold_item(&mut self, i: Item) -> Option { self.items.insert(i.def_id); - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } diff --git a/src/librustdoc/passes/doc_test_lints.rs b/src/librustdoc/passes/doc_test_lints.rs index 60fe8080f56b..299a73c8a011 100644 --- a/src/librustdoc/passes/doc_test_lints.rs +++ b/src/librustdoc/passes/doc_test_lints.rs @@ -41,7 +41,7 @@ impl<'a, 'tcx> DocFolder for PrivateItemDocTestLinter<'a, 'tcx> { look_for_tests(&cx, &dox, &item); - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } } diff --git a/src/librustdoc/passes/html_tags.rs b/src/librustdoc/passes/html_tags.rs index 70748633117f..a7a1ba1118d1 100644 --- a/src/librustdoc/passes/html_tags.rs +++ b/src/librustdoc/passes/html_tags.rs @@ -178,7 +178,7 @@ impl<'a, 'tcx> DocFolder for InvalidHtmlTagsLinter<'a, 'tcx> { Some(hir_id) => hir_id, None => { // If non-local, no need to check anything. - return self.fold_item_recur(item); + return Some(self.fold_item_recur(item)); } }; let dox = item.attrs.collapsed_doc_value().unwrap_or_default(); @@ -223,6 +223,6 @@ impl<'a, 'tcx> DocFolder for InvalidHtmlTagsLinter<'a, 'tcx> { } } - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } } diff --git a/src/librustdoc/passes/non_autolinks.rs b/src/librustdoc/passes/non_autolinks.rs index c9c49968b93e..1f411b997f80 100644 --- a/src/librustdoc/passes/non_autolinks.rs +++ b/src/librustdoc/passes/non_autolinks.rs @@ -68,7 +68,7 @@ impl<'a, 'tcx> DocFolder for NonAutolinksLinter<'a, 'tcx> { Some(hir_id) => hir_id, None => { // If non-local, no need to check anything. - return self.fold_item_recur(item); + return Some(self.fold_item_recur(item)); } }; let dox = item.attrs.collapsed_doc_value().unwrap_or_default(); @@ -133,6 +133,6 @@ impl<'a, 'tcx> DocFolder for NonAutolinksLinter<'a, 'tcx> { } } - self.fold_item_recur(item) + Some(self.fold_item_recur(item)) } } diff --git a/src/librustdoc/passes/propagate_doc_cfg.rs b/src/librustdoc/passes/propagate_doc_cfg.rs index fbfc693c5347..6722d7c2fc9f 100644 --- a/src/librustdoc/passes/propagate_doc_cfg.rs +++ b/src/librustdoc/passes/propagate_doc_cfg.rs @@ -39,6 +39,6 @@ impl DocFolder for CfgPropagator { let result = self.fold_item_recur(item); self.parent_cfg = old_parent_cfg; - result + Some(result) } } diff --git a/src/librustdoc/passes/strip_hidden.rs b/src/librustdoc/passes/strip_hidden.rs index 6da753ea6e69..6b59eb8cf288 100644 --- a/src/librustdoc/passes/strip_hidden.rs +++ b/src/librustdoc/passes/strip_hidden.rs @@ -47,7 +47,7 @@ impl<'a> DocFolder for Stripper<'a> { // strip things like impl methods but when doing so // we must not add any items to the `retained` set. let old = mem::replace(&mut self.update_retained, false); - let ret = StripItem(self.fold_item_recur(i).unwrap()).strip(); + let ret = StripItem(self.fold_item_recur(i)).strip(); self.update_retained = old; return ret; } @@ -58,6 +58,6 @@ impl<'a> DocFolder for Stripper<'a> { self.retained.insert(i.def_id); } } - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } diff --git a/src/librustdoc/passes/stripper.rs b/src/librustdoc/passes/stripper.rs index eb5a61a9d202..444fd593ec9c 100644 --- a/src/librustdoc/passes/stripper.rs +++ b/src/librustdoc/passes/stripper.rs @@ -22,7 +22,7 @@ impl<'a> DocFolder for Stripper<'a> { let old = mem::replace(&mut self.update_retained, false); let ret = self.fold_item_recur(i); self.update_retained = old; - return ret; + return Some(ret); } // These items can all get re-exported clean::OpaqueTyItem(..) @@ -59,7 +59,7 @@ impl<'a> DocFolder for Stripper<'a> { if i.def_id.is_local() && !i.visibility.is_public() { debug!("Stripper: stripping module {:?}", i.name); let old = mem::replace(&mut self.update_retained, false); - let ret = StripItem(self.fold_item_recur(i).unwrap()).strip(); + let ret = StripItem(self.fold_item_recur(i)).strip(); self.update_retained = old; return ret; } @@ -107,12 +107,10 @@ impl<'a> DocFolder for Stripper<'a> { self.fold_item_recur(i) }; - if let Some(ref i) = i { - if self.update_retained { - self.retained.insert(i.def_id); - } + if self.update_retained { + self.retained.insert(i.def_id); } - i + Some(i) } } @@ -153,7 +151,7 @@ impl<'a> DocFolder for ImplStripper<'a> { } } } - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } @@ -164,7 +162,7 @@ impl DocFolder for ImportStripper { fn fold_item(&mut self, i: Item) -> Option { match i.kind { clean::ExternCrateItem(..) | clean::ImportItem(..) if !i.visibility.is_public() => None, - _ => self.fold_item_recur(i), + _ => Some(self.fold_item_recur(i)), } } } diff --git a/src/librustdoc/passes/unindent_comments.rs b/src/librustdoc/passes/unindent_comments.rs index eb2f066bbdeb..d0345d1e48cb 100644 --- a/src/librustdoc/passes/unindent_comments.rs +++ b/src/librustdoc/passes/unindent_comments.rs @@ -23,7 +23,7 @@ struct CommentCleaner; impl fold::DocFolder for CommentCleaner { fn fold_item(&mut self, mut i: Item) -> Option { i.attrs.unindent_doc_comments(); - self.fold_item_recur(i) + Some(self.fold_item_recur(i)) } } From 0043fc9ce6e5482bda8e4a1b8c4c195332a877b9 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sun, 22 Nov 2020 13:34:06 -0500 Subject: [PATCH 02/12] Get rid of `doctree::Impl` --- src/librustdoc/clean/mod.rs | 102 +++++++++---------- src/librustdoc/core.rs | 16 --- src/librustdoc/doctree.rs | 18 ---- src/librustdoc/visit_ast.rs | 30 +----- src/test/rustdoc-ui/intra-link-errors.stderr | 18 ++-- 5 files changed, 60 insertions(+), 124 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index d58a88957df2..e76ca1022a94 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -234,9 +234,8 @@ impl Clean for doctree::Module<'_> { items.extend(self.fns.iter().map(|x| x.clean(cx))); items.extend(self.foreigns.iter().map(|x| x.clean(cx))); items.extend(self.mods.iter().map(|x| x.clean(cx))); - items.extend(self.items.iter().map(|x| x.clean(cx))); + items.extend(self.items.iter().map(|x| x.clean(cx)).flatten()); items.extend(self.traits.iter().map(|x| x.clean(cx))); - items.extend(self.impls.iter().flat_map(|x| x.clean(cx))); items.extend(self.macros.iter().map(|x| x.clean(cx))); items.extend(self.proc_macros.iter().map(|x| x.clean(cx))); @@ -1922,8 +1921,8 @@ impl Clean for hir::BareFnTy<'_> { } } -impl Clean for (&hir::Item<'_>, Option) { - fn clean(&self, cx: &DocContext<'_>) -> Item { +impl Clean> for (&hir::Item<'_>, Option) { + fn clean(&self, cx: &DocContext<'_>) -> Vec { use hir::ItemKind; let (item, renamed) = self; @@ -1977,10 +1976,11 @@ impl Clean for (&hir::Item<'_>, Option) { fields: variant_data.fields().clean(cx), fields_stripped: false, }), + ItemKind::Impl { .. } => return clean_impl(item, cx), _ => unreachable!("not yet converted"), }; - Item::from_def_id_and_parts(def_id, Some(name), kind, cx) + vec![Item::from_def_id_and_parts(def_id, Some(name), kind, cx)] } } @@ -2005,57 +2005,53 @@ impl Clean for ty::ImplPolarity { } } -impl Clean> for doctree::Impl<'_> { - fn clean(&self, cx: &DocContext<'_>) -> Vec { - let mut ret = Vec::new(); - let trait_ = self.trait_.clean(cx); - let items = self.items.iter().map(|ii| ii.clean(cx)).collect::>(); - let def_id = cx.tcx.hir().local_def_id(self.id); - - // If this impl block is an implementation of the Deref trait, then we - // need to try inlining the target's inherent impl blocks as well. - if trait_.def_id() == cx.tcx.lang_items().deref_trait() { - build_deref_target_impls(cx, &items, &mut ret); +fn clean_impl(impl_: &hir::Item<'_>, cx: &DocContext<'_>) -> Vec { + let mut ret = Vec::new(); + let (trait_, items, for_, unsafety, generics) = match &impl_.kind { + hir::ItemKind::Impl { of_trait, items, self_ty, unsafety, generics, .. } => { + (of_trait, items, self_ty, *unsafety, generics) } + _ => unreachable!(), + }; + let trait_ = trait_.clean(cx); + let items = items.iter().map(|ii| cx.tcx.hir().impl_item(ii.id).clean(cx)).collect::>(); + let def_id = cx.tcx.hir().local_def_id(impl_.hir_id); - let provided: FxHashSet = trait_ - .def_id() - .map(|did| { - cx.tcx.provided_trait_methods(did).map(|meth| meth.ident.to_string()).collect() - }) - .unwrap_or_default(); - - let for_ = self.for_.clean(cx); - let type_alias = for_.def_id().and_then(|did| match cx.tcx.def_kind(did) { - DefKind::TyAlias => Some(cx.tcx.type_of(did).clean(cx)), - _ => None, - }); - let make_item = |trait_: Option, for_: Type, items: Vec| Item { - name: None, - attrs: self.attrs.clean(cx), - source: self.span.clean(cx), - def_id: def_id.to_def_id(), - visibility: self.vis.clean(cx), - stability: cx.stability(self.id), - deprecation: cx.deprecation(self.id).clean(cx), - kind: ImplItem(Impl { - unsafety: self.unsafety, - generics: self.generics.clean(cx), - provided_trait_methods: provided.clone(), - trait_, - for_, - items, - polarity: Some(cx.tcx.impl_polarity(def_id).clean(cx)), - synthetic: false, - blanket_impl: None, - }), - }; - if let Some(type_alias) = type_alias { - ret.push(make_item(trait_.clone(), type_alias, items.clone())); - } - ret.push(make_item(trait_, for_, items)); - ret + // If this impl block is an implementation of the Deref trait, then we + // need to try inlining the target's inherent impl blocks as well. + if trait_.def_id() == cx.tcx.lang_items().deref_trait() { + build_deref_target_impls(cx, &items, &mut ret); } + + let provided: FxHashSet = trait_ + .def_id() + .map(|did| cx.tcx.provided_trait_methods(did).map(|meth| meth.ident.to_string()).collect()) + .unwrap_or_default(); + + let for_ = for_.clean(cx); + let type_alias = for_.def_id().and_then(|did| match cx.tcx.def_kind(did) { + DefKind::TyAlias => Some(cx.tcx.type_of(did).clean(cx)), + _ => None, + }); + let make_item = |trait_: Option, for_: Type, items: Vec| { + let kind = ImplItem(Impl { + unsafety, + generics: generics.clean(cx), + provided_trait_methods: provided.clone(), + trait_, + for_, + items, + polarity: Some(cx.tcx.impl_polarity(def_id).clean(cx)), + synthetic: false, + blanket_impl: None, + }); + Item::from_hir_id_and_parts(impl_.hir_id, None, kind, cx) + }; + if let Some(type_alias) = type_alias { + ret.push(make_item(trait_.clone(), type_alias, items.clone())); + } + ret.push(make_item(trait_, for_, items)); + ret } impl Clean> for doctree::ExternCrate<'_> { diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 413f5bdf5214..b7cc0f194591 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -1,4 +1,3 @@ -use rustc_attr as attr; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_data_structures::sync::{self, Lrc}; use rustc_driver::abort_on_err; @@ -156,21 +155,6 @@ impl<'tcx> DocContext<'tcx> { def_id.as_local().map(|def_id| self.tcx.hir().local_def_id_to_hir_id(def_id)) } } - - crate fn stability(&self, id: HirId) -> Option { - self.tcx - .hir() - .opt_local_def_id(id) - .and_then(|def_id| self.tcx.lookup_stability(def_id.to_def_id())) - .cloned() - } - - crate fn deprecation(&self, id: HirId) -> Option { - self.tcx - .hir() - .opt_local_def_id(id) - .and_then(|def_id| self.tcx.lookup_deprecation(def_id.to_def_id())) - } } /// Creates a new diagnostic `Handler` that can be used to emit warnings and errors. diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index d56328cc2aa0..4d2fe04123bc 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -23,7 +23,6 @@ crate struct Module<'hir> { // (item, renamed) crate items: Vec<(&'hir hir::Item<'hir>, Option)>, crate traits: Vec>, - crate impls: Vec>, crate foreigns: Vec>, crate macros: Vec, crate proc_macros: Vec, @@ -44,7 +43,6 @@ impl Module<'hir> { mods: Vec::new(), items: Vec::new(), traits: Vec::new(), - impls: Vec::new(), foreigns: Vec::new(), macros: Vec::new(), proc_macros: Vec::new(), @@ -89,22 +87,6 @@ crate struct Trait<'hir> { crate id: hir::HirId, } -#[derive(Debug)] -crate struct Impl<'hir> { - crate unsafety: hir::Unsafety, - crate polarity: hir::ImplPolarity, - crate defaultness: hir::Defaultness, - crate constness: hir::Constness, - crate generics: &'hir hir::Generics<'hir>, - crate trait_: &'hir Option>, - crate for_: &'hir hir::Ty<'hir>, - crate items: Vec<&'hir hir::ImplItem<'hir>>, - crate attrs: &'hir [ast::Attribute], - crate span: Span, - crate vis: &'hir hir::Visibility<'hir>, - crate id: hir::HirId, -} - crate struct ForeignItem<'hir> { crate id: hir::HirId, crate name: Symbol, diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index c55e5f7690c1..37050a57ca01 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -401,37 +401,11 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { }; om.traits.push(t); } - hir::ItemKind::Impl { - unsafety, - polarity, - defaultness, - constness, - defaultness_span: _, - ref generics, - ref of_trait, - self_ty, - ref items, - } => { + hir::ItemKind::Impl { ref of_trait, .. } => { // Don't duplicate impls when inlining or if it's implementing a trait, we'll pick // them up regardless of where they're located. if !self.inlining && of_trait.is_none() { - let items = - items.iter().map(|item| self.cx.tcx.hir().impl_item(item.id)).collect(); - let i = Impl { - unsafety, - polarity, - defaultness, - constness, - generics, - trait_: of_trait, - for_: self_ty, - items, - attrs: &item.attrs, - id: item.hir_id, - span: item.span, - vis: &item.vis, - }; - om.impls.push(i); + om.items.push((item, None)); } } } diff --git a/src/test/rustdoc-ui/intra-link-errors.stderr b/src/test/rustdoc-ui/intra-link-errors.stderr index 31e7fc48afde..be98cac94ece 100644 --- a/src/test/rustdoc-ui/intra-link-errors.stderr +++ b/src/test/rustdoc-ui/intra-link-errors.stderr @@ -106,6 +106,15 @@ LL | /// [S!] | this link resolves to the struct `S`, which is not in the macro namespace | help: to link to the struct, prefix with `struct@`: `struct@S` +error: unresolved link to `S::h` + --> $DIR/intra-link-errors.rs:78:6 + | +LL | /// [type@S::h] + | ^^^^^^^^^ + | | + | this link resolves to the associated function `h`, which is not in the type namespace + | help: to link to the associated function, add parentheses: `S::h()` + error: unresolved link to `T::g` --> $DIR/intra-link-errors.rs:86:6 | @@ -121,15 +130,6 @@ error: unresolved link to `T::h` LL | /// [T::h!] | ^^^^^ the trait `T` has no macro named `h` -error: unresolved link to `S::h` - --> $DIR/intra-link-errors.rs:78:6 - | -LL | /// [type@S::h] - | ^^^^^^^^^ - | | - | this link resolves to the associated function `h`, which is not in the type namespace - | help: to link to the associated function, add parentheses: `S::h()` - error: unresolved link to `m` --> $DIR/intra-link-errors.rs:98:6 | From 0b6537a9ea50b294ae0b371ac4b6757303bb19f8 Mon Sep 17 00:00:00 2001 From: Camelid Date: Sun, 22 Nov 2020 14:25:50 -0800 Subject: [PATCH 03/12] Accept '!' in intra-doc links This will allow linking to things like `Result`. --- src/librustdoc/passes/collect_intra_doc_links.rs | 2 +- src/test/rustdoc/intra-doc-link-generic-params.rs | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index fd09ba04b3db..e1b82e58b85b 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1022,7 +1022,7 @@ impl LinkCollector<'_, '_> { (link.trim(), None) }; - if path_str.contains(|ch: char| !(ch.is_alphanumeric() || ":_<>, ".contains(ch))) { + if path_str.contains(|ch: char| !(ch.is_alphanumeric() || ":_<>, !".contains(ch))) { return None; } diff --git a/src/test/rustdoc/intra-doc-link-generic-params.rs b/src/test/rustdoc/intra-doc-link-generic-params.rs index 7d7289437ff8..1de6410f10c4 100644 --- a/src/test/rustdoc/intra-doc-link-generic-params.rs +++ b/src/test/rustdoc/intra-doc-link-generic-params.rs @@ -15,8 +15,11 @@ // @has foo/index.html '//a[@href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"]' 'with the generic, Option' //! We should also try linking to [`Result`]; it has *two* generics! +//! And [`Result`] and [`Result`]. //! // @has foo/index.html '//a[@href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"]' 'Result' +// @has foo/index.html '//a[@href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"]' 'Result' +// @has foo/index.html '//a[@href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"]' 'Result' //! Now let's test a trickier case: [`Vec::::new`], or you could write it //! [with parentheses as `Vec::::new()`][Vec::::new()]. From fafe3cd68290b7440e1ea66fca8438363a431274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Mon, 23 Nov 2020 00:00:00 +0000 Subject: [PATCH 04/12] Allow using `-Z fewer-names=no` to retain value names Change `-Z fewer-names` into an optional boolean flag and allow using it to either discard value names when true or retain them when false, regardless of other settings. --- compiler/rustc_interface/src/tests.rs | 2 +- compiler/rustc_session/src/options.rs | 2 +- compiler/rustc_session/src/session.rs | 15 +++++++++------ src/test/codegen/fewer-names.rs | 20 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 src/test/codegen/fewer-names.rs diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs index 1fc2d281e793..01d5ed2f34ab 100644 --- a/compiler/rustc_interface/src/tests.rs +++ b/compiler/rustc_interface/src/tests.rs @@ -547,7 +547,7 @@ fn test_debugging_options_tracking_hash() { tracked!(debug_macros, true); tracked!(dep_info_omit_d_target, true); tracked!(dual_proc_macros, true); - tracked!(fewer_names, true); + tracked!(fewer_names, Some(true)); tracked!(force_overflow_checks, Some(true)); tracked!(force_unstable_if_unmarked, true); tracked!(fuel, Some(("abc".to_string(), 99))); diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 1cd3d11e3215..ba083140f514 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -900,7 +900,7 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "emits a future-incompatibility report for lints (RFC 2834)"), emit_stack_sizes: bool = (false, parse_bool, [UNTRACKED], "emit a section containing stack size metadata (default: no)"), - fewer_names: bool = (false, parse_bool, [TRACKED], + fewer_names: Option = (None, parse_opt_bool, [TRACKED], "reduce memory use by retaining fewer names within compilation artifacts (LLVM-IR) \ (default: no)"), force_overflow_checks: Option = (None, parse_opt_bool, [TRACKED], diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index 419d1447764e..5dddf0eb72ea 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -734,12 +734,15 @@ impl Session { self.opts.cg.panic.unwrap_or(self.target.panic_strategy) } pub fn fewer_names(&self) -> bool { - let more_names = self.opts.output_types.contains_key(&OutputType::LlvmAssembly) - || self.opts.output_types.contains_key(&OutputType::Bitcode) - // AddressSanitizer and MemorySanitizer use alloca name when reporting an issue. - || self.opts.debugging_opts.sanitizer.intersects(SanitizerSet::ADDRESS | SanitizerSet::MEMORY); - - self.opts.debugging_opts.fewer_names || !more_names + if let Some(fewer_names) = self.opts.debugging_opts.fewer_names { + fewer_names + } else { + let more_names = self.opts.output_types.contains_key(&OutputType::LlvmAssembly) + || self.opts.output_types.contains_key(&OutputType::Bitcode) + // AddressSanitizer and MemorySanitizer use alloca name when reporting an issue. + || self.opts.debugging_opts.sanitizer.intersects(SanitizerSet::ADDRESS | SanitizerSet::MEMORY); + !more_names + } } pub fn unstable_options(&self) -> bool { diff --git a/src/test/codegen/fewer-names.rs b/src/test/codegen/fewer-names.rs new file mode 100644 index 000000000000..53a926d49efe --- /dev/null +++ b/src/test/codegen/fewer-names.rs @@ -0,0 +1,20 @@ +// no-system-llvm +// compile-flags: -Coverflow-checks=no -O +// revisions: YES NO +// [YES]compile-flags: -Zfewer-names=yes +// [NO] compile-flags: -Zfewer-names=no +#![crate_type = "lib"] + +#[no_mangle] +pub fn sum(x: u32, y: u32) -> u32 { +// YES-LABEL: define i32 @sum(i32 %0, i32 %1) +// YES-NEXT: %3 = add i32 %1, %0 +// YES-NEXT: ret i32 %3 + +// NO-LABEL: define i32 @sum(i32 %x, i32 %y) +// NO-NEXT: start: +// NO-NEXT: %z = add i32 %y, %x +// NO-NEXT: ret i32 %z + let z = x + y; + z +} From c5c3d7bdf43078b5323b21bf15711831b2c8a229 Mon Sep 17 00:00:00 2001 From: takashiidobe Date: Mon, 23 Nov 2020 10:48:19 -0500 Subject: [PATCH 05/12] Fix typo in keyword docs for traits --- library/std/src/keyword_docs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/std/src/keyword_docs.rs b/library/std/src/keyword_docs.rs index b990b7857039..80b74a9ba9b0 100644 --- a/library/std/src/keyword_docs.rs +++ b/library/std/src/keyword_docs.rs @@ -1739,7 +1739,7 @@ mod super_keyword {} /// /// # Differences between the 2015 and 2018 editions /// -/// In the 2015 edition parameters pattern where not needed for traits: +/// In the 2015 edition the parameters pattern was not needed for traits: /// /// ```rust,edition2015 /// trait Tr { From 8526c313c115bb997a10d6c012864f6c4a5c6853 Mon Sep 17 00:00:00 2001 From: Stein Somers Date: Mon, 23 Nov 2020 16:40:48 +0100 Subject: [PATCH 06/12] BTreeMap: cut out the ceremony around BoxedNode --- library/alloc/src/collections/btree/node.rs | 50 +++++---------------- src/etc/gdb_providers.py | 12 ++--- 2 files changed, 18 insertions(+), 44 deletions(-) diff --git a/library/alloc/src/collections/btree/node.rs b/library/alloc/src/collections/btree/node.rs index e3e555a72de0..6a8be441513a 100644 --- a/library/alloc/src/collections/btree/node.rs +++ b/library/alloc/src/collections/btree/node.rs @@ -112,20 +112,8 @@ impl InternalNode { /// /// However, `BoxedNode` contains no information as to which of the two types /// of nodes it actually contains, and, partially due to this lack of information, -/// has no destructor. -struct BoxedNode { - ptr: NonNull>, -} - -impl BoxedNode { - fn from_owned(ptr: NonNull>) -> Self { - BoxedNode { ptr } - } - - fn as_ptr(&self) -> NonNull> { - self.ptr - } -} +/// is not a separate type and has no destructor. +type BoxedNode = NonNull>; /// An owned tree. /// @@ -168,11 +156,6 @@ impl NodeRef { pub fn borrow_valmut(&mut self) -> NodeRef, K, V, Type> { NodeRef { height: self.height, node: self.node, _marker: PhantomData } } - - /// Packs the reference, aware of type and height, into a type-agnostic pointer. - fn into_boxed_node(self) -> BoxedNode { - BoxedNode::from_owned(self.node) - } } impl NodeRef { @@ -181,7 +164,7 @@ impl NodeRef { /// and is the opposite of `pop_internal_level`. pub fn push_internal_level(&mut self) -> NodeRef, K, V, marker::Internal> { let mut new_node = Box::new(unsafe { InternalNode::new() }); - new_node.edges[0].write(BoxedNode::from_owned(self.node)); + new_node.edges[0].write(self.node); let mut new_root = NodeRef::from_new_internal(new_node, self.height + 1); new_root.borrow_mut().first_edge().correct_parent_link(); *self = new_root.forget_type(); @@ -288,13 +271,6 @@ unsafe impl<'a, K: Send + 'a, V: Send + 'a, Type> Send for NodeRef Send for NodeRef, K, V, Type> {} unsafe impl Send for NodeRef {} -impl NodeRef { - /// Unpack a node reference that was packed by `Root::into_boxed_node`. - fn from_boxed_node(boxed_node: BoxedNode, height: usize) -> Self { - NodeRef { height, node: boxed_node.as_ptr(), _marker: PhantomData } - } -} - impl NodeRef { /// Unpack a node reference that was packed as `NodeRef::parent`. fn from_internal(node: NonNull>, height: usize) -> Self { @@ -695,7 +671,7 @@ impl<'a, K: 'a, V: 'a> NodeRef, K, V, marker::Internal> { unsafe { self.reborrow_mut().into_key_area_mut_at(idx).write(key); self.reborrow_mut().into_val_area_mut_at(idx).write(val); - self.reborrow_mut().into_edge_area_mut_at(idx + 1).write(edge.into_boxed_node()); + self.reborrow_mut().into_edge_area_mut_at(idx + 1).write(edge.node); Handle::new_edge(self.reborrow_mut(), idx + 1).correct_parent_link(); } } @@ -710,7 +686,7 @@ impl<'a, K: 'a, V: 'a> NodeRef, K, V, marker::Internal> { *self.reborrow_mut().into_len_mut() += 1; slice_insert(self.reborrow_mut().into_key_area_slice(), 0, key); slice_insert(self.reborrow_mut().into_val_area_slice(), 0, val); - slice_insert(self.reborrow_mut().into_edge_area_slice(), 0, edge.into_boxed_node()); + slice_insert(self.reborrow_mut().into_edge_area_slice(), 0, edge.node); } self.correct_all_childrens_parent_links(); @@ -732,8 +708,8 @@ impl<'a, K: 'a, V: 'a> NodeRef, K, V, marker::LeafOrInternal> { let edge = match self.reborrow_mut().force() { ForceResult::Leaf(_) => None, ForceResult::Internal(internal) => { - let boxed_node = ptr::read(internal.reborrow().edge_at(idx + 1)); - let mut edge = Root::from_boxed_node(boxed_node, internal.height - 1); + let node = ptr::read(internal.reborrow().edge_at(idx + 1)); + let mut edge = Root { node, height: internal.height - 1, _marker: PhantomData }; // In practice, clearing the parent is a waste of time, because we will // insert the node elsewhere and set its parent link again. edge.borrow_mut().clear_parent_link(); @@ -760,9 +736,8 @@ impl<'a, K: 'a, V: 'a> NodeRef, K, V, marker::LeafOrInternal> { let edge = match self.reborrow_mut().force() { ForceResult::Leaf(_) => None, ForceResult::Internal(mut internal) => { - let boxed_node = - slice_remove(internal.reborrow_mut().into_edge_area_slice(), 0); - let mut edge = Root::from_boxed_node(boxed_node, internal.height - 1); + let node = slice_remove(internal.reborrow_mut().into_edge_area_slice(), 0); + let mut edge = Root { node, height: internal.height - 1, _marker: PhantomData }; // In practice, clearing the parent is a waste of time, because we will // insert the node elsewhere and set its parent link again. edge.borrow_mut().clear_parent_link(); @@ -1041,12 +1016,11 @@ impl<'a, K: 'a, V: 'a> Handle, K, V, marker::Internal>, debug_assert!(self.node.len() < CAPACITY); debug_assert!(edge.height == self.node.height - 1); - let boxed_node = edge.into_boxed_node(); unsafe { *self.node.reborrow_mut().into_len_mut() += 1; slice_insert(self.node.reborrow_mut().into_key_area_slice(), self.idx, key); slice_insert(self.node.reborrow_mut().into_val_area_slice(), self.idx, val); - slice_insert(self.node.reborrow_mut().into_edge_area_slice(), self.idx + 1, boxed_node); + slice_insert(self.node.reborrow_mut().into_edge_area_slice(), self.idx + 1, edge.node); self.node.correct_childrens_parent_links((self.idx + 1)..=self.node.len()); } @@ -1135,8 +1109,8 @@ impl Handle, marke // reference (Rust issue #73987) and invalidate any other references // to or inside the array, should any be around. let parent_ptr = NodeRef::as_internal_ptr(&self.node); - let boxed_node = unsafe { (*parent_ptr).edges.get_unchecked(self.idx).assume_init_read() }; - NodeRef::from_boxed_node(boxed_node, self.node.height - 1) + let node = unsafe { (*parent_ptr).edges.get_unchecked(self.idx).assume_init_read() }; + NodeRef { node, height: self.node.height - 1, _marker: PhantomData } } } diff --git a/src/etc/gdb_providers.py b/src/etc/gdb_providers.py index b5ade324bba1..b74d47a80027 100644 --- a/src/etc/gdb_providers.py +++ b/src/etc/gdb_providers.py @@ -216,6 +216,10 @@ def children_of_btree_map(map): internal_type = lookup_type(internal_type_name) return node.cast(internal_type.pointer()) + if node_ptr.type.name.startswith("alloc::collections::btree::node::BoxedNode<"): + # BACKCOMPAT: rust 1.49 + node_ptr = node_ptr["ptr"] + node_ptr = unwrap_unique_or_non_null(node_ptr) leaf = node_ptr.dereference() keys = leaf["keys"] vals = leaf["vals"] @@ -224,9 +228,8 @@ def children_of_btree_map(map): for i in xrange(0, length + 1): if height > 0: - boxed_child_node = edges[i]["value"]["value"] - child_node = unwrap_unique_or_non_null(boxed_child_node["ptr"]) - for child in children_of_node(child_node, height - 1): + child_ptr = edges[i]["value"]["value"] + for child in children_of_node(child_ptr, height - 1): yield child if i < length: # Avoid "Cannot perform pointer math on incomplete type" on zero-sized arrays. @@ -239,9 +242,6 @@ def children_of_btree_map(map): if root.type.name.startswith("core::option::Option<"): root = root.cast(gdb.lookup_type(root.type.name[21:-1])) node_ptr = root["node"] - if node_ptr.type.name.startswith("alloc::collections::btree::node::BoxedNode<"): - node_ptr = node_ptr["ptr"] - node_ptr = unwrap_unique_or_non_null(node_ptr) height = root["height"] for child in children_of_node(node_ptr, height): yield child From 9c8db454af551ca4e9a6d0eb9599ef71e5c579a2 Mon Sep 17 00:00:00 2001 From: Stein Somers Date: Mon, 23 Nov 2020 19:09:23 +0100 Subject: [PATCH 07/12] BTreeMap/BTreeSet: make public doc more consistent --- library/alloc/src/collections/btree/map.rs | 4 ++-- library/alloc/src/collections/btree/set.rs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/library/alloc/src/collections/btree/map.rs b/library/alloc/src/collections/btree/map.rs index 383f4487aff3..1625af4543da 100644 --- a/library/alloc/src/collections/btree/map.rs +++ b/library/alloc/src/collections/btree/map.rs @@ -458,7 +458,7 @@ impl fmt::Debug for RangeMut<'_, K, V> { } impl BTreeMap { - /// Makes a new empty BTreeMap. + /// Makes a new, empty `BTreeMap`. /// /// Does not allocate anything on its own. /// @@ -1924,7 +1924,7 @@ impl Hash for BTreeMap { #[stable(feature = "rust1", since = "1.0.0")] impl Default for BTreeMap { - /// Creates an empty `BTreeMap`. + /// Creates an empty `BTreeMap`. fn default() -> BTreeMap { BTreeMap::new() } diff --git a/library/alloc/src/collections/btree/set.rs b/library/alloc/src/collections/btree/set.rs index 1a807100653b..f4046e87b99a 100644 --- a/library/alloc/src/collections/btree/set.rs +++ b/library/alloc/src/collections/btree/set.rs @@ -220,7 +220,9 @@ impl fmt::Debug for Union<'_, T> { const ITER_PERFORMANCE_TIPPING_SIZE_DIFF: usize = 16; impl BTreeSet { - /// Makes a new `BTreeSet` with a reasonable choice of B. + /// Makes a new, empty `BTreeSet`. + /// + /// Does not allocate anything on its own. /// /// # Examples /// @@ -1121,7 +1123,7 @@ impl<'a, T: 'a + Ord + Copy> Extend<&'a T> for BTreeSet { #[stable(feature = "rust1", since = "1.0.0")] impl Default for BTreeSet { - /// Makes an empty `BTreeSet` with a reasonable choice of B. + /// Creates an empty `BTreeSet`. fn default() -> BTreeSet { BTreeSet::new() } From 7b62e09b0333e268e5546d52f2072eb340cec7ea Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Tue, 24 Nov 2020 00:55:10 +0100 Subject: [PATCH 08/12] Allow disabling TrapUnreachable via -Ztrap-unreachable=no This is useful for embedded targets where small code size is desired. For example, on my project (thumbv7em-none-eabi) this yields a 0.6% code size reduction. --- compiler/rustc_codegen_llvm/src/back/write.rs | 3 ++- compiler/rustc_interface/src/tests.rs | 1 + compiler/rustc_session/src/options.rs | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 6f956c3bcc1c..7407dfc455d8 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -152,7 +152,8 @@ pub fn target_machine_factory( let features = features.join(","); let features = CString::new(features).unwrap(); let abi = SmallCStr::new(&sess.target.llvm_abiname); - let trap_unreachable = sess.target.trap_unreachable; + let trap_unreachable = + sess.opts.debugging_opts.trap_unreachable.unwrap_or(sess.target.trap_unreachable); let emit_stack_size_section = sess.opts.debugging_opts.emit_stack_sizes; let asm_comments = sess.asm_comments(); diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs index 1fc2d281e793..a47f21e47b54 100644 --- a/compiler/rustc_interface/src/tests.rs +++ b/compiler/rustc_interface/src/tests.rs @@ -592,6 +592,7 @@ fn test_debugging_options_tracking_hash() { tracked!(thinlto, Some(true)); tracked!(tune_cpu, Some(String::from("abc"))); tracked!(tls_model, Some(TlsModel::GeneralDynamic)); + tracked!(trap_unreachable, Some(false)); tracked!(treat_err_as_bug, Some(1)); tracked!(unleash_the_miri_inside_of_you, true); tracked!(use_ctors_section, Some(true)); diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 1cd3d11e3215..c203dcf358d0 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -1113,6 +1113,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "choose the TLS model to use (`rustc --print tls-models` for details)"), trace_macros: bool = (false, parse_bool, [UNTRACKED], "for every macro invocation, print its name and arguments (default: no)"), + trap_unreachable: Option = (None, parse_opt_bool, [TRACKED], + "generate trap instructions for unreachable intrinsics (default: use target setting, usually yes)"), treat_err_as_bug: Option = (None, parse_treat_err_as_bug, [TRACKED], "treat error number `val` that occurs as bug"), trim_diagnostic_paths: bool = (true, parse_bool, [UNTRACKED], From 5b1cb0eb8a9eb3dcc69de2133f42d616511481b8 Mon Sep 17 00:00:00 2001 From: Ramon de C Valle Date: Thu, 17 Sep 2020 17:47:56 -0700 Subject: [PATCH 09/12] Add exploit mitigations chapter to the rustc book This section documents the exploit mitigations applicable to the Rust compiler when building programs for the Linux operating system on the AMD64 architecture and equivalent. --- src/doc/rustc/src/SUMMARY.md | 1 + src/doc/rustc/src/exploit-mitigations.md | 693 +++++++++++++++++++++++ src/doc/rustc/src/images/image1.png | Bin 0 -> 15293 bytes src/doc/rustc/src/images/image2.png | Bin 0 -> 28772 bytes src/doc/rustc/src/images/image3.png | Bin 0 -> 72412 bytes 5 files changed, 694 insertions(+) create mode 100644 src/doc/rustc/src/exploit-mitigations.md create mode 100644 src/doc/rustc/src/images/image1.png create mode 100644 src/doc/rustc/src/images/image2.png create mode 100644 src/doc/rustc/src/images/image3.png diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md index 57013e9194bc..dd1986157366 100644 --- a/src/doc/rustc/src/SUMMARY.md +++ b/src/doc/rustc/src/SUMMARY.md @@ -18,4 +18,5 @@ - [Known Issues](targets/known-issues.md) - [Profile-guided Optimization](profile-guided-optimization.md) - [Linker-plugin based LTO](linker-plugin-lto.md) +- [Exploit Mitigations](exploit-mitigations.md) - [Contributing to `rustc`](contributing.md) diff --git a/src/doc/rustc/src/exploit-mitigations.md b/src/doc/rustc/src/exploit-mitigations.md new file mode 100644 index 000000000000..44d5d9564f26 --- /dev/null +++ b/src/doc/rustc/src/exploit-mitigations.md @@ -0,0 +1,693 @@ +# Exploit Mitigations + +This chapter documents the exploit mitigations supported by the Rust +compiler, and is by no means an extensive survey of the Rust programming +language’s security features. + +This chapter is for software engineers working with the Rust programming +language, and assumes prior knowledge of the Rust programming language and +its toolchain. + + +## Introduction + +The Rust programming language provides memory[1] and thread[2] safety +guarantees via its ownership[3], references and borrowing[4], and slice +types[5] features. However, Unsafe Rust[6] introduces unsafe blocks, unsafe +functions and methods, unsafe traits, and new types that are not subject to +the borrowing rules. + +Parts of the Rust standard library are implemented as safe abstractions over +unsafe code (and historically have been vulnerable to memory corruption[7]). +Furthermore, the Rust code and documentation encourage creating safe +abstractions over unsafe code. This can cause a false sense of security if +unsafe code is not properly reviewed and tested. + +Unsafe Rust introduces features that do not provide the same memory and +thread safety guarantees. This causes programs or libraries to be +susceptible to memory corruption (CWE-119)[8] and concurrency issues +(CWE-557)[9]. Modern C and C++ compilers provide exploit mitigations to +increase the difficulty to exploit vulnerabilities resulting from these +issues. Therefore, the Rust compiler must also support these exploit +mitigations in order to mitigate vulnerabilities resulting from the use of +Unsafe Rust. This chapter documents these exploit mitigations and how they +apply to Rust. + +This chapter does not discuss the effectiveness of these exploit mitigations +as they vary greatly depending on several factors besides their design and +implementation, but rather describe what they do, so their effectiveness can +be understood within a given context. + + +## Exploit mitigations + +This section documents the exploit mitigations applicable to the Rust +compiler when building programs for the Linux operating system on the AMD64 +architecture and equivalent.1 + +The Rust Programming Language currently has no specification. The Rust +compiler (i.e., rustc) is the language reference implementation. All +references to “the Rust compiler” in this chapter refer to the language +reference implementation. + +Table I \ +Summary of exploit mitigations supported by the Rust compiler when building +programs for the Linux operating system on the AMD64 architecture and +equivalent. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Exploit mitigation + Supported and enabled by default + Since +
Position-independent executable + Yes + 0.12.0 (2014-10-09) +
Integer overflow checks + Yes (enabled when debug assertions are enabled, and disabled when debug assertions are disabled) + 1.1.0 (2015-06-25) +
Non-executable memory regions + Yes + 1.8.0 (2016-04-14) +
Stack clashing protection + Yes + 1.20.0 (2017-08-31) +
Read-only relocations and immediate binding + Yes + 1.21.0 (2017-10-12) +
Heap corruption protection + Yes + 1.32.0 (2019-01-17) (via operating system default or specified allocator) +
Stack smashing protection + No + +
Forward-edge control flow protection + No + +
Backward-edge control flow protection (e.g., shadow and safe stack) + No + +
+ +1\. See + +for a list of targets and their default options. + + +### Position-independent executable + +Position-independent executable increases the difficulty of the use of code +reuse exploitation techniques, such as return-oriented programming (ROP) and +variants, by generating position-independent code for the executable, and +instructing the dynamic linker to load it similarly to a shared object at a +random load address, thus also benefiting from address-space layout +randomization (ASLR). This is also referred to as “full ASLR”. + +The Rust compiler supports position-independent executable, and enables it +by default since version 0.12.0 (2014-10-09)[10]–[13]. + +```text +$ readelf -h target/release/hello-rust | grep Type: + Type: DYN (Shared object file) +``` +Fig. 1. Checking if an executable is a position-independent executable. + +An executable with an object type of `ET_DYN` (i.e., shared object) and not +`ET_EXEC` (i.e., executable) is a position-independent executable (see Fig. +1). + + +### Integer overflow checks + +Integer overflow checks protects programs from undefined and unintended +behavior (which may cause vulnerabilities) by checking for results of signed +and unsigned integer computations that cannot be represented in their type, +resulting in an overflow or wraparound. + +The Rust compiler supports integer overflow checks, and enables it when +debug assertions are enabled since version 1.1.0 (2015-06-25)[14]–[20]. + +```compile_fail +fn main() { + let u: u8 = 255; + println!("u: {}", u + 1); +} +``` +Fig. 2. hello-rust-integer program. + +```text +$ cargo run + Compiling hello-rust-integer v0.1.0 (/home/rcvalle/hello-rust-integer) + Finished dev [unoptimized + debuginfo] target(s) in 0.23s + Running `target/debug/hello-rust-integer` +thread 'main' panicked at 'attempt to add with overflow', src/main.rs:3:23 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. +``` +Fig. 3. Build and execution of hello-rust-integer with debug assertions +enabled. + +```text +$ cargo run --release + Compiling hello-rust-integer v0.1.0 (/home/rcvalle/hello-rust-integer) + Finished release [optimized] target(s) in 0.23s + Running `target/release/hello-rust-integer` +u: 0 +``` +Fig. 4. Build and execution of hello-rust-integer with debug assertions +disabled. + +Integer overflow checks are enabled when debug assertions are enabled (see +Fig. 3), and disabled when debug assertions are disabled (see Fig. 4). To +enable integer overflow checks independently, use the option to control +integer overflow checks, scoped attributes, or explicit checking methods +such as `checked_add`2. + +It is recommended that explicit wrapping methods such as `wrapping_add` be +used when wrapping semantics are intended, and that explicit checking and +wrapping methods always be used when using Unsafe Rust. + +2\. See +for more information on the checked, overflowing, saturating, and wrapping +methods (using u32 as an example). + + +### Non-executable memory regions + +Non-executable memory regions increase the difficulty of exploitation by +limiting the memory regions that can be used to execute arbitrary code. Most +modern processors provide support for the operating system to mark memory +regions as non executable, but it was previously emulated by software, such +as in grsecurity/PaX's +[PAGEEXEC](https://pax.grsecurity.net/docs/pageexec.txt) and +[SEGMEXEC](https://pax.grsecurity.net/docs/segmexec.txt), on processors that +did not provide support for it. This is also known as “No Execute (NX) Bit”, +“Execute Disable (XD) Bit”, “Execute Never (XN) Bit”, and others. + +The Rust compiler supports non-executable memory regions, and enables it by +default since its initial release, version 0.1 (2012-01-20)[21], [22], but +has regressed since then[23]–[25], and enforced by default since version +1.8.0 (2016-04-14)[25]. + +```text +$ readelf -l target/release/hello-rust | grep -A 1 GNU_STACK + GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 + 0x0000000000000000 0x0000000000000000 RW 0x10 +``` +Fig. 5. Checking if non-executable memory regions are enabled for a given +binary. + +The presence of an element of type `PT_GNU_STACK` in the program header +table with the `PF_X` (i.e., executable) flag unset indicates non-executable +memory regions3 are enabled for a given binary (see Fig. 5). +Conversely, the presence of an element of type `PT_GNU_STACK` in the program +header table with the `PF_X` flag set or the absence of an element of type +`PT_GNU_STACK` in the program header table indicates non-executable memory +regions are not enabled for a given binary. + +3\. See the Appendix section for more information on why it +affects other memory regions besides the stack. + + +### Stack clashing protection + +Stack clashing protection protects the stack from overlapping with another +memory region—allowing arbitrary data in both to be overwritten using each +other—by reading from the stack pages as the stack grows to cause a page +fault when attempting to read from the guard page/region. This is also +referred to as “stack probes” or “stack probing”. + +The Rust compiler supports stack clashing protection via stack probing, and +enables it by default since version 1.20.0 (2017-08-31)[26]–[29]. + +![Screenshot of IDA Pro listing cross references to __rust_probestack in hello-rust.](images/image1.png "Cross references to __rust_probestack in hello-rust.") +Fig. 6. IDA Pro listing cross references to `__rust_probestack` in +hello-rust. + +```rust +fn hello() { + println!("Hello, world!"); +} + +fn main() { + let _: [u64; 1024] = [0; 1024]; + hello(); +} +``` +Fig 7. Modified hello-rust. + +![Screenshot of IDA Pro listing cross references to __rust_probestack in modified hello-rust.](images/image2.png "Cross references to __rust_probestack in modified hello-rust.") +Fig. 8. IDA Pro listing cross references to `__rust_probestack` in modified +hello-rust. + +To check if stack clashing protection is enabled for a given binary, search +for cross references to `__rust_probestack`. The `__rust_probestack` is +called in the prologue of functions whose stack size is larger than a page +size (see Fig. 6), and can be forced for illustration purposes by modifying +the hello-rust example as seen in Fig. 7 and Fig. 8. + + +### Read-only relocations and immediate binding + +**Read-only relocations** protect segments containing relocations and +relocation information (i.e., `.init_array`, `.fini_array`, `.dynamic`, and +`.got`) from being overwritten by marking these segments read only. This is +also referred to as “partial RELRO”. + +The Rust compiler supports read-only relocations, and enables it by default +since version 1.21.0 (2017-10-12)[30], [31]. + +```text +$ readelf -l target/release/hello-rust | grep GNU_RELRO + GNU_RELRO 0x000000000002ee00 0x000000000002fe00 0x000000000002fe00 +``` +Fig. 9. Checking if read-only relocations is enabled for a given binary. + +The presence of an element of type `PT_GNU_RELRO` in the program header +table indicates read-only relocations are enabled for a given binary (see +Fig. 9). Conversely, the absence of an element of type `PT_GNU_RELRO` in the +program header table indicates read-only relocations are not enabled for a +given binary. + +**Immediate binding** protects additional segments containing relocations +(i.e., `.got.plt`) from being overwritten by instructing the dynamic linker +to perform all relocations before transferring control to the program during +startup, so all segments containing relocations can be marked read only +(when combined with read-only relocations). This is also referred to as +“full RELRO”. + +The Rust compiler supports immediate binding, and enables it by default +since version 1.21.0 (2017-10-12)[30], [31]. + +```text +$ readelf -d target/release/hello-rust | grep BIND_NOW + 0x000000000000001e (FLAGS) BIND_NOW +``` +Fig. 10. Checking if immediate binding is enabled for a given binary. + +The presence of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW` +flag4 in the dynamic section indicates immediate +binding is enabled for a given binary (see Fig. 10). Conversely, the absence +of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW` flag in the +dynamic section indicates immediate binding is not enabled for a given +binary. + +The presence of both an element of type `PT_GNU_RELRO` in the program header +table and of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW` +flag in the dynamic section indicates full RELRO is enabled for a given +binary (see Fig. 9 and Fig. 10). + +4\. And the `DF_1_NOW` flag for some link editors. + + +### Heap corruption protection + +Heap corruption protection protects memory allocated dynamically by +performing several checks, such as checks for corrupted links between list +elements, invalid pointers, invalid sizes, double/multiple “frees” of the +same memory allocated, and many corner cases of these. These checks are +implementation specific, and vary per allocator. + +[ARM Memory Tagging Extension +(MTE)](https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/enhancing-memory-safety), +when available, will provide hardware assistance for a probabilistic +mitigation to detect memory safety violations by tagging memory allocations, +and automatically checking that the correct tag is used on every memory +access. + +Rust’s default allocator has historically been +[jemalloc](http://jemalloc.net/), and it has long been the cause of issues +and the subject of much discussion[32]–[38]. Consequently, it has been +removed as the default allocator in favor of the operating system’s standard +C library default allocator5 since version 1.32.0 +(2019-01-17)[39]. + +```ignore +fn main() { + let mut x = Box::new([0; 1024]); + + for i in 0..1026 { + unsafe { + let elem = x.get_unchecked_mut(i); + *elem = 0x4141414141414141u64; + } + } +} +``` +Fig. 11. hello-rust-heap program. + +```text +$ cargo run + Compiling hello-rust-heap v0.1.0 (/home/rcvalle/hello-rust-heap) + Finished dev [unoptimized + debuginfo] target(s) in 0.25s + Running `target/debug/hello-rust-heap` +free(): invalid next size (normal) +Aborted +``` +Fig. 12. Build and execution of hello-rust-heap with debug assertions +enabled. + +```text +$ cargo run --release + Compiling hello-rust-heap v0.1.0 (/home/rcvalle/hello-rust-heap) + Finished release [optimized] target(s) in 0.25s + Running `target/release/hello-rust-heap` +free(): invalid next size (normal) +Aborted +``` +Fig. 13. Build and execution of hello-rust-heap with debug assertions +disabled. + +Heap corruption checks are being performed when using the default allocator +(i.e., the GNU Allocator) as seen in Fig. 12 and Fig. 13. + +5\. Linux's standard C library default allocator is the GNU +Allocator, which is derived from ptmalloc (pthreads malloc) by Wolfram +Gloger, which in turn is derived from dlmalloc (Doug Lea malloc) by Doug +Lea. + + +### Stack smashing protection + +Stack smashing protection protects programs from stack-based buffer +overflows by inserting a random guard value between local variables and the +saved return instruction pointer, and checking if this value has changed +when returning from a function. This is also known as “Stack Protector” or +“Stack Smashing Protector (SSP)”. + +The Rust compiler does not support stack smashing protection. However, more +comprehensive alternatives to stack smashing protection exist, such as +shadow and safe stack (see backward-edge control flow protection). + +![Screenshot of IDA Pro listing cross references to __stack_chk_fail in hello-rust.](images/image3.png "Cross references to __stack_chk_fail in hello-rust.") +Fig. 14. IDA Pro listing cross references to `__stack_chk_fail` in +hello-rust. + +To check if stack smashing protection is enabled for a given binary, search +for cross references to `__stack_chk_fail`. The only cross references to +`__stack_chk_fail` in hello-rust are from the statically-linked libbacktrace +library (see Fig. 14). + + +### Forward-edge control flow protection + +Forward-edge control flow protection protects programs from having its +control flow changed/hijacked by performing checks to ensure that +destinations of indirect branches are one of their valid destinations in the +control flow graph. The comprehensiveness of these checks vary per +implementation. This is also known as “forward-edge control flow integrity +(CFI)”. + +Newer processors provide hardware assistance for forward-edge control flow +protection, such as ARM Branch Target Identification (BTI), ARM Pointer +Authentication, and Intel Indirect Branch Tracking (IBT) as part of Intel +Control-flow Enforcement Technology (CET). However, ARM BTI and Intel IBT +-based implementations are less comprehensive than software-based +implementations such as [LLVM ControlFlowIntegrity +(CFI)](https://clang.llvm.org/docs/ControlFlowIntegrity.html), and the +commercially available [grsecurity/PaX Reuse Attack Protector +(RAP)](https://grsecurity.net/rap_faq). + +The Rust compiler does not support forward-edge control flow protection on +Linux6. There is work currently ongoing to add support +for the [sanitizers](https://github.com/google/sanitizers)[40], which may or +may not include support for LLVM CFI. + +```text +$ readelf -s target/release/hello-rust | grep __cfi_init +``` +Fig. 15. Checking if LLVM CFI is enabled for a given binary. + +The presence of the `__cfi_init` symbol (and references to `__cfi_check`) +indicates that LLVM CFI (i.e., forward-edge control flow protection) is +enabled for a given binary. Conversely, the absence of the `__cfi_init` +symbol (and references to `__cfi_check`) indicates that LLVM CFI is not +enabled for a given binary (see Fig. 15). + +6\. It supports Control Flow Guard (CFG) on Windows (see +). + + +### Backward-edge control flow protection + +**Shadow stack** protects saved return instruction pointers from being +overwritten by storing a copy of them on a separate (shadow) stack, and +using these copies as authoritative values when returning from functions. +This is also known as “ShadowCallStack” and “Return Flow Guard”, and is +considered an implementation of backward-edge control flow protection (or +“backward-edge CFI”). + +**Safe stack** protects not only the saved return instruction pointers, but +also register spills and some local variables from being overwritten by +storing unsafe variables, such as large arrays, on a separate (unsafe) +stack, and using these unsafe variables on the separate stack instead. This +is also known as “SafeStack”, and is also considered an implementation of +backward-edge control flow protection. + +Both shadow and safe stack are intended to be a more comprehensive +alternatives to stack smashing protection as they protect the saved return +instruction pointers (and other data in the case of safe stack) from +arbitrary writes and non-linear out-of-bounds writes. + +Newer processors provide hardware assistance for backward-edge control flow +protection, such as ARM Pointer Authentication, and Intel Shadow Stack as +part of Intel CET. + +The Rust compiler does not support shadow or safe stack. There is work +currently ongoing to add support for the sanitizers[40], which may or may +not include support for safe stack7. + +```text +$ readelf -s target/release/hello-rust | grep __safestack_init +``` +Fig. 16. Checking if LLVM SafeStack is enabled for a given binary. + +The presence of the `__safestack_init` symbol indicates that LLVM SafeStack +is enabled for a given binary. Conversely, the absence of the +`__safestack_init` symbol indicates that LLVM SafeStack is not enabled for a +given binary (see Fig. 16). + +7\. The shadow stack implementation for the AMD64 +architecture and equivalent in LLVM was removed due to performance and +security issues. + + +## Appendix + +As of the latest version of the [Linux Standard Base (LSB) Core +Specification](https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/progheader.html), +the `PT_GNU_STACK` program header indicates whether the stack should be +executable, and the absence of this header indicates that the stack should +be executable. However, the Linux kernel currently sets the +`READ_IMPLIES_EXEC` personality upon loading any executable with the +`PT_GNU_STACK` program header and the `PF_X `flag set or with the absence of +this header, resulting in not only the stack, but also all readable virtual +memory mappings being executable. + +An attempt to fix this [was made in +2012](https://lore.kernel.org/lkml/f298f914-2239-44e4-8aa1-a51282e7fac0@zmail15.collab.prod.int.phx2.redhat.com/), +and another [was made in +2020](https://lore.kernel.org/kernel-hardening/20200327064820.12602-1-keescook@chromium.org/). +The former never landed, and the latter partially fixed it, but introduced +other issues—the absence of the `PT_GNU_STACK` program header still causes +not only the stack, but also all readable virtual memory mappings to be +executable in some architectures, such as IA-32 and equivalent (or causes +the stack to be non-executable in some architectures, such as AMD64 and +equivalent, contradicting the LSB). + +The `READ_IMPLIES_EXEC` personality needs to be completely separated from +the `PT_GNU_STACK` program header by having a separate option for it (or +setarch -X could just be used whenever `READ_IMPLIES_EXEC` is needed), and +the absence of the `PT_GNU_STACK` program header needs to have more secure +defaults (unrelated to `READ_IMPLIES_EXEC`). + + +## References + +1. D. Hosfelt. “Fearless security: memory safety.” Mozilla Hacks. + . + +2. D. Hosfelt. “Fearless security: thread safety.” Mozilla Hacks. + . + +3. S. Klabnik and C. Nichols. “What Is Ownership?.” The Rust Programming + Language. . + +4. S. Klabnik and C. Nichols. “References and Borrowing.” The Rust + Programming Language. + . + +5. S. Klabnik and C. Nichols. “The Slice Type.” The Rust Programming + Language. . + +6. S. Klabnik and C. Nichols. “Unsafe Rust.” The Rust Programming Language. + . + +7. S. Davidoff. “How Rust’s standard library was vulnerable for years and + nobody noticed.” Medium. + . + +8. “Improper restriction of operations within the bounds of a memory buffer + (CWE-119).” MITRE CWE List. + . + +9. “Concurrency issues (CWE-557).” MITRE CWE List. + . + +10. K. McAllister. “Memory exploit mitigations #15179.” GitHub. + . + +11. K. McAllister. “RFC: Memory exploit mitigation #145.” GitHub. + . + +12. K. McAllister. “RFC: Memory exploit mitigation.” GitHub. + . + +13. D. Micay. “Enable PIE by default on Linux for full ASLR #16340.” GitHub. + . + +14. N. Matsakis. “Integer overflow #560.” GitHub. + . + +15. G. Lehel and N. Matsakis. “Integer overflow.” GitHub. + . + +16. A. Turon. “Tracking issue for integer overflow (RFC 560) #22020.” + GitHub. . + +17. H. Wilson. “Myths and legends about integer overflow in Rust.” Huon on + the Internet. + . + +18. B. Anderson. “Stabilize -C overflow-checks #1535.” GitHub. + . + +19. B. Anderson. “Stable overflow checks.” GitHub. + . + +20. N. Froyd. “Add -C overflow-checks option #40037.” GitHub. + . + +21. R. Á. de Espíndola. “rustc requires executable stack #798.” GitHub. + . + +22. A. Seipp. “Make sure librustrt.so is linked with a non-executable stack. + #1066.” GitHub. . + +23. D. Micay. “Rust binaries should not have an executable stack #5643.” + GitHub. . + +24. D. Micay. “Mark the assembly object stacks as non-executable #5647.” + GitHub. . + +25. A. Clark. “Explicitly disable stack execution on linux and bsd #30859.” + GitHub. . + +26. “Replace stack overflow checking with stack probes #16012.” GitHub. + . + +27. B. Striegel. “Extend stack probe support to non-tier-1 platforms, and + clarify policy for mitigating LLVM-dependent unsafety #43241.” GitHub. + . + +28. A. Crichton. “rustc: Implement stack probes for x86 #42816.” GitHub. + . + +29. A. Crichton. “Add \_\_rust\_probestack intrinsic #175.” GitHub. + . + +30. B. Anderson. “Consider applying -Wl,-z,relro or -Wl,-z,relro,-z,now by + default #29877.” GitHub. . + +31. J. Löthberg. “Add support for full RELRO #43170.” GitHub. + . + +32. N. Matsakis. “Allocators in Rust.” Baby Steps. + . + +33. A. Crichton. “RFC: Allow changing the default allocator #1183.” GitHub. + . + +34. A. Crichton. “RFC: Swap out jemalloc.” GitHub. + . + +35. A. Crichton. “Tracking issue for changing the global, default allocator + (RFC 1974) #27389.” GitHub. + . + +36. S. Fackler. “Prepare global allocators for stabilization #1974.” GitHub. + . + +37. A. Crichton. “RFC: Global allocators.” GitHub. + . + +38. B. Anderson. “Switch the default global allocator to System, remove + alloc\_jemalloc, use jemallocator in rustc #36963.” GitHub. + . + +39. A. Crichton. “Remove the alloc\_jemalloc crate #55238.” GitHub. + . + +40. J. Aparicio. 2017. “Tracking issue for sanitizer support #39699.” + . diff --git a/src/doc/rustc/src/images/image1.png b/src/doc/rustc/src/images/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2d3fd4f43c6727b5042114519e12917242c3c6 GIT binary patch literal 15293 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 F0szf{k4pdm literal 0 HcmV?d00001 diff --git a/src/doc/rustc/src/images/image3.png b/src/doc/rustc/src/images/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..a49e14b5ed22298a41d2e7bdd4b56a396b42fb94 GIT binary patch literal 72412 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 literal 0 HcmV?d00001 From b7593e5070e71af5d43b29c84611a836b8d0fdcc Mon Sep 17 00:00:00 2001 From: mendess Date: Tue, 24 Nov 2020 09:35:08 +0000 Subject: [PATCH 10/12] Add note to use nightly when using expr in const generics --- compiler/rustc_resolve/src/diagnostics.rs | 1 + .../array-size-in-generic-struct-param.min.stderr | 2 ++ src/test/ui/const-generics/const-arg-in-const-arg.min.stderr | 4 ++++ .../feature-gate-const_evaluatable_checked.min.stderr | 1 + .../const_evaluatable_checked/simple.min.stderr | 2 ++ .../const_evaluatable_checked/simple_fail.min.stderr | 1 + .../generic-function-call-in-array-length.min.stderr | 2 ++ .../ui/const-generics/generic-sum-in-array-length.min.stderr | 2 ++ .../ui/const-generics/issue-61522-array-len-succ.min.stderr | 2 ++ src/test/ui/const-generics/issues/issue-61747.min.stderr | 1 + src/test/ui/const-generics/issues/issue-61935.min.stderr | 1 + src/test/ui/const-generics/issues/issue-62220.min.stderr | 1 + src/test/ui/const-generics/issues/issue-62456.min.stderr | 1 + src/test/ui/const-generics/issues/issue-66205.min.stderr | 1 + src/test/ui/const-generics/issues/issue-68366.min.stderr | 1 + src/test/ui/const-generics/issues/issue-68977.min.stderr | 2 ++ src/test/ui/const-generics/issues/issue-72787.min.stderr | 4 ++++ .../issues/issue-72819-generic-in-const-eval.min.stderr | 1 + .../issues/issue-76701-ty-param-in-const.min.stderr | 1 + src/test/ui/const-generics/macro_rules-braces.min.stderr | 4 ++++ .../min_const_generics/complex-expression.stderr | 4 ++++ src/test/ui/const-generics/wf-misc.min.stderr | 2 ++ 22 files changed, 41 insertions(+) diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 67491b5bf7e4..70ab59970d8a 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -480,6 +480,7 @@ impl<'a> Resolver<'a> { "const parameters may only be used as standalone arguments, i.e. `{}`", name )); + err.note("use feature(const_generics) and feature(const_evaluatable_checked) to enable this"); } err diff --git a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr index cfaacf7a5be3..ae3b593f9d31 100644 --- a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr +++ b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr @@ -5,6 +5,7 @@ LL | struct ArithArrayLen([u32; 0 + N]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/array-size-in-generic-struct-param.rs:20:15 @@ -13,6 +14,7 @@ LL | arr: [u8; CFG.arr_size], | ^^^ cannot perform const operation using `CFG` | = help: const parameters may only be used as standalone arguments, i.e. `CFG` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: `Config` is forbidden as the type of a const generic parameter --> $DIR/array-size-in-generic-struct-param.rs:18:21 diff --git a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr index 7dfe250b78e0..9e3c07558f1d 100644 --- a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr +++ b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr @@ -13,6 +13,7 @@ LL | let _: [u8; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:25:23 @@ -21,6 +22,7 @@ LL | let _ = [0; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:30:24 @@ -37,6 +39,7 @@ LL | let _: Foo<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:36:27 @@ -53,6 +56,7 @@ LL | let _ = Foo::<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error[E0658]: a non-static lifetime is not allowed in a `const` --> $DIR/const-arg-in-const-arg.rs:16:23 diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr index 359c2d2a22f0..8da75e953ff9 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr @@ -5,6 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr index 46485262cc46..91438ee1f65c 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr @@ -5,6 +5,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/simple.rs:8:35 @@ -13,6 +14,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr index 981d993f5897..dd2164ee45a4 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr @@ -5,6 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr index 84449018e460..9d2524b60952 100644 --- a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr @@ -5,6 +5,7 @@ LL | fn bar() -> [u32; foo(N)] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/generic-function-call-in-array-length.rs:12:13 @@ -13,6 +14,7 @@ LL | [0; foo(N)] | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr index d3f7143327ea..5a0e72524fb2 100644 --- a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr @@ -5,6 +5,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `A` | = help: const parameters may only be used as standalone arguments, i.e. `A` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/generic-sum-in-array-length.rs:7:57 @@ -13,6 +14,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `B` | = help: const parameters may only be used as standalone arguments, i.e. `B` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr index 526807f0a247..0ec673593d0b 100644 --- a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr +++ b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr @@ -5,6 +5,7 @@ LL | pub struct MyArray([u8; COUNT + 1]); | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/issue-61522-array-len-succ.rs:12:30 @@ -13,6 +14,7 @@ LL | fn inner(&self) -> &[u8; COUNT + 1] { | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-61747.min.stderr b/src/test/ui/const-generics/issues/issue-61747.min.stderr index b176f9d1c75a..1e4fdd885ec8 100644 --- a/src/test/ui/const-generics/issues/issue-61747.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61747.min.stderr @@ -5,6 +5,7 @@ LL | fn successor() -> Const<{C + 1}> { | ^ cannot perform const operation using `C` | = help: const parameters may only be used as standalone arguments, i.e. `C` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-61935.min.stderr b/src/test/ui/const-generics/issues/issue-61935.min.stderr index 9e31466259fd..cf1ff180935e 100644 --- a/src/test/ui/const-generics/issues/issue-61935.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61935.min.stderr @@ -5,6 +5,7 @@ LL | Self:FooImpl<{N==0}> | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62220.min.stderr b/src/test/ui/const-generics/issues/issue-62220.min.stderr index 3bd127ee74a5..dd8fbfebd2f6 100644 --- a/src/test/ui/const-generics/issues/issue-62220.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62220.min.stderr @@ -5,6 +5,7 @@ LL | pub type TruncatedVector = Vector; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62456.min.stderr b/src/test/ui/const-generics/issues/issue-62456.min.stderr index c73f62a4a07d..ac11191b119c 100644 --- a/src/test/ui/const-generics/issues/issue-62456.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62456.min.stderr @@ -5,6 +5,7 @@ LL | let _ = [0u64; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-66205.min.stderr b/src/test/ui/const-generics/issues/issue-66205.min.stderr index 282f72be6da6..f3e3eb6c5a65 100644 --- a/src/test/ui/const-generics/issues/issue-66205.min.stderr +++ b/src/test/ui/const-generics/issues/issue-66205.min.stderr @@ -5,6 +5,7 @@ LL | fact::<{ N - 1 }>(); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-68366.min.stderr b/src/test/ui/const-generics/issues/issue-68366.min.stderr index b900a0d096ac..7dcb3ea1acb0 100644 --- a/src/test/ui/const-generics/issues/issue-68366.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68366.min.stderr @@ -5,6 +5,7 @@ LL | impl Collatz<{Some(N)}> {} | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error[E0207]: the const parameter `N` is not constrained by the impl trait, self type, or predicates --> $DIR/issue-68366.rs:12:13 diff --git a/src/test/ui/const-generics/issues/issue-68977.min.stderr b/src/test/ui/const-generics/issues/issue-68977.min.stderr index 7828d8593949..67ca519de2c2 100644 --- a/src/test/ui/const-generics/issues/issue-68977.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68977.min.stderr @@ -5,6 +5,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^ cannot perform const operation using `INT_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `INT_BITS` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/issue-68977.rs:29:28 @@ -13,6 +14,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^^ cannot perform const operation using `FRAC_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `FRAC_BITS` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-72787.min.stderr b/src/test/ui/const-generics/issues/issue-72787.min.stderr index d960d9513b75..2a7672d0c892 100644 --- a/src/test/ui/const-generics/issues/issue-72787.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72787.min.stderr @@ -5,6 +5,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `LHS` | = help: const parameters may only be used as standalone arguments, i.e. `LHS` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:11:24 @@ -13,6 +14,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `RHS` | = help: const parameters may only be used as standalone arguments, i.e. `RHS` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:25 @@ -21,6 +23,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `I` | = help: const parameters may only be used as standalone arguments, i.e. `I` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:36 @@ -29,6 +32,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `J` | = help: const parameters may only be used as standalone arguments, i.e. `J` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error[E0283]: type annotations needed --> $DIR/issue-72787.rs:22:26 diff --git a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr index 9fec3eb946d8..f7c4109e5529 100644 --- a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr @@ -5,6 +5,7 @@ LL | where Assert::<{N < usize::max_value() / 2}>: IsTrue, | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr index c10db84ea6ec..57514736121c 100644 --- a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr +++ b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr @@ -13,6 +13,7 @@ LL | fn const_param() -> [u8; N + 1] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/macro_rules-braces.min.stderr b/src/test/ui/const-generics/macro_rules-braces.min.stderr index c6425edc10f1..b23053756d14 100644 --- a/src/test/ui/const-generics/macro_rules-braces.min.stderr +++ b/src/test/ui/const-generics/macro_rules-braces.min.stderr @@ -27,6 +27,7 @@ LL | let _: foo!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:41:19 @@ -35,6 +36,7 @@ LL | let _: bar!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:46:20 @@ -43,6 +45,7 @@ LL | let _: baz!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:51:19 @@ -51,6 +54,7 @@ LL | let _: biz!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 6 previous errors diff --git a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr index a8de987e1675..d8debd2b9304 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr +++ b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr @@ -5,6 +5,7 @@ LL | struct Break0([u8; { N + 1 }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:14:40 @@ -13,6 +14,7 @@ LL | struct Break1([u8; { { N } }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:18:17 @@ -21,6 +23,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:23:17 @@ -29,6 +32,7 @@ LL | let _ = [0; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:27:45 diff --git a/src/test/ui/const-generics/wf-misc.min.stderr b/src/test/ui/const-generics/wf-misc.min.stderr index 935f12dd2c30..296b1c15cf01 100644 --- a/src/test/ui/const-generics/wf-misc.min.stderr +++ b/src/test/ui/const-generics/wf-misc.min.stderr @@ -5,6 +5,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: generic parameters may not be used in const operations --> $DIR/wf-misc.rs:17:21 @@ -13,6 +14,7 @@ LL | let _: Const::<{N + 1}>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` + = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this error: aborting due to 2 previous errors From af978e3b63dce24e81a9ebecde08c9116f871a4e Mon Sep 17 00:00:00 2001 From: mendess Date: Tue, 24 Nov 2020 10:28:18 +0000 Subject: [PATCH 11/12] Requested changes --- compiler/rustc_resolve/src/diagnostics.rs | 2 +- .../array-size-in-generic-struct-param.min.stderr | 4 ++-- .../const-generics/const-arg-in-const-arg.min.stderr | 11 +++++++---- .../const-argument-if-length.min.stderr | 1 + .../feature-gate-const_evaluatable_checked.min.stderr | 2 +- .../const_evaluatable_checked/simple.min.stderr | 4 ++-- .../const_evaluatable_checked/simple_fail.min.stderr | 2 +- .../generic-function-call-in-array-length.min.stderr | 4 ++-- .../generic-sum-in-array-length.min.stderr | 4 ++-- .../intrinsics-type_name-as-const-argument.min.stderr | 1 + .../issue-61522-array-len-succ.min.stderr | 4 ++-- src/test/ui/const-generics/issue-67375.min.stderr | 1 + src/test/ui/const-generics/issue-67945-1.min.stderr | 2 ++ src/test/ui/const-generics/issue-67945-2.min.stderr | 2 ++ .../ui/const-generics/issues/issue-61747.min.stderr | 2 +- .../ui/const-generics/issues/issue-61935.min.stderr | 2 +- .../ui/const-generics/issues/issue-62220.min.stderr | 2 +- .../ui/const-generics/issues/issue-62456.min.stderr | 2 +- .../ui/const-generics/issues/issue-64494.min.stderr | 2 ++ .../ui/const-generics/issues/issue-66205.min.stderr | 2 +- .../ui/const-generics/issues/issue-68366.min.stderr | 2 +- .../ui/const-generics/issues/issue-68977.min.stderr | 4 ++-- .../ui/const-generics/issues/issue-72787.min.stderr | 8 ++++---- .../issue-72819-generic-in-const-eval.min.stderr | 2 +- .../issues/issue-76701-ty-param-in-const.min.stderr | 3 ++- .../ui/const-generics/macro_rules-braces.min.stderr | 8 ++++---- .../min_const_generics/complex-expression.stderr | 11 +++++++---- .../min_const_generics/self-ty-in-const-1.stderr | 1 + .../params-in-ct-in-ty-param-lazy-norm.min.stderr | 1 + src/test/ui/const-generics/wf-misc.min.stderr | 4 ++-- 30 files changed, 59 insertions(+), 41 deletions(-) diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 70ab59970d8a..9f3e8be0f7a3 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -480,8 +480,8 @@ impl<'a> Resolver<'a> { "const parameters may only be used as standalone arguments, i.e. `{}`", name )); - err.note("use feature(const_generics) and feature(const_evaluatable_checked) to enable this"); } + err.note("use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions"); err } diff --git a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr index ae3b593f9d31..59f458b35aac 100644 --- a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr +++ b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr @@ -5,7 +5,7 @@ LL | struct ArithArrayLen([u32; 0 + N]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/array-size-in-generic-struct-param.rs:20:15 @@ -14,7 +14,7 @@ LL | arr: [u8; CFG.arr_size], | ^^^ cannot perform const operation using `CFG` | = help: const parameters may only be used as standalone arguments, i.e. `CFG` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: `Config` is forbidden as the type of a const generic parameter --> $DIR/array-size-in-generic-struct-param.rs:18:21 diff --git a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr index 9e3c07558f1d..136a4ddf7359 100644 --- a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr +++ b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr @@ -5,6 +5,7 @@ LL | let _: [u8; foo::()]; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:15:23 @@ -13,7 +14,7 @@ LL | let _: [u8; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:25:23 @@ -22,7 +23,7 @@ LL | let _ = [0; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:30:24 @@ -31,6 +32,7 @@ LL | let _: Foo<{ foo::() }>; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:31:24 @@ -39,7 +41,7 @@ LL | let _: Foo<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:36:27 @@ -48,6 +50,7 @@ LL | let _ = Foo::<{ foo::() }>; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:37:27 @@ -56,7 +59,7 @@ LL | let _ = Foo::<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0658]: a non-static lifetime is not allowed in a `const` --> $DIR/const-arg-in-const-arg.rs:16:23 diff --git a/src/test/ui/const-generics/const-argument-if-length.min.stderr b/src/test/ui/const-generics/const-argument-if-length.min.stderr index bce701ade865..d85586ea0b79 100644 --- a/src/test/ui/const-generics/const-argument-if-length.min.stderr +++ b/src/test/ui/const-generics/const-argument-if-length.min.stderr @@ -5,6 +5,7 @@ LL | pad: [u8; is_zst::()], | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0277]: the size for values of type `T` cannot be known at compilation time --> $DIR/const-argument-if-length.rs:17:12 diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr index 8da75e953ff9..70b71c041f13 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr @@ -5,7 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr index 91438ee1f65c..efee04598aba 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr @@ -5,7 +5,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/simple.rs:8:35 @@ -14,7 +14,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr index dd2164ee45a4..99e45fdece2b 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr @@ -5,7 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr index 9d2524b60952..a42375289bcd 100644 --- a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr @@ -5,7 +5,7 @@ LL | fn bar() -> [u32; foo(N)] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/generic-function-call-in-array-length.rs:12:13 @@ -14,7 +14,7 @@ LL | [0; foo(N)] | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr index 5a0e72524fb2..5b393351d5e8 100644 --- a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr @@ -5,7 +5,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `A` | = help: const parameters may only be used as standalone arguments, i.e. `A` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/generic-sum-in-array-length.rs:7:57 @@ -14,7 +14,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `B` | = help: const parameters may only be used as standalone arguments, i.e. `B` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr index 20a8d9fdaab5..8f38a55b19b7 100644 --- a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr +++ b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr @@ -5,6 +5,7 @@ LL | T: Trait<{std::intrinsics::type_name::()}> | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: `&'static str` is forbidden as the type of a const generic parameter --> $DIR/intrinsics-type_name-as-const-argument.rs:10:22 diff --git a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr index 0ec673593d0b..94968a491384 100644 --- a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr +++ b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr @@ -5,7 +5,7 @@ LL | pub struct MyArray([u8; COUNT + 1]); | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-61522-array-len-succ.rs:12:30 @@ -14,7 +14,7 @@ LL | fn inner(&self) -> &[u8; COUNT + 1] { | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issue-67375.min.stderr b/src/test/ui/const-generics/issue-67375.min.stderr index 3c344edbf1d1..f71618933b63 100644 --- a/src/test/ui/const-generics/issue-67375.min.stderr +++ b/src/test/ui/const-generics/issue-67375.min.stderr @@ -5,6 +5,7 @@ LL | inner: [(); { [|_: &T| {}; 0].len() }], | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0392]: parameter `T` is never used --> $DIR/issue-67375.rs:7:12 diff --git a/src/test/ui/const-generics/issue-67945-1.min.stderr b/src/test/ui/const-generics/issue-67945-1.min.stderr index 804236c30bd8..946f8ca1abcd 100644 --- a/src/test/ui/const-generics/issue-67945-1.min.stderr +++ b/src/test/ui/const-generics/issue-67945-1.min.stderr @@ -5,6 +5,7 @@ LL | let x: S = MaybeUninit::uninit(); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-67945-1.rs:17:45 @@ -13,6 +14,7 @@ LL | let b = &*(&x as *const _ as *const S); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-1.rs:11:12 diff --git a/src/test/ui/const-generics/issue-67945-2.min.stderr b/src/test/ui/const-generics/issue-67945-2.min.stderr index 2de942c1220c..8e189f0c196b 100644 --- a/src/test/ui/const-generics/issue-67945-2.min.stderr +++ b/src/test/ui/const-generics/issue-67945-2.min.stderr @@ -5,6 +5,7 @@ LL | let x: S = MaybeUninit::uninit(); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-67945-2.rs:15:45 @@ -13,6 +14,7 @@ LL | let b = &*(&x as *const _ as *const S); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-2.rs:9:12 diff --git a/src/test/ui/const-generics/issues/issue-61747.min.stderr b/src/test/ui/const-generics/issues/issue-61747.min.stderr index 1e4fdd885ec8..cb14813d8cac 100644 --- a/src/test/ui/const-generics/issues/issue-61747.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61747.min.stderr @@ -5,7 +5,7 @@ LL | fn successor() -> Const<{C + 1}> { | ^ cannot perform const operation using `C` | = help: const parameters may only be used as standalone arguments, i.e. `C` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-61935.min.stderr b/src/test/ui/const-generics/issues/issue-61935.min.stderr index cf1ff180935e..91055949d8c0 100644 --- a/src/test/ui/const-generics/issues/issue-61935.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61935.min.stderr @@ -5,7 +5,7 @@ LL | Self:FooImpl<{N==0}> | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62220.min.stderr b/src/test/ui/const-generics/issues/issue-62220.min.stderr index dd8fbfebd2f6..6d49a4dc6edb 100644 --- a/src/test/ui/const-generics/issues/issue-62220.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62220.min.stderr @@ -5,7 +5,7 @@ LL | pub type TruncatedVector = Vector; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62456.min.stderr b/src/test/ui/const-generics/issues/issue-62456.min.stderr index ac11191b119c..a26f2a6bf027 100644 --- a/src/test/ui/const-generics/issues/issue-62456.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62456.min.stderr @@ -5,7 +5,7 @@ LL | let _ = [0u64; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-64494.min.stderr b/src/test/ui/const-generics/issues/issue-64494.min.stderr index 8b02fd108bd5..ded781cab45a 100644 --- a/src/test/ui/const-generics/issues/issue-64494.min.stderr +++ b/src/test/ui/const-generics/issues/issue-64494.min.stderr @@ -5,6 +5,7 @@ LL | impl MyTrait for T where Is<{T::VAL == 5}>: True {} | ^^^^^^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-64494.rs:19:38 @@ -13,6 +14,7 @@ LL | impl MyTrait for T where Is<{T::VAL == 6}>: True {} | ^^^^^^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0119]: conflicting implementations of trait `MyTrait`: --> $DIR/issue-64494.rs:19:1 diff --git a/src/test/ui/const-generics/issues/issue-66205.min.stderr b/src/test/ui/const-generics/issues/issue-66205.min.stderr index f3e3eb6c5a65..e3a6b7a5ab2e 100644 --- a/src/test/ui/const-generics/issues/issue-66205.min.stderr +++ b/src/test/ui/const-generics/issues/issue-66205.min.stderr @@ -5,7 +5,7 @@ LL | fact::<{ N - 1 }>(); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-68366.min.stderr b/src/test/ui/const-generics/issues/issue-68366.min.stderr index 7dcb3ea1acb0..85ceace45d6e 100644 --- a/src/test/ui/const-generics/issues/issue-68366.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68366.min.stderr @@ -5,7 +5,7 @@ LL | impl Collatz<{Some(N)}> {} | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0207]: the const parameter `N` is not constrained by the impl trait, self type, or predicates --> $DIR/issue-68366.rs:12:13 diff --git a/src/test/ui/const-generics/issues/issue-68977.min.stderr b/src/test/ui/const-generics/issues/issue-68977.min.stderr index 67ca519de2c2..133f68d16fdc 100644 --- a/src/test/ui/const-generics/issues/issue-68977.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68977.min.stderr @@ -5,7 +5,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^ cannot perform const operation using `INT_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `INT_BITS` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-68977.rs:29:28 @@ -14,7 +14,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^^ cannot perform const operation using `FRAC_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `FRAC_BITS` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-72787.min.stderr b/src/test/ui/const-generics/issues/issue-72787.min.stderr index 2a7672d0c892..2feeafc778a0 100644 --- a/src/test/ui/const-generics/issues/issue-72787.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72787.min.stderr @@ -5,7 +5,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `LHS` | = help: const parameters may only be used as standalone arguments, i.e. `LHS` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:11:24 @@ -14,7 +14,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `RHS` | = help: const parameters may only be used as standalone arguments, i.e. `RHS` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:25 @@ -23,7 +23,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `I` | = help: const parameters may only be used as standalone arguments, i.e. `I` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:36 @@ -32,7 +32,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `J` | = help: const parameters may only be used as standalone arguments, i.e. `J` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error[E0283]: type annotations needed --> $DIR/issue-72787.rs:22:26 diff --git a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr index f7c4109e5529..ada74ecd6f23 100644 --- a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr @@ -5,7 +5,7 @@ LL | where Assert::<{N < usize::max_value() / 2}>: IsTrue, | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr index 57514736121c..5fb2768e8f0e 100644 --- a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr +++ b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr @@ -5,6 +5,7 @@ LL | fn ty_param() -> [u8; std::mem::size_of::()] { | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-76701-ty-param-in-const.rs:12:42 @@ -13,7 +14,7 @@ LL | fn const_param() -> [u8; N + 1] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/macro_rules-braces.min.stderr b/src/test/ui/const-generics/macro_rules-braces.min.stderr index b23053756d14..c7f3ddcfe9e3 100644 --- a/src/test/ui/const-generics/macro_rules-braces.min.stderr +++ b/src/test/ui/const-generics/macro_rules-braces.min.stderr @@ -27,7 +27,7 @@ LL | let _: foo!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:41:19 @@ -36,7 +36,7 @@ LL | let _: bar!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:46:20 @@ -45,7 +45,7 @@ LL | let _: baz!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:51:19 @@ -54,7 +54,7 @@ LL | let _: biz!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 6 previous errors diff --git a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr index d8debd2b9304..54448c68529e 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr +++ b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr @@ -5,7 +5,7 @@ LL | struct Break0([u8; { N + 1 }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:14:40 @@ -14,7 +14,7 @@ LL | struct Break1([u8; { { N } }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:18:17 @@ -23,7 +23,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:23:17 @@ -32,7 +32,7 @@ LL | let _ = [0; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:27:45 @@ -41,6 +41,7 @@ LL | struct BreakTy0(T, [u8; { size_of::<*mut T>() }]); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:30:47 @@ -49,6 +50,7 @@ LL | struct BreakTy1(T, [u8; { { size_of::<*mut T>() } }]); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:34:32 @@ -57,6 +59,7 @@ LL | let _: [u8; size_of::<*mut T>() + 1]; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions warning: cannot use constants which depend on generic parameters in types --> $DIR/complex-expression.rs:39:17 diff --git a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr index 64da5e07df2f..c52d9552b900 100644 --- a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr +++ b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr @@ -5,6 +5,7 @@ LL | fn t1() -> [u8; std::mem::size_of::()]; | ^^^^ cannot perform const operation using `Self` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic `Self` types are currently not permitted in anonymous constants --> $DIR/self-ty-in-const-1.rs:14:41 diff --git a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr index 39aa8087cec5..bfe748855d70 100644 --- a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr +++ b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr @@ -13,6 +13,7 @@ LL | struct Foo()]>(T, U); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: constant values inside of type parameter defaults must not depend on generic parameters --> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:21 diff --git a/src/test/ui/const-generics/wf-misc.min.stderr b/src/test/ui/const-generics/wf-misc.min.stderr index 296b1c15cf01..8b1cf944856d 100644 --- a/src/test/ui/const-generics/wf-misc.min.stderr +++ b/src/test/ui/const-generics/wf-misc.min.stderr @@ -5,7 +5,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/wf-misc.rs:17:21 @@ -14,7 +14,7 @@ LL | let _: Const::<{N + 1}>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use feature(const_generics) and feature(const_evaluatable_checked) to enable this + = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions error: aborting due to 2 previous errors From 888055eb4cbd6136d7f7f5d32be98a477fbde749 Mon Sep 17 00:00:00 2001 From: mendess Date: Tue, 24 Nov 2020 11:05:55 +0000 Subject: [PATCH 12/12] Swap note for help --- compiler/rustc_resolve/src/diagnostics.rs | 2 +- compiler/rustc_typeck/src/check/wfcheck.rs | 2 +- .../array-size-in-generic-struct-param.min.stderr | 6 +++--- .../const-arg-in-const-arg.min.stderr | 14 +++++++------- .../const-argument-if-length.min.stderr | 2 +- .../const-param-before-other-params.min.stderr | 4 ++-- .../const-param-elided-lifetime.min.stderr | 10 +++++----- ...st-param-type-depends-on-const-param.min.stderr | 4 ++-- ...ature-gate-const_evaluatable_checked.min.stderr | 2 +- .../const_evaluatable_checked/simple.min.stderr | 4 ++-- .../simple_fail.min.stderr | 2 +- .../ui/const-generics/different_byref.min.stderr | 2 +- .../forbid-non-structural_match-types.min.stderr | 4 ++-- ...eneric-function-call-in-array-length.min.stderr | 4 ++-- .../generic-sum-in-array-length.min.stderr | 4 ++-- ...trinsics-type_name-as-const-argument.min.stderr | 4 ++-- .../issue-61522-array-len-succ.min.stderr | 4 ++-- ...e-66596-impl-trait-for-str-const-arg.min.stderr | 2 +- src/test/ui/const-generics/issue-67375.min.stderr | 2 +- .../ui/const-generics/issue-67945-1.min.stderr | 4 ++-- .../ui/const-generics/issue-67945-2.min.stderr | 4 ++-- .../const-generics/issues/issue-61747.min.stderr | 2 +- .../const-generics/issues/issue-61935.min.stderr | 2 +- .../const-generics/issues/issue-62220.min.stderr | 2 +- .../const-generics/issues/issue-62456.min.stderr | 2 +- .../issues/issue-62579-no-match.min.stderr | 2 +- .../const-generics/issues/issue-62878.min.stderr | 2 +- .../issues/issue-63322-forbid-dyn.min.stderr | 2 +- .../const-generics/issues/issue-64494.min.stderr | 4 ++-- .../const-generics/issues/issue-66205.min.stderr | 2 +- .../const-generics/issues/issue-68366.min.stderr | 2 +- .../issues/issue-68615-adt.min.stderr | 2 +- .../issues/issue-68615-array.min.stderr | 2 +- .../const-generics/issues/issue-68977.min.stderr | 4 ++-- .../const-generics/issues/issue-71169.min.stderr | 2 +- .../const-generics/issues/issue-72787.min.stderr | 8 ++++---- .../issue-72819-generic-in-const-eval.min.stderr | 2 +- .../const-generics/issues/issue-73491.min.stderr | 2 +- .../const-generics/issues/issue-74101.min.stderr | 4 ++-- .../const-generics/issues/issue-74255.min.stderr | 2 +- .../const-generics/issues/issue-74950.min.stderr | 10 +++++----- .../const-generics/issues/issue-75047.min.stderr | 2 +- .../issue-76701-ty-param-in-const.min.stderr | 4 ++-- .../const-generics/macro_rules-braces.min.stderr | 8 ++++---- .../min_const_generics/complex-expression.stderr | 14 +++++++------- .../min_const_generics/complex-types.stderr | 14 +++++++------- .../min_const_generics/self-ty-in-const-1.stderr | 2 +- .../static-reference-array-const-param.stderr | 2 +- .../transmute-const-param-static-reference.stderr | 2 +- src/test/ui/const-generics/nested-type.min.stderr | 2 +- .../params-in-ct-in-ty-param-lazy-norm.min.stderr | 2 +- .../slice-const-param-mismatch.min.stderr | 4 ++-- .../ui/const-generics/slice-const-param.min.stderr | 4 ++-- .../std/const-generics-range.min.stderr | 12 ++++++------ .../type-dependent/issue-71348.min.stderr | 4 ++-- src/test/ui/const-generics/wf-misc.min.stderr | 4 ++-- 56 files changed, 113 insertions(+), 113 deletions(-) diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 9f3e8be0f7a3..a0d5b61e8bd1 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -481,7 +481,7 @@ impl<'a> Resolver<'a> { name )); } - err.note("use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions"); + err.help("use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions"); err } diff --git a/compiler/rustc_typeck/src/check/wfcheck.rs b/compiler/rustc_typeck/src/check/wfcheck.rs index 5dffe5107b58..aeca801a4ee0 100644 --- a/compiler/rustc_typeck/src/check/wfcheck.rs +++ b/compiler/rustc_typeck/src/check/wfcheck.rs @@ -329,7 +329,7 @@ fn check_param_wf(tcx: TyCtxt<'_>, param: &hir::GenericParam<'_>) { ), ) .note("the only supported types are integers, `bool` and `char`") - .note("more complex types are supported with `#[feature(const_generics)]`") + .help("more complex types are supported with `#[feature(const_generics)]`") .emit() } }; diff --git a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr index 59f458b35aac..73c9ea59c955 100644 --- a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr +++ b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr @@ -5,7 +5,7 @@ LL | struct ArithArrayLen([u32; 0 + N]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/array-size-in-generic-struct-param.rs:20:15 @@ -14,7 +14,7 @@ LL | arr: [u8; CFG.arr_size], | ^^^ cannot perform const operation using `CFG` | = help: const parameters may only be used as standalone arguments, i.e. `CFG` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: `Config` is forbidden as the type of a const generic parameter --> $DIR/array-size-in-generic-struct-param.rs:18:21 @@ -23,7 +23,7 @@ LL | struct B { | ^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 3 previous errors diff --git a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr index 136a4ddf7359..042fa9ad958b 100644 --- a/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr +++ b/src/test/ui/const-generics/const-arg-in-const-arg.min.stderr @@ -5,7 +5,7 @@ LL | let _: [u8; foo::()]; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:15:23 @@ -14,7 +14,7 @@ LL | let _: [u8; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:25:23 @@ -23,7 +23,7 @@ LL | let _ = [0; bar::()]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:30:24 @@ -32,7 +32,7 @@ LL | let _: Foo<{ foo::() }>; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:31:24 @@ -41,7 +41,7 @@ LL | let _: Foo<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:36:27 @@ -50,7 +50,7 @@ LL | let _ = Foo::<{ foo::() }>; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/const-arg-in-const-arg.rs:37:27 @@ -59,7 +59,7 @@ LL | let _ = Foo::<{ bar::() }>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0658]: a non-static lifetime is not allowed in a `const` --> $DIR/const-arg-in-const-arg.rs:16:23 diff --git a/src/test/ui/const-generics/const-argument-if-length.min.stderr b/src/test/ui/const-generics/const-argument-if-length.min.stderr index d85586ea0b79..8a1074392a5c 100644 --- a/src/test/ui/const-generics/const-argument-if-length.min.stderr +++ b/src/test/ui/const-generics/const-argument-if-length.min.stderr @@ -5,7 +5,7 @@ LL | pad: [u8; is_zst::()], | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0277]: the size for values of type `T` cannot be known at compilation time --> $DIR/const-argument-if-length.rs:17:12 diff --git a/src/test/ui/const-generics/const-param-before-other-params.min.stderr b/src/test/ui/const-generics/const-param-before-other-params.min.stderr index c7e6d1be4216..354c6d0615f1 100644 --- a/src/test/ui/const-generics/const-param-before-other-params.min.stderr +++ b/src/test/ui/const-generics/const-param-before-other-params.min.stderr @@ -17,7 +17,7 @@ LL | fn bar(_: &'a ()) { | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `()` is forbidden as the type of a const generic parameter --> $DIR/const-param-before-other-params.rs:11:17 @@ -26,7 +26,7 @@ LL | fn foo(_: &T) {} | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 4 previous errors diff --git a/src/test/ui/const-generics/const-param-elided-lifetime.min.stderr b/src/test/ui/const-generics/const-param-elided-lifetime.min.stderr index 81dbaee0ec51..ed30182690a7 100644 --- a/src/test/ui/const-generics/const-param-elided-lifetime.min.stderr +++ b/src/test/ui/const-generics/const-param-elided-lifetime.min.stderr @@ -35,7 +35,7 @@ LL | struct A; | ^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static u8` is forbidden as the type of a const generic parameter --> $DIR/const-param-elided-lifetime.rs:16:15 @@ -44,7 +44,7 @@ LL | impl A { | ^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static u8` is forbidden as the type of a const generic parameter --> $DIR/const-param-elided-lifetime.rs:24:15 @@ -53,7 +53,7 @@ LL | impl B for A {} | ^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static u8` is forbidden as the type of a const generic parameter --> $DIR/const-param-elided-lifetime.rs:28:17 @@ -62,7 +62,7 @@ LL | fn bar() {} | ^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static u8` is forbidden as the type of a const generic parameter --> $DIR/const-param-elided-lifetime.rs:19:21 @@ -71,7 +71,7 @@ LL | fn foo(&self) {} | ^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 10 previous errors diff --git a/src/test/ui/const-generics/const-param-type-depends-on-const-param.min.stderr b/src/test/ui/const-generics/const-param-type-depends-on-const-param.min.stderr index b00a16078762..6b7a218ada5d 100644 --- a/src/test/ui/const-generics/const-param-type-depends-on-const-param.min.stderr +++ b/src/test/ui/const-generics/const-param-type-depends-on-const-param.min.stderr @@ -17,7 +17,7 @@ LL | pub struct Dependent([(); N]); | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `[u8; _]` is forbidden as the type of a const generic parameter --> $DIR/const-param-type-depends-on-const-param.rs:16:35 @@ -26,7 +26,7 @@ LL | pub struct SelfDependent; | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 4 previous errors diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr index 70b71c041f13..573bc66b7c7e 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr @@ -5,7 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr index efee04598aba..d476a7eb6455 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr @@ -5,7 +5,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/simple.rs:8:35 @@ -14,7 +14,7 @@ LL | fn test() -> [u8; N - 1] where [u8; N - 1]: Default { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr index 99e45fdece2b..bd81e0bc5a8c 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr @@ -5,7 +5,7 @@ LL | type Arr = [u8; N - 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/different_byref.min.stderr b/src/test/ui/const-generics/different_byref.min.stderr index 050b28abe508..e5b393ffe99e 100644 --- a/src/test/ui/const-generics/different_byref.min.stderr +++ b/src/test/ui/const-generics/different_byref.min.stderr @@ -5,7 +5,7 @@ LL | struct Const {} | ^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/forbid-non-structural_match-types.min.stderr b/src/test/ui/const-generics/forbid-non-structural_match-types.min.stderr index 40d8f44cafc0..014200178b9c 100644 --- a/src/test/ui/const-generics/forbid-non-structural_match-types.min.stderr +++ b/src/test/ui/const-generics/forbid-non-structural_match-types.min.stderr @@ -5,7 +5,7 @@ LL | struct B; // ok | ^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `C` is forbidden as the type of a const generic parameter --> $DIR/forbid-non-structural_match-types.rs:15:19 @@ -14,7 +14,7 @@ LL | struct D; | ^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error[E0741]: `C` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter --> $DIR/forbid-non-structural_match-types.rs:15:19 diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr index a42375289bcd..526f98fe8cd4 100644 --- a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr @@ -5,7 +5,7 @@ LL | fn bar() -> [u32; foo(N)] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/generic-function-call-in-array-length.rs:12:13 @@ -14,7 +14,7 @@ LL | [0; foo(N)] | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr index 5b393351d5e8..e531b612b560 100644 --- a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr +++ b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr @@ -5,7 +5,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `A` | = help: const parameters may only be used as standalone arguments, i.e. `A` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/generic-sum-in-array-length.rs:7:57 @@ -14,7 +14,7 @@ LL | fn foo(bar: [usize; A + B]) {} | ^ cannot perform const operation using `B` | = help: const parameters may only be used as standalone arguments, i.e. `B` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr index 8f38a55b19b7..02467df193c3 100644 --- a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr +++ b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr @@ -5,7 +5,7 @@ LL | T: Trait<{std::intrinsics::type_name::()}> | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: `&'static str` is forbidden as the type of a const generic parameter --> $DIR/intrinsics-type_name-as-const-argument.rs:10:22 @@ -14,7 +14,7 @@ LL | trait Trait {} | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr index 94968a491384..2eaef95c2321 100644 --- a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr +++ b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr @@ -5,7 +5,7 @@ LL | pub struct MyArray([u8; COUNT + 1]); | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-61522-array-len-succ.rs:12:30 @@ -14,7 +14,7 @@ LL | fn inner(&self) -> &[u8; COUNT + 1] { | ^^^^^ cannot perform const operation using `COUNT` | = help: const parameters may only be used as standalone arguments, i.e. `COUNT` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issue-66596-impl-trait-for-str-const-arg.min.stderr b/src/test/ui/const-generics/issue-66596-impl-trait-for-str-const-arg.min.stderr index 786ded3c2fe4..1c2e7e069a18 100644 --- a/src/test/ui/const-generics/issue-66596-impl-trait-for-str-const-arg.min.stderr +++ b/src/test/ui/const-generics/issue-66596-impl-trait-for-str-const-arg.min.stderr @@ -5,7 +5,7 @@ LL | trait Trait { | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issue-67375.min.stderr b/src/test/ui/const-generics/issue-67375.min.stderr index f71618933b63..da96b5374a57 100644 --- a/src/test/ui/const-generics/issue-67375.min.stderr +++ b/src/test/ui/const-generics/issue-67375.min.stderr @@ -5,7 +5,7 @@ LL | inner: [(); { [|_: &T| {}; 0].len() }], | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0392]: parameter `T` is never used --> $DIR/issue-67375.rs:7:12 diff --git a/src/test/ui/const-generics/issue-67945-1.min.stderr b/src/test/ui/const-generics/issue-67945-1.min.stderr index 946f8ca1abcd..8fea130baa57 100644 --- a/src/test/ui/const-generics/issue-67945-1.min.stderr +++ b/src/test/ui/const-generics/issue-67945-1.min.stderr @@ -5,7 +5,7 @@ LL | let x: S = MaybeUninit::uninit(); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-67945-1.rs:17:45 @@ -14,7 +14,7 @@ LL | let b = &*(&x as *const _ as *const S); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-1.rs:11:12 diff --git a/src/test/ui/const-generics/issue-67945-2.min.stderr b/src/test/ui/const-generics/issue-67945-2.min.stderr index 8e189f0c196b..50633772b75a 100644 --- a/src/test/ui/const-generics/issue-67945-2.min.stderr +++ b/src/test/ui/const-generics/issue-67945-2.min.stderr @@ -5,7 +5,7 @@ LL | let x: S = MaybeUninit::uninit(); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-67945-2.rs:15:45 @@ -14,7 +14,7 @@ LL | let b = &*(&x as *const _ as *const S); | ^ cannot perform const operation using `S` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0392]: parameter `S` is never used --> $DIR/issue-67945-2.rs:9:12 diff --git a/src/test/ui/const-generics/issues/issue-61747.min.stderr b/src/test/ui/const-generics/issues/issue-61747.min.stderr index cb14813d8cac..1de9e71b6eb0 100644 --- a/src/test/ui/const-generics/issues/issue-61747.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61747.min.stderr @@ -5,7 +5,7 @@ LL | fn successor() -> Const<{C + 1}> { | ^ cannot perform const operation using `C` | = help: const parameters may only be used as standalone arguments, i.e. `C` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-61935.min.stderr b/src/test/ui/const-generics/issues/issue-61935.min.stderr index 91055949d8c0..b1d92056a544 100644 --- a/src/test/ui/const-generics/issues/issue-61935.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61935.min.stderr @@ -5,7 +5,7 @@ LL | Self:FooImpl<{N==0}> | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62220.min.stderr b/src/test/ui/const-generics/issues/issue-62220.min.stderr index 6d49a4dc6edb..b338cdb87e1e 100644 --- a/src/test/ui/const-generics/issues/issue-62220.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62220.min.stderr @@ -5,7 +5,7 @@ LL | pub type TruncatedVector = Vector; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62456.min.stderr b/src/test/ui/const-generics/issues/issue-62456.min.stderr index a26f2a6bf027..a4b501a7bb10 100644 --- a/src/test/ui/const-generics/issues/issue-62456.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62456.min.stderr @@ -5,7 +5,7 @@ LL | let _ = [0u64; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62579-no-match.min.stderr b/src/test/ui/const-generics/issues/issue-62579-no-match.min.stderr index 6903b20fad63..5117e20d6266 100644 --- a/src/test/ui/const-generics/issues/issue-62579-no-match.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62579-no-match.min.stderr @@ -5,7 +5,7 @@ LL | fn foo() -> bool { | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-62878.min.stderr b/src/test/ui/const-generics/issues/issue-62878.min.stderr index 34edd09b5156..9f95e5d88623 100644 --- a/src/test/ui/const-generics/issues/issue-62878.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62878.min.stderr @@ -11,7 +11,7 @@ LL | fn foo() {} | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-63322-forbid-dyn.min.stderr b/src/test/ui/const-generics/issues/issue-63322-forbid-dyn.min.stderr index e6d9fb7a2468..5dbfdc6d652b 100644 --- a/src/test/ui/const-generics/issues/issue-63322-forbid-dyn.min.stderr +++ b/src/test/ui/const-generics/issues/issue-63322-forbid-dyn.min.stderr @@ -5,7 +5,7 @@ LL | fn test() { | ^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error[E0741]: `&'static (dyn A + 'static)` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter --> $DIR/issue-63322-forbid-dyn.rs:10:18 diff --git a/src/test/ui/const-generics/issues/issue-64494.min.stderr b/src/test/ui/const-generics/issues/issue-64494.min.stderr index ded781cab45a..681166b1d2b9 100644 --- a/src/test/ui/const-generics/issues/issue-64494.min.stderr +++ b/src/test/ui/const-generics/issues/issue-64494.min.stderr @@ -5,7 +5,7 @@ LL | impl MyTrait for T where Is<{T::VAL == 5}>: True {} | ^^^^^^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-64494.rs:19:38 @@ -14,7 +14,7 @@ LL | impl MyTrait for T where Is<{T::VAL == 6}>: True {} | ^^^^^^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0119]: conflicting implementations of trait `MyTrait`: --> $DIR/issue-64494.rs:19:1 diff --git a/src/test/ui/const-generics/issues/issue-66205.min.stderr b/src/test/ui/const-generics/issues/issue-66205.min.stderr index e3a6b7a5ab2e..ecd96ac37e40 100644 --- a/src/test/ui/const-generics/issues/issue-66205.min.stderr +++ b/src/test/ui/const-generics/issues/issue-66205.min.stderr @@ -5,7 +5,7 @@ LL | fact::<{ N - 1 }>(); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-68366.min.stderr b/src/test/ui/const-generics/issues/issue-68366.min.stderr index 85ceace45d6e..acaf4a33ee0a 100644 --- a/src/test/ui/const-generics/issues/issue-68366.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68366.min.stderr @@ -5,7 +5,7 @@ LL | impl Collatz<{Some(N)}> {} | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0207]: the const parameter `N` is not constrained by the impl trait, self type, or predicates --> $DIR/issue-68366.rs:12:13 diff --git a/src/test/ui/const-generics/issues/issue-68615-adt.min.stderr b/src/test/ui/const-generics/issues/issue-68615-adt.min.stderr index 81c8f4392c73..59653114a6b6 100644 --- a/src/test/ui/const-generics/issues/issue-68615-adt.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68615-adt.min.stderr @@ -5,7 +5,7 @@ LL | struct Const {} | ^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-68615-array.min.stderr b/src/test/ui/const-generics/issues/issue-68615-array.min.stderr index 8f55a92fce9a..1ee881b96ec6 100644 --- a/src/test/ui/const-generics/issues/issue-68615-array.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68615-array.min.stderr @@ -5,7 +5,7 @@ LL | struct Foo {} | ^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-68977.min.stderr b/src/test/ui/const-generics/issues/issue-68977.min.stderr index 133f68d16fdc..ea91df1e0bf4 100644 --- a/src/test/ui/const-generics/issues/issue-68977.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68977.min.stderr @@ -5,7 +5,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^ cannot perform const operation using `INT_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `INT_BITS` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-68977.rs:29:28 @@ -14,7 +14,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | ^^^^^^^^^ cannot perform const operation using `FRAC_BITS` | = help: const parameters may only be used as standalone arguments, i.e. `FRAC_BITS` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-71169.min.stderr b/src/test/ui/const-generics/issues/issue-71169.min.stderr index 79d63443351f..9b0a2946ca6c 100644 --- a/src/test/ui/const-generics/issues/issue-71169.min.stderr +++ b/src/test/ui/const-generics/issues/issue-71169.min.stderr @@ -11,7 +11,7 @@ LL | fn foo() {} | ^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-72787.min.stderr b/src/test/ui/const-generics/issues/issue-72787.min.stderr index 2feeafc778a0..27bbc28011f2 100644 --- a/src/test/ui/const-generics/issues/issue-72787.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72787.min.stderr @@ -5,7 +5,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `LHS` | = help: const parameters may only be used as standalone arguments, i.e. `LHS` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:11:24 @@ -14,7 +14,7 @@ LL | Condition<{ LHS <= RHS }>: True | ^^^ cannot perform const operation using `RHS` | = help: const parameters may only be used as standalone arguments, i.e. `RHS` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:25 @@ -23,7 +23,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `I` | = help: const parameters may only be used as standalone arguments, i.e. `I` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-72787.rs:26:36 @@ -32,7 +32,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | ^ cannot perform const operation using `J` | = help: const parameters may only be used as standalone arguments, i.e. `J` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error[E0283]: type annotations needed --> $DIR/issue-72787.rs:22:26 diff --git a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr index ada74ecd6f23..2394b23d7995 100644 --- a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr @@ -5,7 +5,7 @@ LL | where Assert::<{N < usize::max_value() / 2}>: IsTrue, | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-73491.min.stderr b/src/test/ui/const-generics/issues/issue-73491.min.stderr index 5bf3671d38be..3ff0563acc77 100644 --- a/src/test/ui/const-generics/issues/issue-73491.min.stderr +++ b/src/test/ui/const-generics/issues/issue-73491.min.stderr @@ -5,7 +5,7 @@ LL | fn hoge() {} | ^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-74101.min.stderr b/src/test/ui/const-generics/issues/issue-74101.min.stderr index 8062faefbe60..1351246667e9 100644 --- a/src/test/ui/const-generics/issues/issue-74101.min.stderr +++ b/src/test/ui/const-generics/issues/issue-74101.min.stderr @@ -5,7 +5,7 @@ LL | fn test() {} | ^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `[u8; _]` is forbidden as the type of a const generic parameter --> $DIR/issue-74101.rs:10:21 @@ -14,7 +14,7 @@ LL | struct Foo; | ^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/issues/issue-74255.min.stderr b/src/test/ui/const-generics/issues/issue-74255.min.stderr index 86937d715c97..e3e8502ae634 100644 --- a/src/test/ui/const-generics/issues/issue-74255.min.stderr +++ b/src/test/ui/const-generics/issues/issue-74255.min.stderr @@ -5,7 +5,7 @@ LL | fn ice_struct_fn() {} | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-74950.min.stderr b/src/test/ui/const-generics/issues/issue-74950.min.stderr index f093e6651bc2..12947a2ab375 100644 --- a/src/test/ui/const-generics/issues/issue-74950.min.stderr +++ b/src/test/ui/const-generics/issues/issue-74950.min.stderr @@ -5,7 +5,7 @@ LL | struct Outer; | ^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `Inner` is forbidden as the type of a const generic parameter --> $DIR/issue-74950.rs:18:23 @@ -14,7 +14,7 @@ LL | struct Outer; | ^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `Inner` is forbidden as the type of a const generic parameter --> $DIR/issue-74950.rs:18:23 @@ -23,7 +23,7 @@ LL | struct Outer; | ^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `Inner` is forbidden as the type of a const generic parameter --> $DIR/issue-74950.rs:18:23 @@ -32,7 +32,7 @@ LL | struct Outer; | ^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `Inner` is forbidden as the type of a const generic parameter --> $DIR/issue-74950.rs:18:23 @@ -41,7 +41,7 @@ LL | struct Outer; | ^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 5 previous errors diff --git a/src/test/ui/const-generics/issues/issue-75047.min.stderr b/src/test/ui/const-generics/issues/issue-75047.min.stderr index edc54b082dbc..b87bb18a5a68 100644 --- a/src/test/ui/const-generics/issues/issue-75047.min.stderr +++ b/src/test/ui/const-generics/issues/issue-75047.min.stderr @@ -5,7 +5,7 @@ LL | struct Foo::value()]>; | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr index 5fb2768e8f0e..551b8e43e1d4 100644 --- a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr +++ b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr @@ -5,7 +5,7 @@ LL | fn ty_param() -> [u8; std::mem::size_of::()] { | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/issue-76701-ty-param-in-const.rs:12:42 @@ -14,7 +14,7 @@ LL | fn const_param() -> [u8; N + 1] { | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/macro_rules-braces.min.stderr b/src/test/ui/const-generics/macro_rules-braces.min.stderr index c7f3ddcfe9e3..c400e2c814dd 100644 --- a/src/test/ui/const-generics/macro_rules-braces.min.stderr +++ b/src/test/ui/const-generics/macro_rules-braces.min.stderr @@ -27,7 +27,7 @@ LL | let _: foo!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:41:19 @@ -36,7 +36,7 @@ LL | let _: bar!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:46:20 @@ -45,7 +45,7 @@ LL | let _: baz!({{ N }}); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/macro_rules-braces.rs:51:19 @@ -54,7 +54,7 @@ LL | let _: biz!({ N }); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 6 previous errors diff --git a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr index 54448c68529e..2ea66279d460 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr +++ b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr @@ -5,7 +5,7 @@ LL | struct Break0([u8; { N + 1 }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:14:40 @@ -14,7 +14,7 @@ LL | struct Break1([u8; { { N } }]); | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:18:17 @@ -23,7 +23,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:23:17 @@ -32,7 +32,7 @@ LL | let _ = [0; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:27:45 @@ -41,7 +41,7 @@ LL | struct BreakTy0(T, [u8; { size_of::<*mut T>() }]); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:30:47 @@ -50,7 +50,7 @@ LL | struct BreakTy1(T, [u8; { { size_of::<*mut T>() } }]); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/complex-expression.rs:34:32 @@ -59,7 +59,7 @@ LL | let _: [u8; size_of::<*mut T>() + 1]; | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions warning: cannot use constants which depend on generic parameters in types --> $DIR/complex-expression.rs:39:17 diff --git a/src/test/ui/const-generics/min_const_generics/complex-types.stderr b/src/test/ui/const-generics/min_const_generics/complex-types.stderr index 52ed3c1c6ee8..5d473f1f8769 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-types.stderr +++ b/src/test/ui/const-generics/min_const_generics/complex-types.stderr @@ -5,7 +5,7 @@ LL | struct Foo; | ^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `()` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:7:21 @@ -14,7 +14,7 @@ LL | struct Bar; | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `No` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:12:21 @@ -23,7 +23,7 @@ LL | struct Fez; | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static u8` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:15:21 @@ -32,7 +32,7 @@ LL | struct Faz; | ^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `!` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:18:21 @@ -41,7 +41,7 @@ LL | struct Fiz; | ^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `()` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:21:19 @@ -50,7 +50,7 @@ LL | enum Goo { A, B } | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `()` is forbidden as the type of a const generic parameter --> $DIR/complex-types.rs:24:20 @@ -59,7 +59,7 @@ LL | union Boo { a: () } | ^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 7 previous errors diff --git a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr index c52d9552b900..40c73f0b9513 100644 --- a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr +++ b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr @@ -5,7 +5,7 @@ LL | fn t1() -> [u8; std::mem::size_of::()]; | ^^^^ cannot perform const operation using `Self` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic `Self` types are currently not permitted in anonymous constants --> $DIR/self-ty-in-const-1.rs:14:41 diff --git a/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr index cc32d8a67fed..6c39f6b4c1dc 100644 --- a/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr +++ b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr @@ -5,7 +5,7 @@ LL | fn a() {} | ^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr index 063120ad074a..6b90329b72ce 100644 --- a/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr +++ b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr @@ -5,7 +5,7 @@ LL | struct Const; | ^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to previous error diff --git a/src/test/ui/const-generics/nested-type.min.stderr b/src/test/ui/const-generics/nested-type.min.stderr index 4f76ec6e02b2..369e387508e9 100644 --- a/src/test/ui/const-generics/nested-type.min.stderr +++ b/src/test/ui/const-generics/nested-type.min.stderr @@ -12,7 +12,7 @@ LL | | }]>; | |__^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error[E0015]: calls in constants are limited to constant functions, tuple structs and tuple variants --> $DIR/nested-type.rs:16:5 diff --git a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr index bfe748855d70..9e0837a0a620 100644 --- a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr +++ b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr @@ -13,7 +13,7 @@ LL | struct Foo()]>(T, U); | ^ cannot perform const operation using `T` | = note: type parameters may not be used in const expressions - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: constant values inside of type parameter defaults must not depend on generic parameters --> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:21 diff --git a/src/test/ui/const-generics/slice-const-param-mismatch.min.stderr b/src/test/ui/const-generics/slice-const-param-mismatch.min.stderr index 1f711bef4aa6..46997fed770a 100644 --- a/src/test/ui/const-generics/slice-const-param-mismatch.min.stderr +++ b/src/test/ui/const-generics/slice-const-param-mismatch.min.stderr @@ -5,7 +5,7 @@ LL | struct ConstString; | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static [u8]` is forbidden as the type of a const generic parameter --> $DIR/slice-const-param-mismatch.rs:10:28 @@ -14,7 +14,7 @@ LL | struct ConstBytes; | ^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/slice-const-param.min.stderr b/src/test/ui/const-generics/slice-const-param.min.stderr index 2a49619e6614..7a9f65233e79 100644 --- a/src/test/ui/const-generics/slice-const-param.min.stderr +++ b/src/test/ui/const-generics/slice-const-param.min.stderr @@ -5,7 +5,7 @@ LL | pub fn function_with_str() -> &'static str { | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static [u8]` is forbidden as the type of a const generic parameter --> $DIR/slice-const-param.rs:13:41 @@ -14,7 +14,7 @@ LL | pub fn function_with_bytes() -> &'static [u8] { | ^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/std/const-generics-range.min.stderr b/src/test/ui/const-generics/std/const-generics-range.min.stderr index 97be6ee64457..9274ccd2b921 100644 --- a/src/test/ui/const-generics/std/const-generics-range.min.stderr +++ b/src/test/ui/const-generics/std/const-generics-range.min.stderr @@ -5,7 +5,7 @@ LL | struct _Range>; | ^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `RangeFrom` is forbidden as the type of a const generic parameter --> $DIR/const-generics-range.rs:13:28 @@ -14,7 +14,7 @@ LL | struct _RangeFrom>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `RangeFull` is forbidden as the type of a const generic parameter --> $DIR/const-generics-range.rs:18:28 @@ -23,7 +23,7 @@ LL | struct _RangeFull; | ^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `RangeInclusive` is forbidden as the type of a const generic parameter --> $DIR/const-generics-range.rs:24:33 @@ -32,7 +32,7 @@ LL | struct _RangeInclusive>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `RangeTo` is forbidden as the type of a const generic parameter --> $DIR/const-generics-range.rs:29:26 @@ -41,7 +41,7 @@ LL | struct _RangeTo>; | ^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `RangeToInclusive` is forbidden as the type of a const generic parameter --> $DIR/const-generics-range.rs:34:35 @@ -50,7 +50,7 @@ LL | struct _RangeToInclusive>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 6 previous errors diff --git a/src/test/ui/const-generics/type-dependent/issue-71348.min.stderr b/src/test/ui/const-generics/type-dependent/issue-71348.min.stderr index 8656239605df..8f240f0d930a 100644 --- a/src/test/ui/const-generics/type-dependent/issue-71348.min.stderr +++ b/src/test/ui/const-generics/type-dependent/issue-71348.min.stderr @@ -5,7 +5,7 @@ LL | trait Get<'a, const N: &'static str> { | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: `&'static str` is forbidden as the type of a const generic parameter --> $DIR/issue-71348.rs:19:25 @@ -14,7 +14,7 @@ LL | fn ask<'a, const N: &'static str>(&'a self) -> &'a >::Ta | ^^^^^^^^^^^^ | = note: the only supported types are integers, `bool` and `char` - = note: more complex types are supported with `#[feature(const_generics)]` + = help: more complex types are supported with `#[feature(const_generics)]` error: aborting due to 2 previous errors diff --git a/src/test/ui/const-generics/wf-misc.min.stderr b/src/test/ui/const-generics/wf-misc.min.stderr index 8b1cf944856d..99142cb6ce7a 100644 --- a/src/test/ui/const-generics/wf-misc.min.stderr +++ b/src/test/ui/const-generics/wf-misc.min.stderr @@ -5,7 +5,7 @@ LL | let _: [u8; N + 1]; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: generic parameters may not be used in const operations --> $DIR/wf-misc.rs:17:21 @@ -14,7 +14,7 @@ LL | let _: Const::<{N + 1}>; | ^ cannot perform const operation using `N` | = help: const parameters may only be used as standalone arguments, i.e. `N` - = note: use #![feature(const_generics)] and #![feature(const_evaluatable_checked)] to allow generic const expressions + = help: use `#![feature(const_generics)]` and `#![feature(const_evaluatable_checked)]` to allow generic const expressions error: aborting due to 2 previous errors