From 64185f205dcbd8db255ad6674e43c63423f2369a Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:14:41 +0100 Subject: [PATCH 01/38] Remove unnecessary or invalid feature attributes --- src/etc/test-float-parse/many-digits.rs | 2 -- src/etc/test-float-parse/rand-f64.rs | 2 -- src/liballoc/benches/lib.rs | 1 - src/liballoc/lib.rs | 8 +------- src/liballoc/tests/lib.rs | 1 - src/libcore/lib.rs | 4 ---- src/libcore/tests/lib.rs | 3 --- src/libstd/lib.rs | 18 +----------------- src/libsyntax/lib.rs | 1 - src/test/run-pass/utf8_chars.rs | 2 +- 10 files changed, 3 insertions(+), 39 deletions(-) diff --git a/src/etc/test-float-parse/many-digits.rs b/src/etc/test-float-parse/many-digits.rs index 674c30ad84e..469a38da2b8 100644 --- a/src/etc/test-float-parse/many-digits.rs +++ b/src/etc/test-float-parse/many-digits.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(rand)] - extern crate rand; mod _common; diff --git a/src/etc/test-float-parse/rand-f64.rs b/src/etc/test-float-parse/rand-f64.rs index 1d82912054e..2994dd9d5e6 100644 --- a/src/etc/test-float-parse/rand-f64.rs +++ b/src/etc/test-float-parse/rand-f64.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(rand)] - extern crate rand; mod _common; diff --git a/src/liballoc/benches/lib.rs b/src/liballoc/benches/lib.rs index 4f69aa6670b..b4f4fd74f3a 100644 --- a/src/liballoc/benches/lib.rs +++ b/src/liballoc/benches/lib.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(rand)] #![feature(repr_simd)] #![feature(slice_sort_by_cached_key)] #![feature(test)] diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index ca1b7507b5e..aaafcd84dd7 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -75,26 +75,22 @@ #![deny(missing_debug_implementations)] #![cfg_attr(test, allow(deprecated))] // rand -#![cfg_attr(not(test), feature(exact_size_is_empty))] #![cfg_attr(not(test), feature(generator_trait))] #![cfg_attr(test, feature(rand, test))] #![feature(allocator_api)] #![feature(allow_internal_unstable)] #![feature(arbitrary_self_types)] -#![feature(ascii_ctype)] #![feature(box_into_raw_non_null)] #![feature(box_patterns)] #![feature(box_syntax)] #![feature(cfg_target_has_atomic)] #![feature(coerce_unsized)] -#![feature(collections_range)] #![feature(const_fn)] #![feature(core_intrinsics)] #![feature(custom_attribute)] #![feature(dropck_eyepatch)] #![feature(exact_size_is_empty)] #![feature(fmt_internals)] -#![feature(from_ref)] #![feature(fundamental)] #![feature(futures_api)] #![feature(lang_items)] @@ -118,12 +114,10 @@ #![feature(allocator_internals)] #![feature(on_unimplemented)] #![feature(exact_chunks)] -#![feature(pointer_methods)] -#![feature(inclusive_range_methods)] #![feature(rustc_const_unstable)] #![feature(const_vec_new)] -#![cfg_attr(not(test), feature(fn_traits, i128))] +#![cfg_attr(not(test), feature(fn_traits))] #![cfg_attr(test, feature(test))] // Allow testing this library diff --git a/src/liballoc/tests/lib.rs b/src/liballoc/tests/lib.rs index 618aff963f2..ad1e5807562 100644 --- a/src/liballoc/tests/lib.rs +++ b/src/liballoc/tests/lib.rs @@ -16,7 +16,6 @@ #![feature(drain_filter)] #![feature(exact_size_is_empty)] #![feature(pattern)] -#![feature(rand)] #![feature(slice_sort_by_cached_key)] #![feature(splice)] #![feature(str_escape)] diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs index 72074e1dbce..a4a01990c22 100644 --- a/src/libcore/lib.rs +++ b/src/libcore/lib.rs @@ -82,7 +82,6 @@ #![feature(concat_idents)] #![feature(const_fn)] #![feature(const_int_ops)] -#![feature(core_float)] #![feature(custom_attribute)] #![feature(doc_cfg)] #![feature(doc_spotlight)] @@ -102,8 +101,6 @@ #![feature(rustc_attrs)] #![feature(rustc_const_unstable)] #![feature(simd_ffi)] -#![feature(core_slice_ext)] -#![feature(core_str_ext)] #![feature(specialization)] #![feature(staged_api)] #![feature(stmt_expr_attributes)] @@ -111,7 +108,6 @@ #![feature(untagged_unions)] #![feature(unwind_attributes)] #![feature(doc_alias)] -#![feature(inclusive_range_methods)] #![feature(mmx_target_feature)] #![feature(tbm_target_feature)] #![feature(sse4a_target_feature)] diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index 2323b30a010..87bb623a5b1 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -8,10 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(ascii_ctype)] #![feature(box_syntax)] #![feature(cell_update)] -#![feature(core_float)] #![feature(core_private_bignum)] #![feature(core_private_diy_float)] #![feature(dec2flt)] @@ -19,7 +17,6 @@ #![feature(euclidean_division)] #![feature(exact_size_is_empty)] #![feature(fixed_size_array)] -#![feature(float_internals)] #![feature(flt2dec)] #![feature(fmt_internals)] #![feature(hashmap_internals)] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 3c01de2e997..4f462658eb6 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -250,17 +250,13 @@ #![feature(cfg_target_thread_local)] #![feature(cfg_target_vendor)] #![feature(char_error_internals)] -#![feature(char_internals)] -#![feature(collections_range)] #![feature(compiler_builtins_lib)] #![feature(const_fn)] #![feature(core_intrinsics)] #![feature(dropck_eyepatch)] #![feature(exact_size_is_empty)] #![feature(external_doc)] -#![feature(fs_read_write)] #![feature(fixed_size_array)] -#![feature(float_from_str_radix)] #![feature(fn_traits)] #![feature(fnbox)] #![feature(futures_api)] @@ -268,7 +264,6 @@ #![feature(hashmap_internals)] #![feature(int_error_internals)] #![feature(integer_atomics)] -#![feature(into_cow)] #![feature(lang_items)] #![feature(libc)] #![feature(link_args)] @@ -277,34 +272,25 @@ #![feature(needs_panic_runtime)] #![feature(never_type)] #![feature(exhaustive_patterns)] -#![feature(num_bits_bytes)] -#![feature(old_wrapping)] #![feature(on_unimplemented)] -#![feature(oom)] #![feature(optin_builtin_traits)] #![feature(panic_internals)] #![feature(panic_unwind)] -#![feature(peek)] #![feature(pin)] -#![feature(placement_new_protocol)] #![feature(prelude_import)] #![feature(ptr_internals)] -#![feature(rand)] #![feature(raw)] #![feature(rustc_attrs)] #![feature(std_internals)] #![feature(stdsimd)] #![feature(shrink_to)] -#![feature(slice_bytes)] #![feature(slice_concat_ext)] #![feature(slice_internals)] #![feature(slice_patterns)] #![feature(staged_api)] #![feature(stmt_expr_attributes)] -#![feature(str_char)] #![feature(str_internals)] -#![feature(str_utf16)] -#![feature(test, rustc_private)] +#![feature(rustc_private)] #![feature(thread_local)] #![feature(toowned_clone_into)] #![feature(try_from)] @@ -313,7 +299,6 @@ #![feature(untagged_unions)] #![feature(unwind_attributes)] #![feature(use_extern_macros)] -#![feature(vec_push_all)] #![feature(doc_cfg)] #![feature(doc_masked)] #![feature(doc_spotlight)] @@ -321,7 +306,6 @@ #![cfg_attr(windows, feature(used))] #![feature(doc_alias)] #![feature(doc_keyword)] -#![feature(float_internals)] #![feature(panic_info_message)] #![feature(panic_implementation)] diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 0c105865e0c..c8e60620248 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -19,7 +19,6 @@ html_root_url = "https://doc.rust-lang.org/nightly/", test(attr(deny(warnings))))] -#![feature(const_atomic_usize_new)] #![feature(crate_visibility_modifier)] #![feature(macro_at_most_once_rep)] #![feature(rustc_attrs)] diff --git a/src/test/run-pass/utf8_chars.rs b/src/test/run-pass/utf8_chars.rs index b54aed79665..2602e395bcc 100644 --- a/src/test/run-pass/utf8_chars.rs +++ b/src/test/run-pass/utf8_chars.rs @@ -9,7 +9,7 @@ // except according to those terms. // -#![feature(core, str_char)] +#![feature(core)] use std::str; From a00ba4d71ea465c7e8074e1abb50970f0c767b28 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:16:28 +0100 Subject: [PATCH 02/38] Correct invalid feature attributes --- src/liballoc/collections/vec_deque.rs | 2 +- src/libcore/char/methods.rs | 20 -------------------- src/libcore/num/mod.rs | 20 -------------------- src/libcore/slice/mod.rs | 10 +++++----- 4 files changed, 6 insertions(+), 46 deletions(-) diff --git a/src/liballoc/collections/vec_deque.rs b/src/liballoc/collections/vec_deque.rs index ba92b886138..7787102ba82 100644 --- a/src/liballoc/collections/vec_deque.rs +++ b/src/liballoc/collections/vec_deque.rs @@ -2370,7 +2370,7 @@ macro_rules! __impl_slice_eq1 { __impl_slice_eq1! { $Lhs, $Rhs, Sized } }; ($Lhs: ty, $Rhs: ty, $Bound: ident) => { - #[stable(feature = "vec-deque-partial-eq-slice", since = "1.17.0")] + #[stable(feature = "vec_deque_partial_eq_slice", since = "1.17.0")] impl<'a, 'b, A: $Bound, B> PartialEq<$Rhs> for $Lhs where A: PartialEq { fn eq(&self, other: &$Rhs) -> bool { if self.len() != other.len() { diff --git a/src/libcore/char/methods.rs b/src/libcore/char/methods.rs index 33fd6947c1e..64a17786b0a 100644 --- a/src/libcore/char/methods.rs +++ b/src/libcore/char/methods.rs @@ -1050,8 +1050,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1084,8 +1082,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1118,8 +1114,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1155,8 +1149,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1189,8 +1181,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1226,8 +1216,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1264,8 +1252,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1298,8 +1284,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1349,8 +1333,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; @@ -1385,8 +1367,6 @@ impl char { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = 'A'; /// let uppercase_g = 'G'; /// let a = 'a'; diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 6e2fbf6f84f..44a3b310ebe 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -3761,8 +3761,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3799,8 +3797,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3837,8 +3833,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3878,8 +3872,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3916,8 +3908,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3957,8 +3947,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -3999,8 +3987,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -4037,8 +4023,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -4092,8 +4076,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; @@ -4132,8 +4114,6 @@ impl u8 { /// # Examples /// /// ``` - /// #![feature(ascii_ctype)] - /// /// let uppercase_a = b'A'; /// let uppercase_g = b'G'; /// let a = b'a'; diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index dfebe460ff8..187ac3c7a7f 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -2007,7 +2007,7 @@ pub trait SliceIndex: private_slice_index::Sealed { fn index_mut(self, slice: &mut T) -> &mut Self::Output; } -#[stable(feature = "slice-get-slice-impls", since = "1.15.0")] +#[stable(feature = "slice_get_slice_impls", since = "1.15.0")] impl SliceIndex<[T]> for usize { type Output = T; @@ -2056,7 +2056,7 @@ impl SliceIndex<[T]> for usize { } } -#[stable(feature = "slice-get-slice-impls", since = "1.15.0")] +#[stable(feature = "slice_get_slice_impls", since = "1.15.0")] impl SliceIndex<[T]> for ops::Range { type Output = [T]; @@ -2117,7 +2117,7 @@ impl SliceIndex<[T]> for ops::Range { } } -#[stable(feature = "slice-get-slice-impls", since = "1.15.0")] +#[stable(feature = "slice_get_slice_impls", since = "1.15.0")] impl SliceIndex<[T]> for ops::RangeTo { type Output = [T]; @@ -2152,7 +2152,7 @@ impl SliceIndex<[T]> for ops::RangeTo { } } -#[stable(feature = "slice-get-slice-impls", since = "1.15.0")] +#[stable(feature = "slice_get_slice_impls", since = "1.15.0")] impl SliceIndex<[T]> for ops::RangeFrom { type Output = [T]; @@ -2187,7 +2187,7 @@ impl SliceIndex<[T]> for ops::RangeFrom { } } -#[stable(feature = "slice-get-slice-impls", since = "1.15.0")] +#[stable(feature = "slice_get_slice_impls", since = "1.15.0")] impl SliceIndex<[T]> for ops::RangeFull { type Output = [T]; From 5242dce01db3fc42d5ec91eb166cce83194149cb Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:20:33 +0100 Subject: [PATCH 03/38] Add lint for unknown feature attributes --- src/librustc/dep_graph/dep_node.rs | 2 + src/librustc/diagnostics.rs | 1 + src/librustc/ich/impls_hir.rs | 5 + src/librustc/lib.rs | 1 + src/librustc/lint/builtin.rs | 9 +- src/librustc/middle/lib_features.rs | 153 +++++++++++++++++++++++++++ src/librustc/middle/stability.rs | 53 +++++----- src/librustc/ty/context.rs | 9 ++ src/librustc/ty/query/config.rs | 12 +++ src/librustc/ty/query/mod.rs | 8 ++ src/librustc/ty/query/plumbing.rs | 2 + src/librustc_lint/lib.rs | 2 +- src/librustc_metadata/cstore_impl.rs | 1 + src/librustc_metadata/decoder.rs | 8 ++ src/librustc_metadata/encoder.rs | 13 +++ src/librustc_metadata/schema.rs | 1 + src/libsyntax/diagnostic_list.rs | 12 +++ 17 files changed, 266 insertions(+), 26 deletions(-) create mode 100644 src/librustc/middle/lib_features.rs diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index 14a818ddafb..f099325dfc1 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -615,6 +615,8 @@ define_dep_nodes!( <'tcx> [input] CrateName(CrateNum), [] ItemChildren(DefId), [] ExternModStmtCnum(DefId), + [input] GetLibFeatures, + [] DefinedLibFeatures(CrateNum), [input] GetLangItems, [] DefinedLangItems(CrateNum), [] MissingLangItems(CrateNum), diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 5ace8397d9f..3b3be757882 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -2138,4 +2138,5 @@ register_diagnostics! { E0708, // `async` non-`move` closures with arguments are not currently supported E0709, // multiple different lifetimes used in arguments of `async fn` E0710, // an unknown tool name found in scoped lint + E0711, // a feature has been declared with conflicting stability attributes } diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs index cac0d182d3a..fe87053681a 100644 --- a/src/librustc/ich/impls_hir.rs +++ b/src/librustc/ich/impls_hir.rs @@ -1072,6 +1072,11 @@ impl_stable_hash_for!(struct hir::def::Export { span }); +impl_stable_hash_for!(struct ::middle::lib_features::LibFeatures { + stable, + unstable +}); + impl<'a> HashStable> for ::middle::lang_items::LangItem { fn hash_stable(&self, _: &mut StableHashingContext<'a>, diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index bac511aac1f..8ff5d33c91d 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -141,6 +141,7 @@ pub mod middle { pub mod exported_symbols; pub mod free_region; pub mod intrinsicck; + pub mod lib_features; pub mod lang_items; pub mod liveness; pub mod mem_categorization; diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 47f7c759d94..6536ab6ea73 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -102,7 +102,13 @@ declare_lint! { declare_lint! { pub UNUSED_FEATURES, Warn, - "unused or unknown features found in crate-level #[feature] directives" + "unused features found in crate-level #[feature] directives" +} + +declare_lint! { + pub UNKNOWN_FEATURES, + Deny, + "unknown features found in crate-level #[feature] directives" } declare_lint! { @@ -362,6 +368,7 @@ impl LintPass for HardwiredLints { UNUSED_MACROS, WARNINGS, UNUSED_FEATURES, + UNKNOWN_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, TRIVIAL_CASTS, diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs new file mode 100644 index 00000000000..27bd69f04fd --- /dev/null +++ b/src/librustc/middle/lib_features.rs @@ -0,0 +1,153 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Detecting lib features (i.e. features that are not lang features). +// +// These are declared using stability attributes (e.g. `#[stable(..)]` +// and `#[unstable(..)]`), but are not declared in one single location +// (unlike lang features), which means we need to collect them instead. + +use ty::TyCtxt; +use syntax::symbol::Symbol; +use syntax::ast::{Attribute, MetaItem, MetaItemKind}; +use syntax_pos::{Span, DUMMY_SP}; +use hir; +use hir::itemlikevisit::ItemLikeVisitor; +use rustc_data_structures::fx::{FxHashSet, FxHashMap}; +use errors::DiagnosticId; + +pub struct LibFeatures { + // A map from feature to stabilisation version. + pub stable: FxHashMap, + pub unstable: FxHashSet, +} + +impl LibFeatures { + fn new() -> LibFeatures { + LibFeatures { + stable: FxHashMap(), + unstable: FxHashSet(), + } + } + + pub fn iter(&self) -> Vec<(Symbol, Option)> { + self.stable.iter().map(|(f, s)| (*f, Some(*s))) + .chain(self.unstable.iter().map(|f| (*f, None))) + .collect() + } +} + +pub struct LibFeatureCollector<'a, 'tcx: 'a> { + tcx: TyCtxt<'a, 'tcx, 'tcx>, + lib_features: LibFeatures, +} + +impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { + fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> LibFeatureCollector<'a, 'tcx> { + LibFeatureCollector { + tcx, + lib_features: LibFeatures::new(), + } + } + + fn extract(&self, attrs: &[Attribute]) -> Vec<(Symbol, Option, Span)> { + let stab_attrs = vec!["stable", "unstable", "rustc_const_unstable"]; + let mut features = vec![]; + + for attr in attrs { + // FIXME(varkor): the stability attribute might be behind a `#[cfg]` attribute. + + // Find a stability attribute (i.e. `#[stable(..)]`, `#[unstable(..)]`, + // `#[rustc_const_unstable(..)]`). + if stab_attrs.iter().any(|stab_attr| attr.check_name(stab_attr)) { + let meta_item = attr.meta(); + if let Some(MetaItem { node: MetaItemKind::List(ref metas), .. }) = meta_item { + let mut feature = None; + let mut since = None; + for meta in metas { + if let Some(mi) = meta.meta_item() { + // Find the `feature = ".."` meta-item. + match (&*mi.name().as_str(), mi.value_str()) { + ("feature", val) => feature = val, + ("since", val) => since = val, + _ => {} + } + } + } + if let Some(feature) = feature { + features.push((feature, since, attr.span)); + } + // We need to iterate over the other attributes, because + // `rustc_const_unstable` is not mutually exclusive with + // the other stability attributes, so we can't just `break` + // here. + } + } + } + + features + } + + fn collect_feature(&mut self, feature: Symbol, since: Option, span: Span) { + let already_in_stable = self.lib_features.stable.contains_key(&feature); + let already_in_unstable = self.lib_features.unstable.contains(&feature); + + match (since, already_in_stable, already_in_unstable) { + (Some(since), _, false) => { + self.lib_features.stable.insert(feature, since); + } + (None, false, _) => { + self.lib_features.unstable.insert(feature); + } + (Some(_), _, true) | (None, true, _) => { + let msg = format!( + "feature `{}` is declared {}, but was previously declared {}", + feature, + if since.is_some() { "stable"} else { "unstable" }, + if since.is_none() { "stable"} else { "unstable" }, + ); + self.tcx.sess.struct_span_err_with_code(span, &msg, + DiagnosticId::Error("E0711".into())).emit(); + } + } + } + + fn collect_from_attrs(&mut self, attrs: &[Attribute]) { + for (feature, stable, span) in self.extract(attrs) { + self.collect_feature(feature, stable, span); + } + } +} + +impl<'a, 'v, 'tcx> ItemLikeVisitor<'v> for LibFeatureCollector<'a, 'tcx> { + fn visit_item(&mut self, item: &hir::Item) { + self.collect_from_attrs(&item.attrs); + } + + fn visit_trait_item(&mut self, trait_item: &hir::TraitItem) { + self.collect_from_attrs(&trait_item.attrs); + } + + fn visit_impl_item(&mut self, impl_item: &hir::ImplItem) { + self.collect_from_attrs(&impl_item.attrs); + } +} + +pub fn collect<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> LibFeatures { + let mut collector = LibFeatureCollector::new(tcx); + for &cnum in tcx.crates().iter() { + for &(feature, since) in tcx.defined_lib_features(cnum).iter() { + collector.collect_feature(feature, since, DUMMY_SP); + } + } + collector.collect_from_attrs(&tcx.hir.krate().attrs); + tcx.hir.krate().visit_all_item_likes(&mut collector); + collector.lib_features +} diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 262a617cb69..75dbd70a982 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -813,37 +813,42 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { krate.visit_all_item_likes(&mut missing.as_deep_visitor()); } - let ref declared_lib_features = tcx.features().declared_lib_features; - let mut remaining_lib_features: FxHashMap - = declared_lib_features.clone().into_iter().collect(); - remaining_lib_features.remove(&Symbol::intern("proc_macro")); - for &(ref stable_lang_feature, span) in &tcx.features().declared_stable_lang_features { - let version = find_lang_feature_accepted_version(&stable_lang_feature.as_str()) + let since = find_lang_feature_accepted_version(&stable_lang_feature.as_str()) .expect("unexpectedly couldn't find version feature was stabilized"); tcx.lint_node(lint::builtin::STABLE_FEATURES, ast::CRATE_NODE_ID, span, - &format_stable_since_msg(version)); + &format_stable_since_msg(*stable_lang_feature, since)); } - // FIXME(#44232) the `used_features` table no longer exists, so we don't - // lint about unknown or unused features. We should reenable - // this one day! - // - // let index = tcx.stability(); - // for (used_lib_feature, level) in &index.used_features { - // remaining_lib_features.remove(used_lib_feature); - // } - // - // for &span in remaining_lib_features.values() { - // tcx.lint_node(lint::builtin::UNUSED_FEATURES, - // ast::CRATE_NODE_ID, - // span, - // "unused or unknown feature"); - // } + let ref declared_lib_features = tcx.features().declared_lib_features; + + let mut remaining_lib_features = FxHashMap(); + for (feature, span) in declared_lib_features.clone().into_iter() { + remaining_lib_features.insert(feature, span); + } + // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, + // but it happens just to affect `libc`, so we're just going to hard-code it for now. + remaining_lib_features.remove(&Symbol::intern("libc")); + + for (feature, stable) in tcx.lib_features().iter() { + remaining_lib_features.remove(&feature); + } + + for (feature, span) in remaining_lib_features { + tcx.lint_node(lint::builtin::UNKNOWN_FEATURES, + ast::CRATE_NODE_ID, + span, + &format!("unknown feature `{}`", feature)); + } + + // FIXME(#44232): the `used_features` table no longer exists, so we + // don't lint about unused features. We should reenable this one day! } -fn format_stable_since_msg(version: &str) -> String { - format!("this feature has been stable since {}. Attribute no longer needed", version) +fn format_stable_since_msg(feature: Symbol, since: &str) -> String { + // "this feature has been stable since {}. Attribute no longer needed" + format!("the feature `{}` has been stable since {} and no longer requires \ + an attribute to enable", feature, since) } diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 0cfdea68e88..21f482ecf39 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -1192,6 +1192,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { self.sess.consider_optimizing(&cname, msg) } + pub fn lib_features(self) -> Lrc { + self.get_lib_features(LOCAL_CRATE) + } + pub fn lang_items(self) -> Lrc { self.get_lang_items(LOCAL_CRATE) } @@ -2840,6 +2844,11 @@ pub fn provide(providers: &mut ty::query::Providers) { assert_eq!(id, LOCAL_CRATE); tcx.crate_name }; + providers.get_lib_features = |tcx, id| { + assert_eq!(id, LOCAL_CRATE); + // FIXME(#42293): see comment below. + tcx.dep_graph.with_ignore(|| Lrc::new(middle::lib_features::collect(tcx))) + }; providers.get_lang_items = |tcx, id| { assert_eq!(id, LOCAL_CRATE); // FIXME(#42293) Right now we insert a `with_ignore` node in the dep diff --git a/src/librustc/ty/query/config.rs b/src/librustc/ty/query/config.rs index d2648cad55e..ecf35c1b0da 100644 --- a/src/librustc/ty/query/config.rs +++ b/src/librustc/ty/query/config.rs @@ -626,6 +626,18 @@ impl<'tcx> QueryDescription<'tcx> for queries::crate_name<'tcx> { } } +impl<'tcx> QueryDescription<'tcx> for queries::get_lib_features<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("calculating the lib features map") + } +} + +impl<'tcx> QueryDescription<'tcx> for queries::defined_lib_features<'tcx> { + fn describe(_tcx: TyCtxt, _: CrateNum) -> String { + format!("calculating the lib features defined in a crate") + } +} + impl<'tcx> QueryDescription<'tcx> for queries::get_lang_items<'tcx> { fn describe(_tcx: TyCtxt, _: CrateNum) -> String { "calculating the lang items map".to_string() diff --git a/src/librustc/ty/query/mod.rs b/src/librustc/ty/query/mod.rs index ab9bdd82e01..35080123d3e 100644 --- a/src/librustc/ty/query/mod.rs +++ b/src/librustc/ty/query/mod.rs @@ -24,6 +24,7 @@ use middle::reachable::ReachableSet; use middle::region; use middle::resolve_lifetime::{ResolveLifetimes, Region, ObjectLifetimeDefault}; use middle::stability::{self, DeprecationEntry}; +use middle::lib_features::LibFeatures; use middle::lang_items::{LanguageItems, LangItem}; use middle::exported_symbols::{SymbolExportLevel, ExportedSymbol}; use mir::interpret::ConstEvalResult; @@ -492,6 +493,9 @@ define_queries! { <'tcx> [] fn item_children: ItemChildren(DefId) -> Lrc>, [] fn extern_mod_stmt_cnum: ExternModStmtCnum(DefId) -> Option, + [] fn get_lib_features: get_lib_features_node(CrateNum) -> Lrc, + [] fn defined_lib_features: DefinedLibFeatures(CrateNum) + -> Lrc)>>, [] fn get_lang_items: get_lang_items_node(CrateNum) -> Lrc, [] fn defined_lang_items: DefinedLangItems(CrateNum) -> Lrc>, [] fn missing_lang_items: MissingLangItems(CrateNum) -> Lrc>, @@ -800,6 +804,10 @@ fn link_args_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { DepConstructor::LinkArgs } +fn get_lib_features_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { + DepConstructor::GetLibFeatures +} + fn get_lang_items_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { DepConstructor::GetLangItems } diff --git a/src/librustc/ty/query/plumbing.rs b/src/librustc/ty/query/plumbing.rs index 0fa643d796e..f59e48cb351 100644 --- a/src/librustc/ty/query/plumbing.rs +++ b/src/librustc/ty/query/plumbing.rs @@ -1218,6 +1218,8 @@ pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>, DepKind::CrateName => { force!(crate_name, krate!()); } DepKind::ItemChildren => { force!(item_children, def_id!()); } DepKind::ExternModStmtCnum => { force!(extern_mod_stmt_cnum, def_id!()); } + DepKind::GetLibFeatures => { force!(get_lib_features, LOCAL_CRATE); } + DepKind::DefinedLibFeatures => { force!(defined_lib_features, krate!()); } DepKind::GetLangItems => { force!(get_lang_items, LOCAL_CRATE); } DepKind::DefinedLangItems => { force!(defined_lang_items, krate!()); } DepKind::MissingLangItems => { force!(missing_lang_items, krate!()); } diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index b92ac0ff57b..396e5e869f3 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -188,6 +188,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { UNUSED_DOC_COMMENTS, UNUSED_EXTERN_CRATES, UNUSED_FEATURES, + UNKNOWN_FEATURES, UNUSED_LABELS, UNUSED_PARENS); @@ -342,7 +343,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { store.register_renamed("bare_trait_object", "bare_trait_objects"); store.register_renamed("unstable_name_collision", "unstable_name_collisions"); store.register_renamed("unused_doc_comment", "unused_doc_comments"); - store.register_renamed("unknown_features", "unused_features"); store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate"); store.register_removed("negate_unsigned", "cast a signed value instead"); store.register_removed("raw_pointer_derive", "using derive with raw pointers is ok"); diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 916c0920e0b..060dddd5343 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -240,6 +240,7 @@ provide! { <'tcx> tcx, def_id, other, cdata, cdata.each_child_of_item(def_id.index, |child| result.push(child), tcx.sess); Lrc::new(result) } + defined_lib_features => { Lrc::new(cdata.get_lib_features()) } defined_lang_items => { Lrc::new(cdata.get_lang_items()) } missing_lang_items => { Lrc::new(cdata.get_missing_lang_items()) } diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index ab566654c38..45a61ec3308 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -645,6 +645,14 @@ impl<'a, 'tcx> CrateMetadata { self.get_impl_data(id).trait_ref.map(|tr| tr.decode((self, tcx))) } + /// Iterates over all the stability attributes in the given crate. + pub fn get_lib_features(&self) -> Vec<(ast::Name, Option)> { + self.root + .lib_features + .decode(self) + .collect() + } + /// Iterates over the language items in the given crate. pub fn get_lang_items(&self) -> Vec<(DefId, usize)> { self.root diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 4a02a278bc1..9bb5a849bc7 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -394,6 +394,11 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { ()); let dep_bytes = self.position() - i; + // Encode the lib features. + i = self.position(); + let lib_features = self.tracked(IsolatedEncoder::encode_lib_features, ()); + let lib_feature_bytes = self.position() - i; + // Encode the language items. i = self.position(); let lang_items = self.tracked(IsolatedEncoder::encode_lang_items, ()); @@ -513,6 +518,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { crate_deps, dylib_dependency_formats, + lib_features, lang_items, lang_items_missing, native_libraries, @@ -537,6 +543,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { println!("metadata stats:"); println!(" dep bytes: {}", dep_bytes); + println!(" lib feature bytes: {}", lib_feature_bytes); println!(" lang item bytes: {}", lang_item_bytes); println!(" native bytes: {}", native_lib_bytes); println!(" codemap bytes: {}", codemap_bytes); @@ -1456,6 +1463,12 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { self.lazy_seq_ref(deps.iter().map(|&(_, ref dep)| dep)) } + fn encode_lib_features(&mut self, _: ()) -> LazySeq<(ast::Name, Option)> { + let tcx = self.tcx; + let lib_features = tcx.lib_features(); + self.lazy_seq(lib_features.iter()) + } + fn encode_lang_items(&mut self, _: ()) -> LazySeq<(DefIndex, usize)> { let tcx = self.tcx; let lang_items = tcx.lang_items(); diff --git a/src/librustc_metadata/schema.rs b/src/librustc_metadata/schema.rs index d7c54cbc81d..894c7cbf683 100644 --- a/src/librustc_metadata/schema.rs +++ b/src/librustc_metadata/schema.rs @@ -198,6 +198,7 @@ pub struct CrateRoot { pub crate_deps: LazySeq, pub dylib_dependency_formats: LazySeq>, + pub lib_features: LazySeq<(Symbol, Option)>, pub lang_items: LazySeq<(DefIndex, usize)>, pub lang_items_missing: LazySeq, pub native_libraries: LazySeq, diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index 8534969c623..20be7f8361a 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -374,6 +374,18 @@ and likely to change in the future. "##, +E0635: r##" +The `#![feature]` attribute specified an unknown feature. + +Erroneous code example: + +```compile_fail,E0635 +#![feature(nonexistent_rust_feature)] // error: unknown feature +``` + +"##, + + } register_diagnostics! { From 70ff6fd46f1e46faca928241448095866d46194d Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:21:03 +0100 Subject: [PATCH 04/38] Add error for inconsistent stability `since` value --- src/librustc/middle/lib_features.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index 27bd69f04fd..e451cf5cfa1 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -101,6 +101,21 @@ impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { match (since, already_in_stable, already_in_unstable) { (Some(since), _, false) => { + if let Some(prev_since) = self.lib_features.stable.get(&feature) { + if *prev_since != since { + let msg = format!( + "feature `{}` is declared stable since {}, \ + but was previously declared stable since {}", + feature, + since, + prev_since, + ); + self.tcx.sess.struct_span_err_with_code(span, &msg, + DiagnosticId::Error("E0711".into())).emit(); + return; + } + } + self.lib_features.stable.insert(feature, since); } (None, false, _) => { From 358460171580272faf1f68dfc06d58c08bb5fcb1 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:21:35 +0100 Subject: [PATCH 05/38] Trigger stable feature lint for lib features --- src/librustc/middle/stability.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 75dbd70a982..50f94985487 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -833,6 +833,16 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { remaining_lib_features.remove(&Symbol::intern("libc")); for (feature, stable) in tcx.lib_features().iter() { + // Warn if the user has enabled an already-stable feature. + if let Some(since) = stable { + if let Some(span) = remaining_lib_features.get(&feature) { + tcx.lint_node(lint::builtin::STABLE_FEATURES, + ast::CRATE_NODE_ID, + *span, + &format_stable_since_msg(feature, &since.as_str())); + } + } + remaining_lib_features.remove(&feature); } From fc99ea7ffa1f2dc3407e4f2b7eb64e36532cb5f9 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 01:22:01 +0100 Subject: [PATCH 06/38] Add a lint for duplicate feature attributes --- src/librustc/lint/builtin.rs | 7 +++++++ src/librustc/middle/stability.rs | 7 +++++++ src/librustc_lint/lib.rs | 1 + 3 files changed, 15 insertions(+) diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 6536ab6ea73..2301055e5ce 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -111,6 +111,12 @@ declare_lint! { "unknown features found in crate-level #[feature] directives" } +declare_lint! { + pub DUPLICATE_FEATURES, + Deny, + "duplicate features found in crate-level #[feature] directives" +} + declare_lint! { pub STABLE_FEATURES, Warn, @@ -369,6 +375,7 @@ impl LintPass for HardwiredLints { WARNINGS, UNUSED_FEATURES, UNKNOWN_FEATURES, + DUPLICATE_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, TRIVIAL_CASTS, diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 50f94985487..9b5a9dfd5b3 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -826,6 +826,13 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { let mut remaining_lib_features = FxHashMap(); for (feature, span) in declared_lib_features.clone().into_iter() { + // Warn if the user enables a feature multiple times. + if remaining_lib_features.contains_key(&feature) { + tcx.lint_node(lint::builtin::DUPLICATE_FEATURES, + ast::CRATE_NODE_ID, + span, + &format!("duplicate `{}` feature attribute", feature)); + } remaining_lib_features.insert(feature, span); } // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 396e5e869f3..4d8cee294e3 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -189,6 +189,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { UNUSED_EXTERN_CRATES, UNUSED_FEATURES, UNKNOWN_FEATURES, + DUPLICATE_FEATURES, UNUSED_LABELS, UNUSED_PARENS); From a92d3a36066e966b405a28db2ee4ae61a934f3c8 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 02:03:01 +0100 Subject: [PATCH 07/38] Add duplicity lint for lang features --- src/librustc/ich/impls_syntax.rs | 2 +- src/librustc/middle/stability.rs | 53 +++++++++++++++++++------------- src/libsyntax/feature_gate.rs | 16 +++++----- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/librustc/ich/impls_syntax.rs b/src/librustc/ich/impls_syntax.rs index 2ab0124397b..d086d3bd28d 100644 --- a/src/librustc/ich/impls_syntax.rs +++ b/src/librustc/ich/impls_syntax.rs @@ -511,7 +511,7 @@ impl<'gcx> HashStable> for feature_gate::Features { hasher: &mut StableHasher) { // Unfortunately we cannot exhaustively list fields here, since the // struct is macro generated. - self.declared_stable_lang_features.hash_stable(hcx, hasher); + self.declared_lang_features.hash_stable(hcx, hasher); self.declared_lib_features.hash_stable(hcx, hasher); self.walk_feature_fields(|feature_name, value| { diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 9b5a9dfd5b3..85d4bcbd0d4 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -23,7 +23,7 @@ use syntax::symbol::Symbol; use syntax_pos::{Span, MultiSpan}; use syntax::ast; use syntax::ast::{NodeId, Attribute}; -use syntax::feature_gate::{GateIssue, emit_feature_err, find_lang_feature_accepted_version}; +use syntax::feature_gate::{GateIssue, emit_feature_err}; use syntax::attr::{self, Stability, Deprecation}; use util::nodemap::{FxHashSet, FxHashMap}; @@ -813,40 +813,51 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { krate.visit_all_item_likes(&mut missing.as_deep_visitor()); } - for &(ref stable_lang_feature, span) in &tcx.features().declared_stable_lang_features { - let since = find_lang_feature_accepted_version(&stable_lang_feature.as_str()) - .expect("unexpectedly couldn't find version feature was stabilized"); - tcx.lint_node(lint::builtin::STABLE_FEATURES, - ast::CRATE_NODE_ID, - span, - &format_stable_since_msg(*stable_lang_feature, since)); - } - let ref declared_lib_features = tcx.features().declared_lib_features; - - let mut remaining_lib_features = FxHashMap(); - for (feature, span) in declared_lib_features.clone().into_iter() { - // Warn if the user enables a feature multiple times. - if remaining_lib_features.contains_key(&feature) { + let declared_lang_features = &tcx.features().declared_lang_features; + let mut lang_features = FxHashSet(); + for &(ref feature, span, since) in declared_lang_features { + if let Some(since) = since { + // Warn if the user has enabled an already-stable lang feature. + tcx.lint_node(lint::builtin::STABLE_FEATURES, + ast::CRATE_NODE_ID, + span, + &format_stable_since_msg(*feature, since)); + } + if lang_features.contains(&feature) { + // Warn if the user enables a lang feature multiple times. tcx.lint_node(lint::builtin::DUPLICATE_FEATURES, ast::CRATE_NODE_ID, span, &format!("duplicate `{}` feature attribute", feature)); } - remaining_lib_features.insert(feature, span); + lang_features.insert(feature); + } + + let declared_lib_features = &tcx.features().declared_lib_features; + let mut remaining_lib_features = FxHashMap(); + for (feature, span) in declared_lib_features { + // Warn if the user enables a lib feature multiple times. + if remaining_lib_features.contains_key(&feature) { + tcx.lint_node(lint::builtin::DUPLICATE_FEATURES, + ast::CRATE_NODE_ID, + *span, + &format!("duplicate `{}` feature attribute", feature)); + } + remaining_lib_features.insert(feature, span.clone()); } // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, // but it happens just to affect `libc`, so we're just going to hard-code it for now. remaining_lib_features.remove(&Symbol::intern("libc")); for (feature, stable) in tcx.lib_features().iter() { - // Warn if the user has enabled an already-stable feature. + // Warn if the user has enabled an already-stable lib feature. if let Some(since) = stable { if let Some(span) = remaining_lib_features.get(&feature) { tcx.lint_node(lint::builtin::STABLE_FEATURES, - ast::CRATE_NODE_ID, - *span, - &format_stable_since_msg(feature, &since.as_str())); + ast::CRATE_NODE_ID, + *span, + &format_stable_since_msg(feature, since)); } } @@ -864,7 +875,7 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { // don't lint about unused features. We should reenable this one day! } -fn format_stable_since_msg(feature: Symbol, since: &str) -> String { +fn format_stable_since_msg(feature: Symbol, since: Symbol) -> String { // "this feature has been stable since {}. Attribute no longer needed" format!("the feature `{}` has been stable since {} and no longer requires \ an attribute to enable", feature, since) diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 77e3faa5b1f..9ca9909ffa6 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -59,8 +59,8 @@ macro_rules! declare_features { /// A set of features to be used by later passes. #[derive(Clone)] pub struct Features { - /// `#![feature]` attrs for stable language features, for error reporting - pub declared_stable_lang_features: Vec<(Symbol, Span)>, + /// `#![feature]` attrs for language features, for error reporting + pub declared_lang_features: Vec<(Symbol, Span, Option)>, /// `#![feature]` attrs for non-language (library) features pub declared_lib_features: Vec<(Symbol, Span)>, $(pub $feature: bool),+ @@ -69,7 +69,7 @@ macro_rules! declare_features { impl Features { pub fn new() -> Features { Features { - declared_stable_lang_features: Vec::new(), + declared_lang_features: Vec::new(), declared_lib_features: Vec::new(), $($feature: false),+ } @@ -1220,10 +1220,6 @@ pub fn check_attribute(attr: &ast::Attribute, parse_sess: &ParseSess, features: cx.check_attribute(attr, true); } -pub fn find_lang_feature_accepted_version(feature: &str) -> Option<&'static str> { - ACCEPTED_FEATURES.iter().find(|t| t.0 == feature).map(|t| t.1) -} - fn find_lang_feature_issue(feature: &str) -> Option { if let Some(info) = ACTIVE_FEATURES.iter().find(|t| t.0 == feature) { let issue = info.2; @@ -1940,6 +1936,7 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], if let Some((.., set)) = ACTIVE_FEATURES.iter().find(|f| name == f.0) { set(&mut features, mi.span); feature_checker.collect(&features, mi.span); + features.declared_lang_features.push((name, mi.span, None)); continue } @@ -1950,8 +1947,9 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], continue } - if ACCEPTED_FEATURES.iter().any(|f| name == f.0) { - features.declared_stable_lang_features.push((name, mi.span)); + if let Some((_, since, ..)) = ACCEPTED_FEATURES.iter().find(|f| name == f.0) { + let since = Some(Symbol::intern(since)); + features.declared_lang_features.push((name, mi.span, since)); continue } From 82a98ac03d6d1c9d83966a637095c819b7da9086 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 02:20:50 +0100 Subject: [PATCH 08/38] Get around tidy bug --- src/librustc/middle/lib_features.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index e451cf5cfa1..78c95fcbc62 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -10,8 +10,8 @@ // Detecting lib features (i.e. features that are not lang features). // -// These are declared using stability attributes (e.g. `#[stable(..)]` -// and `#[unstable(..)]`), but are not declared in one single location +// These are declared using stability attributes (e.g. `#[stable (..)]` +// and `#[unstable (..)]`), but are not declared in one single location // (unlike lang features), which means we need to collect them instead. use ty::TyCtxt; @@ -64,8 +64,8 @@ impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { for attr in attrs { // FIXME(varkor): the stability attribute might be behind a `#[cfg]` attribute. - // Find a stability attribute (i.e. `#[stable(..)]`, `#[unstable(..)]`, - // `#[rustc_const_unstable(..)]`). + // Find a stability attribute (i.e. `#[stable (..)]`, `#[unstable (..)]`, + // `#[rustc_const_unstable (..)]`). if stab_attrs.iter().any(|stab_attr| attr.check_name(stab_attr)) { let meta_item = attr.meta(); if let Some(MetaItem { node: MetaItemKind::List(ref metas), .. }) = meta_item { From 99db9d63eb0bbc35b58983d11d020e2dafc5b985 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 03:14:09 +0100 Subject: [PATCH 09/38] Fix test/debuginfo --- src/test/debuginfo/constant-debug-locs.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/debuginfo/constant-debug-locs.rs b/src/test/debuginfo/constant-debug-locs.rs index 8fc910d8a6d..f5dab5a55b4 100644 --- a/src/test/debuginfo/constant-debug-locs.rs +++ b/src/test/debuginfo/constant-debug-locs.rs @@ -15,7 +15,6 @@ #![allow(dead_code, unused_variables)] #![feature(omit_gdb_pretty_printer_section)] #![omit_gdb_pretty_printer_section] -#![feature(static_mutex)] // This test makes sure that the compiler doesn't crash when trying to assign // debug locations to const-expressions. From 61b9d87c2816d476ce74b15691db157af420f069 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 03:14:22 +0100 Subject: [PATCH 10/38] Fix test/run-fail --- src/test/run-fail/panic-set-handler.rs | 2 -- src/test/run-fail/panic-set-unset-handler.rs | 2 -- src/test/run-fail/panic-take-handler-nop.rs | 2 -- 3 files changed, 6 deletions(-) diff --git a/src/test/run-fail/panic-set-handler.rs b/src/test/run-fail/panic-set-handler.rs index 68f1c4ed0bc..2d430be07ef 100644 --- a/src/test/run-fail/panic-set-handler.rs +++ b/src/test/run-fail/panic-set-handler.rs @@ -10,8 +10,6 @@ // error-pattern:greetings from the panic handler -#![feature(panic_handler)] - use std::panic; fn main() { diff --git a/src/test/run-fail/panic-set-unset-handler.rs b/src/test/run-fail/panic-set-unset-handler.rs index 072139a8c9b..e7659d0bd88 100644 --- a/src/test/run-fail/panic-set-unset-handler.rs +++ b/src/test/run-fail/panic-set-unset-handler.rs @@ -10,8 +10,6 @@ // error-pattern:thread 'main' panicked at 'foobar' -#![feature(panic_handler)] - use std::panic; fn main() { diff --git a/src/test/run-fail/panic-take-handler-nop.rs b/src/test/run-fail/panic-take-handler-nop.rs index 0add63c6d64..46e937c5d9b 100644 --- a/src/test/run-fail/panic-take-handler-nop.rs +++ b/src/test/run-fail/panic-take-handler-nop.rs @@ -10,8 +10,6 @@ // error-pattern:thread 'main' panicked at 'foobar' -#![feature(panic_handler)] - use std::panic; fn main() { From 279fbaa29c4b7007497d5273c0d11d4e9e843d74 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 03:14:42 +0100 Subject: [PATCH 11/38] Fix test/run-pass --- src/test/run-pass/allocator/auxiliary/custom.rs | 2 +- src/test/run-pass/allocator/xcrate-use2.rs | 2 +- src/test/run-pass/async-await.rs | 3 +++ src/test/run-pass/c-stack-returning-int64.rs | 2 +- src/test/run-pass/child-outlives-parent.rs | 2 -- src/test/run-pass/clone-with-exterior.rs | 2 +- src/test/run-pass/comm.rs | 2 -- src/test/run-pass/core-run-destroy.rs | 2 +- src/test/run-pass/deriving-hash.rs | 3 --- src/test/run-pass/env-home-dir.rs | 2 -- src/test/run-pass/extern-call-scrub.rs | 2 +- src/test/run-pass/foreign-fn-linkname.rs | 2 +- src/test/run-pass/hashmap-memory.rs | 1 - src/test/run-pass/init-large-type.rs | 2 +- src/test/run-pass/issue-13259-windows-tcb-trash.rs | 2 +- src/test/run-pass/issue-13304.rs | 2 +- src/test/run-pass/issue-14456.rs | 2 +- src/test/run-pass/issue-20091.rs | 2 +- src/test/run-pass/issue-20454.rs | 2 -- src/test/run-pass/issue-22577.rs | 2 -- src/test/run-pass/issue-2718.rs | 2 -- src/test/run-pass/issue-3609.rs | 3 --- src/test/run-pass/issue-8827.rs | 2 -- src/test/run-pass/ivec-tag.rs | 2 -- src/test/run-pass/kindck-implicit-close-over-mut-var.rs | 2 -- src/test/run-pass/macro-stability.rs | 3 +++ src/test/run-pass/moves-based-on-type-capture-clause.rs | 2 -- src/test/run-pass/panic-handler-chain.rs | 2 +- src/test/run-pass/panic-handler-flail-wildly.rs | 3 ++- src/test/run-pass/panic-handler-set-twice.rs | 2 +- src/test/run-pass/panic-recover-propagate.rs | 2 -- .../panic-runtime/abort-link-to-unwinding-crates.rs | 3 +++ src/test/run-pass/panic-runtime/abort.rs | 3 +++ src/test/run-pass/panic-runtime/link-to-abort.rs | 6 ++++-- src/test/run-pass/realloc-16687.rs | 2 +- src/test/run-pass/send-resource.rs | 2 -- src/test/run-pass/std-sync-right-kind-impls.rs | 3 --- src/test/run-pass/sync-send-iterators-in-libcollections.rs | 2 +- src/test/run-pass/sync-send-iterators-in-libcore.rs | 1 - src/test/run-pass/task-comm-0.rs | 2 -- src/test/run-pass/task-comm-1.rs | 2 -- src/test/run-pass/task-comm-10.rs | 2 -- src/test/run-pass/task-comm-11.rs | 2 -- src/test/run-pass/task-comm-12.rs | 2 -- src/test/run-pass/task-comm-13.rs | 2 -- src/test/run-pass/task-comm-14.rs | 2 -- src/test/run-pass/task-comm-15.rs | 2 -- src/test/run-pass/task-comm-17.rs | 2 -- src/test/run-pass/task-comm-3.rs | 2 -- src/test/run-pass/task-comm-7.rs | 1 - src/test/run-pass/task-comm-9.rs | 2 -- src/test/run-pass/task-life-0.rs | 2 -- src/test/run-pass/task-spawn-move-and-copy.rs | 2 +- src/test/run-pass/threads.rs | 2 -- src/test/run-pass/trait-bounds-in-arc.rs | 2 +- src/test/run-pass/x86stdcall2.rs | 2 -- 56 files changed, 36 insertions(+), 85 deletions(-) diff --git a/src/test/run-pass/allocator/auxiliary/custom.rs b/src/test/run-pass/allocator/auxiliary/custom.rs index 02e86fa19f8..b17464e0419 100644 --- a/src/test/run-pass/allocator/auxiliary/custom.rs +++ b/src/test/run-pass/allocator/auxiliary/custom.rs @@ -10,7 +10,7 @@ // no-prefer-dynamic -#![feature(heap_api, allocator_api)] +#![feature(allocator_api)] #![crate_type = "rlib"] use std::alloc::{GlobalAlloc, System, Layout}; diff --git a/src/test/run-pass/allocator/xcrate-use2.rs b/src/test/run-pass/allocator/xcrate-use2.rs index fbde7e855c2..7a45fd28bdb 100644 --- a/src/test/run-pass/allocator/xcrate-use2.rs +++ b/src/test/run-pass/allocator/xcrate-use2.rs @@ -13,7 +13,7 @@ // aux-build:helper.rs // no-prefer-dynamic -#![feature(heap_api, allocator_api)] +#![feature(allocator_api)] extern crate custom; extern crate custom_as_global; diff --git a/src/test/run-pass/async-await.rs b/src/test/run-pass/async-await.rs index 0ac37485d3d..669d61fdb19 100644 --- a/src/test/run-pass/async-await.rs +++ b/src/test/run-pass/async-await.rs @@ -10,6 +10,9 @@ // edition:2018 +// FIXME(varkor): `await_macro` isn't visible. +#![allow(unknown_features)] + #![feature(arbitrary_self_types, async_await, await_macro, futures_api, pin)] use std::boxed::PinBox; diff --git a/src/test/run-pass/c-stack-returning-int64.rs b/src/test/run-pass/c-stack-returning-int64.rs index 46b3fd1f1e7..56a0437146b 100644 --- a/src/test/run-pass/c-stack-returning-int64.rs +++ b/src/test/run-pass/c-stack-returning-int64.rs @@ -10,7 +10,7 @@ // ignore-wasm32-bare no libc to test with -#![feature(libc, std_misc)] +#![feature(libc)] extern crate libc; diff --git a/src/test/run-pass/child-outlives-parent.rs b/src/test/run-pass/child-outlives-parent.rs index e45f7c2bba6..03c80e49741 100644 --- a/src/test/run-pass/child-outlives-parent.rs +++ b/src/test/run-pass/child-outlives-parent.rs @@ -13,8 +13,6 @@ // pretty-expanded FIXME #23616 // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; fn child2(_s: String) { } diff --git a/src/test/run-pass/clone-with-exterior.rs b/src/test/run-pass/clone-with-exterior.rs index 384fb92954d..48aa41cf1d1 100644 --- a/src/test/run-pass/clone-with-exterior.rs +++ b/src/test/run-pass/clone-with-exterior.rs @@ -11,7 +11,7 @@ // ignore-emscripten no threads support #![allow(unknown_features)] -#![feature(box_syntax, std_misc)] +#![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/comm.rs b/src/test/run-pass/comm.rs index d7cb8bc991a..7c78cbdce08 100644 --- a/src/test/run-pass/comm.rs +++ b/src/test/run-pass/comm.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/core-run-destroy.rs b/src/test/run-pass/core-run-destroy.rs index 13118c48d6e..eaec9b1926a 100644 --- a/src/test/run-pass/core-run-destroy.rs +++ b/src/test/run-pass/core-run-destroy.rs @@ -16,7 +16,7 @@ // memory, which makes for some *confusing* logs. That's why these are here // instead of in std. -#![feature(libc, std_misc, duration)] +#![feature(libc, duration)] extern crate libc; diff --git a/src/test/run-pass/deriving-hash.rs b/src/test/run-pass/deriving-hash.rs index 18b2fbe015b..ceeb4266396 100644 --- a/src/test/run-pass/deriving-hash.rs +++ b/src/test/run-pass/deriving-hash.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![feature(hash_default)] - use std::hash::{Hash, SipHasher, Hasher}; use std::mem::size_of; diff --git a/src/test/run-pass/env-home-dir.rs b/src/test/run-pass/env-home-dir.rs index 9bbff1eeb81..e92f24a2751 100644 --- a/src/test/run-pass/env-home-dir.rs +++ b/src/test/run-pass/env-home-dir.rs @@ -11,8 +11,6 @@ // ignore-cloudabi no environment variables present // ignore-emscripten env vars don't work? -#![feature(path)] - use std::env::*; use std::path::PathBuf; diff --git a/src/test/run-pass/extern-call-scrub.rs b/src/test/run-pass/extern-call-scrub.rs index a27474dcf86..a29ea377947 100644 --- a/src/test/run-pass/extern-call-scrub.rs +++ b/src/test/run-pass/extern-call-scrub.rs @@ -14,7 +14,7 @@ // ignore-emscripten no threads support -#![feature(libc, std_misc)] +#![feature(libc)] extern crate libc; use std::thread; diff --git a/src/test/run-pass/foreign-fn-linkname.rs b/src/test/run-pass/foreign-fn-linkname.rs index ab8e4fbedcf..fd827efbfdd 100644 --- a/src/test/run-pass/foreign-fn-linkname.rs +++ b/src/test/run-pass/foreign-fn-linkname.rs @@ -10,7 +10,7 @@ // ignore-wasm32-bare no libc to test ffi with -#![feature(std_misc, libc)] +#![feature(libc)] extern crate libc; use std::ffi::CString; diff --git a/src/test/run-pass/hashmap-memory.rs b/src/test/run-pass/hashmap-memory.rs index bd90ce683c4..f88ce83e37d 100644 --- a/src/test/run-pass/hashmap-memory.rs +++ b/src/test/run-pass/hashmap-memory.rs @@ -11,7 +11,6 @@ // ignore-emscripten No support for threads #![allow(unknown_features)] -#![feature(std_misc)] /** A somewhat reduced test case to expose some Valgrind issues. diff --git a/src/test/run-pass/init-large-type.rs b/src/test/run-pass/init-large-type.rs index 2ff024a693a..c8f9a0e4cab 100644 --- a/src/test/run-pass/init-large-type.rs +++ b/src/test/run-pass/init-large-type.rs @@ -15,7 +15,7 @@ // pretty-expanded FIXME #23616 // ignore-emscripten no threads support -#![feature(intrinsics, std_misc)] +#![feature(intrinsics)] use std::thread; diff --git a/src/test/run-pass/issue-13259-windows-tcb-trash.rs b/src/test/run-pass/issue-13259-windows-tcb-trash.rs index cca27aebfa4..634046e86ee 100644 --- a/src/test/run-pass/issue-13259-windows-tcb-trash.rs +++ b/src/test/run-pass/issue-13259-windows-tcb-trash.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(libc, std_misc)] +#![feature(libc)] extern crate libc; diff --git a/src/test/run-pass/issue-13304.rs b/src/test/run-pass/issue-13304.rs index 264db106491..1676281aa2f 100644 --- a/src/test/run-pass/issue-13304.rs +++ b/src/test/run-pass/issue-13304.rs @@ -11,7 +11,7 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -#![feature(io, process_capture)] +#![feature(io)] use std::env; use std::io::prelude::*; diff --git a/src/test/run-pass/issue-14456.rs b/src/test/run-pass/issue-14456.rs index c4745a6e1f1..bfedc52919c 100644 --- a/src/test/run-pass/issue-14456.rs +++ b/src/test/run-pass/issue-14456.rs @@ -11,7 +11,7 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -#![feature(io, process_capture)] +#![feature(io)] use std::env; use std::io::prelude::*; diff --git a/src/test/run-pass/issue-20091.rs b/src/test/run-pass/issue-20091.rs index f84cfd232f2..7671b43d493 100644 --- a/src/test/run-pass/issue-20091.rs +++ b/src/test/run-pass/issue-20091.rs @@ -11,7 +11,7 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -#![feature(std_misc, os)] +#![feature(os)] #[cfg(unix)] fn main() { diff --git a/src/test/run-pass/issue-20454.rs b/src/test/run-pass/issue-20454.rs index 522f544a21c..15cb79ac6a8 100644 --- a/src/test/run-pass/issue-20454.rs +++ b/src/test/run-pass/issue-20454.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(std_misc)] - use std::thread; fn _foo() { diff --git a/src/test/run-pass/issue-22577.rs b/src/test/run-pass/issue-22577.rs index ec4be812f9a..83ffdb3bf44 100644 --- a/src/test/run-pass/issue-22577.rs +++ b/src/test/run-pass/issue-22577.rs @@ -11,8 +11,6 @@ // pretty-expanded FIXME #23616 // ignore-cloudabi no std::fs -#![feature(fs, net)] - use std::{fs, net}; fn assert_both() {} diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs index 2da2f1e82a6..d59f2956ee4 100644 --- a/src/test/run-pass/issue-2718.rs +++ b/src/test/run-pass/issue-2718.rs @@ -9,8 +9,6 @@ // except according to those terms. // -#![feature(std_misc)] - pub type Task = isize; // tjc: I don't know why diff --git a/src/test/run-pass/issue-3609.rs b/src/test/run-pass/issue-3609.rs index d1bf7e066cb..f53053f2edc 100644 --- a/src/test/run-pass/issue-3609.rs +++ b/src/test/run-pass/issue-3609.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::Sender; diff --git a/src/test/run-pass/issue-8827.rs b/src/test/run-pass/issue-8827.rs index 6e01131cfca..6b573698a36 100644 --- a/src/test/run-pass/issue-8827.rs +++ b/src/test/run-pass/issue-8827.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Receiver}; diff --git a/src/test/run-pass/ivec-tag.rs b/src/test/run-pass/ivec-tag.rs index a511db8e939..0da1d18afd8 100644 --- a/src/test/run-pass/ivec-tag.rs +++ b/src/test/run-pass/ivec-tag.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/kindck-implicit-close-over-mut-var.rs b/src/test/run-pass/kindck-implicit-close-over-mut-var.rs index a81c0846a27..1c5d8a69bf3 100644 --- a/src/test/run-pass/kindck-implicit-close-over-mut-var.rs +++ b/src/test/run-pass/kindck-implicit-close-over-mut-var.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(std_misc)] - use std::thread; fn user(_i: isize) {} diff --git a/src/test/run-pass/macro-stability.rs b/src/test/run-pass/macro-stability.rs index 9afcd51aa85..b23947cc2b5 100644 --- a/src/test/run-pass/macro-stability.rs +++ b/src/test/run-pass/macro-stability.rs @@ -10,6 +10,9 @@ // aux-build:unstable-macros.rs +// FIXME(varkor): `unstable_macros` isn't visible. +#![allow(unknown_features)] + #![feature(unstable_macros)] #[macro_use] extern crate unstable_macros; diff --git a/src/test/run-pass/moves-based-on-type-capture-clause.rs b/src/test/run-pass/moves-based-on-type-capture-clause.rs index d3c028070fd..548a62f4603 100644 --- a/src/test/run-pass/moves-based-on-type-capture-clause.rs +++ b/src/test/run-pass/moves-based-on-type-capture-clause.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; pub fn main() { diff --git a/src/test/run-pass/panic-handler-chain.rs b/src/test/run-pass/panic-handler-chain.rs index 8d692f2241b..e2de795bdb7 100644 --- a/src/test/run-pass/panic-handler-chain.rs +++ b/src/test/run-pass/panic-handler-chain.rs @@ -10,7 +10,7 @@ // ignore-emscripten no threads support -#![feature(panic_handler, std_panic)] +#![feature(std_panic)] use std::sync::atomic::{AtomicUsize, Ordering}; use std::panic; diff --git a/src/test/run-pass/panic-handler-flail-wildly.rs b/src/test/run-pass/panic-handler-flail-wildly.rs index 311310712df..f0c50f842ab 100644 --- a/src/test/run-pass/panic-handler-flail-wildly.rs +++ b/src/test/run-pass/panic-handler-flail-wildly.rs @@ -7,10 +7,11 @@ // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(panic_handler, std_panic)] // ignore-emscripten no threads support +#![feature(std_panic)] + use std::panic; use std::thread; diff --git a/src/test/run-pass/panic-handler-set-twice.rs b/src/test/run-pass/panic-handler-set-twice.rs index 81da13afaa5..120483ab336 100644 --- a/src/test/run-pass/panic-handler-set-twice.rs +++ b/src/test/run-pass/panic-handler-set-twice.rs @@ -7,7 +7,7 @@ // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(panic_handler, std_panic)] +#![feature(std_panic)] // ignore-emscripten no threads support diff --git a/src/test/run-pass/panic-recover-propagate.rs b/src/test/run-pass/panic-recover-propagate.rs index 0210017b47e..cc2cfb6be96 100644 --- a/src/test/run-pass/panic-recover-propagate.rs +++ b/src/test/run-pass/panic-recover-propagate.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(panic_handler)] - use std::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT}; use std::panic; use std::thread; diff --git a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs index 6917c2db3b4..e2a1a888144 100644 --- a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs +++ b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs @@ -14,6 +14,9 @@ // ignore-cloudabi no processes // ignore-emscripten no processes +// FIXME(varkor): remove this +// ignore-macos + extern crate exit_success_if_unwind; use std::process::Command; diff --git a/src/test/run-pass/panic-runtime/abort.rs b/src/test/run-pass/panic-runtime/abort.rs index 3a3b86aec02..bab59dea422 100644 --- a/src/test/run-pass/panic-runtime/abort.rs +++ b/src/test/run-pass/panic-runtime/abort.rs @@ -13,6 +13,9 @@ // ignore-cloudabi no processes // ignore-emscripten no processes +// FIXME(varkor): remove this +// ignore-macos + use std::process::Command; use std::env; diff --git a/src/test/run-pass/panic-runtime/link-to-abort.rs b/src/test/run-pass/panic-runtime/link-to-abort.rs index 71e35e41fc0..16020aaf060 100644 --- a/src/test/run-pass/panic-runtime/link-to-abort.rs +++ b/src/test/run-pass/panic-runtime/link-to-abort.rs @@ -11,9 +11,11 @@ // compile-flags:-C panic=abort // no-prefer-dynamic +// FIXME(varkor): remove this +// ignore-macos + #![feature(panic_abort)] extern crate panic_abort; -fn main() { -} +fn main() {} diff --git a/src/test/run-pass/realloc-16687.rs b/src/test/run-pass/realloc-16687.rs index 3b4b458bb04..61ef386442b 100644 --- a/src/test/run-pass/realloc-16687.rs +++ b/src/test/run-pass/realloc-16687.rs @@ -13,7 +13,7 @@ // Ideally this would be revised to use no_std, but for now it serves // well enough to reproduce (and illustrate) the bug from #16687. -#![feature(heap_api, allocator_api)] +#![feature(allocator_api)] use std::alloc::{Global, Alloc, Layout, handle_alloc_error}; use std::ptr::{self, NonNull}; diff --git a/src/test/run-pass/send-resource.rs b/src/test/run-pass/send-resource.rs index 7dd1c3c5978..59332d6b65e 100644 --- a/src/test/run-pass/send-resource.rs +++ b/src/test/run-pass/send-resource.rs @@ -11,8 +11,6 @@ // pretty-expanded FIXME #23616 // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::channel; diff --git a/src/test/run-pass/std-sync-right-kind-impls.rs b/src/test/run-pass/std-sync-right-kind-impls.rs index 03884e8205b..1ad04493528 100644 --- a/src/test/run-pass/std-sync-right-kind-impls.rs +++ b/src/test/run-pass/std-sync-right-kind-impls.rs @@ -10,9 +10,6 @@ // pretty-expanded FIXME #23616 -#![feature(static_mutex, static_rwlock, static_condvar)] -#![feature(semaphore)] - use std::sync; fn assert_both() {} diff --git a/src/test/run-pass/sync-send-iterators-in-libcollections.rs b/src/test/run-pass/sync-send-iterators-in-libcollections.rs index e096fb3bbae..e9584e12b2e 100644 --- a/src/test/run-pass/sync-send-iterators-in-libcollections.rs +++ b/src/test/run-pass/sync-send-iterators-in-libcollections.rs @@ -9,7 +9,7 @@ // except according to those terms. #![allow(warnings)] -#![feature(drain, collections_bound, btree_range, vecmap)] +#![feature(drain, collections_bound, btree_range)] use std::collections::BinaryHeap; use std::collections::{BTreeMap, BTreeSet}; diff --git a/src/test/run-pass/sync-send-iterators-in-libcore.rs b/src/test/run-pass/sync-send-iterators-in-libcore.rs index bb190543ecd..55269a28666 100644 --- a/src/test/run-pass/sync-send-iterators-in-libcore.rs +++ b/src/test/run-pass/sync-send-iterators-in-libcore.rs @@ -13,7 +13,6 @@ #![allow(warnings)] #![feature(iter_empty)] #![feature(iter_once)] -#![feature(iter_unfold)] #![feature(str_escape)] use std::iter::{empty, once, repeat}; diff --git a/src/test/run-pass/task-comm-0.rs b/src/test/run-pass/task-comm-0.rs index 0ac232e2e12..01e6d4cf7de 100644 --- a/src/test/run-pass/task-comm-0.rs +++ b/src/test/run-pass/task-comm-0.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/task-comm-1.rs b/src/test/run-pass/task-comm-1.rs index 9a43780f08f..3295e68ac4e 100644 --- a/src/test/run-pass/task-comm-1.rs +++ b/src/test/run-pass/task-comm-1.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; pub fn main() { test00(); } diff --git a/src/test/run-pass/task-comm-10.rs b/src/test/run-pass/task-comm-10.rs index 13b40f17292..a69bba82ff0 100644 --- a/src/test/run-pass/task-comm-10.rs +++ b/src/test/run-pass/task-comm-10.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/task-comm-11.rs b/src/test/run-pass/task-comm-11.rs index be846795962..c7beeb53850 100644 --- a/src/test/run-pass/task-comm-11.rs +++ b/src/test/run-pass/task-comm-11.rs @@ -11,8 +11,6 @@ // pretty-expanded FIXME #23616 // ignore-emscripten no threads support -#![feature(std_misc)] - use std::sync::mpsc::{channel, Sender}; use std::thread; diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs index fdf02e65d8e..23594cebf31 100644 --- a/src/test/run-pass/task-comm-12.rs +++ b/src/test/run-pass/task-comm-12.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; pub fn main() { test00(); } diff --git a/src/test/run-pass/task-comm-13.rs b/src/test/run-pass/task-comm-13.rs index 46c5d3a7ce3..b4829970376 100644 --- a/src/test/run-pass/task-comm-13.rs +++ b/src/test/run-pass/task-comm-13.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::sync::mpsc::{channel, Sender}; use std::thread; diff --git a/src/test/run-pass/task-comm-14.rs b/src/test/run-pass/task-comm-14.rs index e75a6cf0c87..a03ff8719bb 100644 --- a/src/test/run-pass/task-comm-14.rs +++ b/src/test/run-pass/task-comm-14.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::sync::mpsc::{channel, Sender}; use std::thread; diff --git a/src/test/run-pass/task-comm-15.rs b/src/test/run-pass/task-comm-15.rs index f2ff48ebd95..fc5a891d1d6 100644 --- a/src/test/run-pass/task-comm-15.rs +++ b/src/test/run-pass/task-comm-15.rs @@ -11,8 +11,6 @@ // ignore-emscripten no threads support // pretty-expanded FIXME #23616 -#![feature(std_misc)] - use std::sync::mpsc::{channel, Sender}; use std::thread; diff --git a/src/test/run-pass/task-comm-17.rs b/src/test/run-pass/task-comm-17.rs index fe00f1aba36..ca6f5c164ed 100644 --- a/src/test/run-pass/task-comm-17.rs +++ b/src/test/run-pass/task-comm-17.rs @@ -11,8 +11,6 @@ // ignore-emscripten no threads support // pretty-expanded FIXME #23616 -#![feature(std_misc)] - // Issue #922 // This test is specifically about spawning temporary closures. diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs index 78f29f46edf..8d2d3afc787 100644 --- a/src/test/run-pass/task-comm-3.rs +++ b/src/test/run-pass/task-comm-3.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(std_misc)] - // ignore-emscripten no threads support use std::thread; diff --git a/src/test/run-pass/task-comm-7.rs b/src/test/run-pass/task-comm-7.rs index 7b2b9fde9ee..7ab267ea66c 100644 --- a/src/test/run-pass/task-comm-7.rs +++ b/src/test/run-pass/task-comm-7.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] #![allow(dead_assignment)] use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs index 75fd1826b58..1f0eebf1f71 100644 --- a/src/test/run-pass/task-comm-9.rs +++ b/src/test/run-pass/task-comm-9.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/task-life-0.rs b/src/test/run-pass/task-life-0.rs index 312a9f49925..34ea43ca827 100644 --- a/src/test/run-pass/task-life-0.rs +++ b/src/test/run-pass/task-life-0.rs @@ -11,8 +11,6 @@ // ignore-emscripten no threads support // pretty-expanded FIXME #23616 -#![feature(std_misc)] - use std::thread; pub fn main() { diff --git a/src/test/run-pass/task-spawn-move-and-copy.rs b/src/test/run-pass/task-spawn-move-and-copy.rs index 9b9081019e4..cd6cb5a4b52 100644 --- a/src/test/run-pass/task-spawn-move-and-copy.rs +++ b/src/test/run-pass/task-spawn-move-and-copy.rs @@ -11,7 +11,7 @@ // ignore-emscripten no threads support #![allow(unknown_features)] -#![feature(box_syntax, std_misc)] +#![feature(box_syntax)] use std::thread; use std::sync::mpsc::channel; diff --git a/src/test/run-pass/threads.rs b/src/test/run-pass/threads.rs index 8c5b84b2c82..f193598975a 100644 --- a/src/test/run-pass/threads.rs +++ b/src/test/run-pass/threads.rs @@ -10,8 +10,6 @@ // ignore-emscripten no threads support -#![feature(std_misc)] - use std::thread; pub fn main() { diff --git a/src/test/run-pass/trait-bounds-in-arc.rs b/src/test/run-pass/trait-bounds-in-arc.rs index c58442aa58f..9623da3309a 100644 --- a/src/test/run-pass/trait-bounds-in-arc.rs +++ b/src/test/run-pass/trait-bounds-in-arc.rs @@ -13,7 +13,7 @@ // ignore-emscripten no threads support #![allow(unknown_features)] -#![feature(box_syntax, std_misc)] +#![feature(box_syntax)] use std::sync::Arc; use std::sync::mpsc::channel; diff --git a/src/test/run-pass/x86stdcall2.rs b/src/test/run-pass/x86stdcall2.rs index f3bf5d9c684..bbdd65f7e5b 100644 --- a/src/test/run-pass/x86stdcall2.rs +++ b/src/test/run-pass/x86stdcall2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(std_misc)] - pub type HANDLE = usize; pub type DWORD = u32; pub type SIZE_T = u32; From 895fcec3b4a7298a038875b0a12cb010ad9a9b5f Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 12:22:23 +0100 Subject: [PATCH 12/38] Fix test/compile-fail --- src/librustc/middle/lib_features.rs | 11 ++- .../auxiliary/inherited_stability.rs | 10 +- .../auxiliary/lint_output_format.rs | 8 +- .../compile-fail/auxiliary/lint_stability.rs | 96 +++++++++---------- .../auxiliary/lint_stability_fields.rs | 24 ++--- .../auxiliary/stability_attribute_issue.rs | 6 +- .../compile-fail/auxiliary/stability_cfg2.rs | 2 +- .../compile-fail/deprecation-in-staged-api.rs | 2 +- .../enable-unstable-lib-feature.rs | 2 +- src/test/compile-fail/issue-28075.rs | 3 +- src/test/compile-fail/issue-28388-3.rs | 3 +- src/test/compile-fail/lint-renamed-cmdline.rs | 6 +- src/test/compile-fail/lint-renamed.rs | 3 +- src/test/compile-fail/lint-stability-2.rs | 68 ++++++------- .../compile-fail/lint-stability-deprecated.rs | 54 +++++------ .../lint-stability-fields-deprecated.rs | 25 ++--- .../compile-fail/lint-stability-fields.rs | 22 ++--- src/test/compile-fail/lint-stability.rs | 62 ++++++------ src/test/compile-fail/missing-stability.rs | 6 +- .../compile-fail/stability-attribute-issue.rs | 7 +- .../stability-attribute-sanity-2.rs | 2 +- .../stability-attribute-sanity-3.rs | 2 +- .../stability-attribute-sanity.rs | 16 ++-- src/test/compile-fail/stable-features.rs | 5 +- .../allow-warnings-cmdline-stability/bar.rs | 2 +- 25 files changed, 231 insertions(+), 216 deletions(-) diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index 78c95fcbc62..a1abfb704ec 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -66,7 +66,9 @@ impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { // Find a stability attribute (i.e. `#[stable (..)]`, `#[unstable (..)]`, // `#[rustc_const_unstable (..)]`). - if stab_attrs.iter().any(|stab_attr| attr.check_name(stab_attr)) { + if let Some(stab_attr) = stab_attrs.iter().find(|stab_attr| { + attr.check_name(stab_attr) + }) { let meta_item = attr.meta(); if let Some(MetaItem { node: MetaItemKind::List(ref metas), .. }) = meta_item { let mut feature = None; @@ -82,7 +84,12 @@ impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { } } if let Some(feature) = feature { - features.push((feature, since, attr.span)); + // This additional check for stability is to make sure we + // don't emit additional, irrelevant errors for malformed + // attributes. + if *stab_attr != "stable" || since.is_some() { + features.push((feature, since, attr.span)); + } } // We need to iterate over the other attributes, because // `rustc_const_unstable` is not mutually exclusive with diff --git a/src/test/compile-fail/auxiliary/inherited_stability.rs b/src/test/compile-fail/auxiliary/inherited_stability.rs index 0b1aee68f44..f690cbd029d 100644 --- a/src/test/compile-fail/auxiliary/inherited_stability.rs +++ b/src/test/compile-fail/auxiliary/inherited_stability.rs @@ -9,7 +9,7 @@ // except according to those terms. #![crate_name="inherited_stability"] #![crate_type = "lib"] -#![unstable(feature = "test_feature", issue = "0")] +#![unstable(feature = "unstable_test_feature", issue = "0")] #![feature(staged_api)] pub fn unstable() {} @@ -19,16 +19,16 @@ pub fn stable() {} #[stable(feature = "rust1", since = "1.0.0")] pub mod stable_mod { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn unstable() {} #[stable(feature = "rust1", since = "1.0.0")] pub fn stable() {} } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub mod unstable_mod { - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated() {} @@ -37,7 +37,7 @@ pub mod unstable_mod { #[stable(feature = "rust1", since = "1.0.0")] pub trait Stable { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] fn unstable(&self); #[stable(feature = "rust1", since = "1.0.0")] diff --git a/src/test/compile-fail/auxiliary/lint_output_format.rs b/src/test/compile-fail/auxiliary/lint_output_format.rs index 0553b4a49b7..6ba66f3e45f 100644 --- a/src/test/compile-fail/auxiliary/lint_output_format.rs +++ b/src/test/compile-fail/auxiliary/lint_output_format.rs @@ -11,20 +11,20 @@ #![crate_name="lint_output_format"] #![crate_type = "lib"] #![feature(staged_api)] -#![unstable(feature = "test_feature", issue = "0")] +#![unstable(feature = "unstable_test_feature", issue = "0")] -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn foo() -> usize { 20 } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub fn bar() -> usize { 40 } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub fn baz() -> usize { 30 } diff --git a/src/test/compile-fail/auxiliary/lint_stability.rs b/src/test/compile-fail/auxiliary/lint_stability.rs index 07e80b61cd0..5547458abbe 100644 --- a/src/test/compile-fail/auxiliary/lint_stability.rs +++ b/src/test/compile-fail/auxiliary/lint_stability.rs @@ -14,27 +14,27 @@ #![feature(associated_type_defaults)] #![stable(feature = "lint_stability", since = "1.0.0")] -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated() {} -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_text() {} -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "99.99.99", reason = "text")] pub fn deprecated_future() {} -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_unstable() {} -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_unstable_text() {} -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub fn unstable() {} -#[unstable(feature = "test_feature", reason = "text", issue = "0")] +#[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn unstable_text() {} #[stable(feature = "rust1", since = "1.0.0")] @@ -46,23 +46,23 @@ pub fn stable_text() {} pub struct MethodTester; impl MethodTester { - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated(&self) {} - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_unstable(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_unstable_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn method_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn method_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -71,25 +71,25 @@ impl MethodTester { pub fn method_stable_text(&self) {} } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] pub trait Trait { - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated(&self) {} - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_unstable(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_unstable_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] fn trait_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] fn trait_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -98,100 +98,100 @@ pub trait Trait { fn trait_stable_text(&self) {} } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] pub trait TraitWithAssociatedTypes { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] type TypeUnstable = u8; - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] type TypeDeprecated = u8; } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] impl Trait for MethodTester {} -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub trait UnstableTrait { fn dummy(&self) { } } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub trait DeprecatedTrait { - #[stable(feature = "test_feature", since = "1.0.0")] fn dummy(&self) { } + #[stable(feature = "stable_test_feature", since = "1.0.0")] fn dummy(&self) { } } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedStruct { - #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] pub i: isize } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnstableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] pub i: isize } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] pub i: isize } #[stable(feature = "rust1", since = "1.0.0")] pub struct StableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] pub i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] pub i: isize } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub enum UnstableEnum {} #[stable(feature = "rust1", since = "1.0.0")] pub enum StableEnum {} -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnitStruct; -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnstableUnitStruct; -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableUnitStruct; #[stable(feature = "rust1", since = "1.0.0")] pub struct StableUnitStruct; -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] pub enum Enum { - #[stable(feature = "test_feature", since = "1.0.0")] + #[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] DeprecatedVariant, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] DeprecatedUnstableVariant, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] UnstableVariant, #[stable(feature = "rust1", since = "1.0.0")] StableVariant, } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnstableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); #[stable(feature = "rust1", since = "1.0.0")] pub struct StableTupleStruct(#[stable(feature = "rust1", since = "1.0.0")] pub isize); -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[macro_export] macro_rules! macro_test { () => (deprecated()); } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[macro_export] macro_rules! macro_test_arg { ($func:expr) => ($func); } -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[macro_export] macro_rules! macro_test_arg_nested { ($func:ident) => (macro_test_arg!($func())); diff --git a/src/test/compile-fail/auxiliary/lint_stability_fields.rs b/src/test/compile-fail/auxiliary/lint_stability_fields.rs index 8c6b98ab510..6b79c36fc05 100644 --- a/src/test/compile-fail/auxiliary/lint_stability_fields.rs +++ b/src/test/compile-fail/auxiliary/lint_stability_fields.rs @@ -15,47 +15,47 @@ pub struct Stable { #[stable(feature = "rust1", since = "1.0.0")] pub inherit: u8, // it's a lie (stable doesn't inherit) - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub override2: u8, } #[stable(feature = "rust1", since = "1.0.0")] pub struct Stable2(#[stable(feature = "rust1", since = "1.0.0")] pub u8, - #[unstable(feature = "test_feature", issue = "0")] pub u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub u8, + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub u8); -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub struct Unstable { pub inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] pub override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub override2: u8, } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub struct Unstable2(pub u8, #[stable(feature = "rust1", since = "1.0.0")] pub u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub u8); -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct Deprecated { pub inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] pub override1: u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub override2: u8, } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct Deprecated2(pub u8, #[stable(feature = "rust1", since = "1.0.0")] pub u8, - #[unstable(feature = "test_feature", issue = "0")] pub u8); + #[unstable(feature = "unstable_test_feature", issue = "0")] pub u8); diff --git a/src/test/compile-fail/auxiliary/stability_attribute_issue.rs b/src/test/compile-fail/auxiliary/stability_attribute_issue.rs index 22c13f69af9..1ee623c34fb 100644 --- a/src/test/compile-fail/auxiliary/stability_attribute_issue.rs +++ b/src/test/compile-fail/auxiliary/stability_attribute_issue.rs @@ -9,11 +9,11 @@ // except according to those terms. #![feature(staged_api)] -#![stable(feature = "foo", since = "1.2.0")] +#![stable(feature = "stable_test_feature", since = "1.2.0")] -#[unstable(feature = "foo", issue = "1")] +#[unstable(feature = "unstable_test_feature", issue = "1")] pub fn unstable() {} -#[unstable(feature = "foo", reason = "message", issue = "2")] +#[unstable(feature = "unstable_test_feature", reason = "message", issue = "2")] pub fn unstable_msg() {} diff --git a/src/test/compile-fail/auxiliary/stability_cfg2.rs b/src/test/compile-fail/auxiliary/stability_cfg2.rs index c1e2b1d1bfe..a59f4b4e8f4 100644 --- a/src/test/compile-fail/auxiliary/stability_cfg2.rs +++ b/src/test/compile-fail/auxiliary/stability_cfg2.rs @@ -10,6 +10,6 @@ // compile-flags:--cfg foo -#![cfg_attr(foo, unstable(feature = "test_feature", issue = "0"))] +#![cfg_attr(foo, unstable(feature = "unstable_test_feature", issue = "0"))] #![cfg_attr(not(foo), stable(feature = "test_feature", since = "1.0.0"))] #![feature(staged_api)] diff --git a/src/test/compile-fail/deprecation-in-staged-api.rs b/src/test/compile-fail/deprecation-in-staged-api.rs index 8170c9fd8f1..5c6facbf014 100644 --- a/src/test/compile-fail/deprecation-in-staged-api.rs +++ b/src/test/compile-fail/deprecation-in-staged-api.rs @@ -12,7 +12,7 @@ #![feature(staged_api)] -#![stable(feature = "test_feature", since = "1.0.0")] +#![stable(feature = "stable_test_feature", since = "1.0.0")] #[deprecated] fn main() { } //~ERROR `#[deprecated]` cannot be used in staged api diff --git a/src/test/compile-fail/enable-unstable-lib-feature.rs b/src/test/compile-fail/enable-unstable-lib-feature.rs index bc9e2345f0e..b10a0a60f14 100644 --- a/src/test/compile-fail/enable-unstable-lib-feature.rs +++ b/src/test/compile-fail/enable-unstable-lib-feature.rs @@ -12,7 +12,7 @@ // aux-build:stability_cfg2.rs -#![feature(test_feature)] +#![feature(unstable_test_feature)] #![deny(non_snake_case)] // To trigger a hard error // Shouldn't generate a warning about unstable features diff --git a/src/test/compile-fail/issue-28075.rs b/src/test/compile-fail/issue-28075.rs index 057c99f9305..0f6b9d1b5dc 100644 --- a/src/test/compile-fail/issue-28075.rs +++ b/src/test/compile-fail/issue-28075.rs @@ -16,7 +16,8 @@ extern crate lint_stability; -use lint_stability::{unstable, deprecated}; //~ ERROR use of unstable library feature 'test_feature' +use lint_stability::{unstable, deprecated}; +//~^ ERROR use of unstable library feature 'unstable_test_feature' fn main() { } diff --git a/src/test/compile-fail/issue-28388-3.rs b/src/test/compile-fail/issue-28388-3.rs index 12357779b51..12e3457ef9e 100644 --- a/src/test/compile-fail/issue-28388-3.rs +++ b/src/test/compile-fail/issue-28388-3.rs @@ -14,7 +14,8 @@ extern crate lint_stability; -use lint_stability::UnstableEnum::{}; //~ ERROR use of unstable library feature 'test_feature' +use lint_stability::UnstableEnum::{}; +//~^ ERROR use of unstable library feature 'unstable_test_feature' use lint_stability::StableEnum::{}; // OK fn main() {} diff --git a/src/test/compile-fail/lint-renamed-cmdline.rs b/src/test/compile-fail/lint-renamed-cmdline.rs index a5246206d95..f5abf2733b9 100644 --- a/src/test/compile-fail/lint-renamed-cmdline.rs +++ b/src/test/compile-fail/lint-renamed-cmdline.rs @@ -8,10 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// compile-flags:-D unknown_features +// compile-flags:-D bare_trait_object -// error-pattern:lint `unknown_features` has been renamed to `unused_features` -// error-pattern:requested on the command line with `-D unknown_features` +// error-pattern:lint `bare_trait_object` has been renamed to `bare_trait_objects` +// error-pattern:requested on the command line with `-D bare_trait_object` // error-pattern:unused #[deny(unused)] diff --git a/src/test/compile-fail/lint-renamed.rs b/src/test/compile-fail/lint-renamed.rs index afe4aee7a1d..c147ec5cf95 100644 --- a/src/test/compile-fail/lint-renamed.rs +++ b/src/test/compile-fail/lint-renamed.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[deny(unknown_features)] //~ WARN lint `unknown_features` has been renamed to `unused_features` +#[deny(bare_trait_object)] +//~^ WARN lint `bare_trait_object` has been renamed to `bare_trait_objects` #[deny(unused)] fn main() { let unused = (); } //~ ERROR unused diff --git a/src/test/compile-fail/lint-stability-2.rs b/src/test/compile-fail/lint-stability-2.rs index 77917ff3cd3..1f2fa077caf 100644 --- a/src/test/compile-fail/lint-stability-2.rs +++ b/src/test/compile-fail/lint-stability-2.rs @@ -76,15 +76,15 @@ mod cross_crate { ::trait_unstable(&foo); //~ ERROR use of unstable library feature foo.method_unstable_text(); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text Foo::method_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text ::method_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text foo.trait_unstable_text(); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text ::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text stable(); foo.method_stable(); @@ -149,9 +149,9 @@ mod cross_crate { foo.trait_unstable(); //~ ERROR use of unstable library feature ::trait_unstable(&foo); //~ ERROR use of unstable library feature foo.trait_unstable_text(); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text ::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text foo.trait_stable(); Trait::trait_stable(&foo); ::trait_stable(&foo); @@ -167,7 +167,7 @@ mod cross_crate { //~^ ERROR use of unstable library feature foo.trait_unstable(); //~ ERROR use of unstable library feature foo.trait_unstable_text(); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text foo.trait_stable(); } @@ -178,16 +178,16 @@ mod cross_crate { } mod this_crate { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_text() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn unstable() {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn unstable_text() {} #[stable(feature = "rust1", since = "1.0.0")] @@ -199,16 +199,16 @@ mod this_crate { pub struct MethodTester; impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn method_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn method_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -218,16 +218,16 @@ mod this_crate { } pub trait Trait { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] fn trait_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] fn trait_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -238,43 +238,43 @@ mod this_crate { impl Trait for MethodTester {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } #[stable(feature = "rust1", since = "1.0.0")] pub struct StableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnitStruct; - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableUnitStruct; #[stable(feature = "rust1", since = "1.0.0")] pub struct StableUnitStruct; pub enum Enum { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] DeprecatedVariant, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] UnstableVariant, #[stable(feature = "rust1", since = "1.0.0")] StableVariant, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedTupleStruct(isize); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableTupleStruct(isize); #[stable(feature = "rust1", since = "1.0.0")] pub struct StableTupleStruct(isize); @@ -391,7 +391,7 @@ mod this_crate { foo.trait_stable(); } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_fn_body() { fn fn_in_body() {} @@ -399,7 +399,7 @@ mod this_crate { } impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_method_body(&self) { fn fn_in_body() {} @@ -407,7 +407,7 @@ mod this_crate { } } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub trait DeprecatedTrait { fn dummy(&self) { } diff --git a/src/test/compile-fail/lint-stability-deprecated.rs b/src/test/compile-fail/lint-stability-deprecated.rs index f2defc1d421..de2c27bdcbc 100644 --- a/src/test/compile-fail/lint-stability-deprecated.rs +++ b/src/test/compile-fail/lint-stability-deprecated.rs @@ -16,7 +16,7 @@ #![warn(deprecated)] #![allow(dead_code, unused_extern_crates)] -#![feature(staged_api, test_feature, rustc_attrs)] +#![feature(staged_api, unstable_test_feature, rustc_attrs)] #![stable(feature = "rust1", since = "1.0.0")] @@ -227,16 +227,16 @@ mod inheritance { } mod this_crate { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_text() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn unstable() {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn unstable_text() {} #[stable(feature = "rust1", since = "1.0.0")] @@ -248,16 +248,16 @@ mod this_crate { pub struct MethodTester; impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn method_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn method_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -267,16 +267,16 @@ mod this_crate { } pub trait Trait { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] fn trait_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] fn trait_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -287,43 +287,43 @@ mod this_crate { impl Trait for MethodTester {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } #[stable(feature = "rust1", since = "1.0.0")] pub struct StableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnitStruct; - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableUnitStruct; #[stable(feature = "rust1", since = "1.0.0")] pub struct StableUnitStruct; pub enum Enum { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] DeprecatedVariant, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] UnstableVariant, #[stable(feature = "rust1", since = "1.0.0")] StableVariant, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedTupleStruct(isize); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableTupleStruct(isize); #[stable(feature = "rust1", since = "1.0.0")] pub struct StableTupleStruct(isize); @@ -441,7 +441,7 @@ mod this_crate { foo.trait_stable(); } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_fn_body() { fn fn_in_body() {} @@ -449,7 +449,7 @@ mod this_crate { } impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_method_body(&self) { fn fn_in_body() {} @@ -457,7 +457,7 @@ mod this_crate { } } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub trait DeprecatedTrait { fn dummy(&self) { } diff --git a/src/test/compile-fail/lint-stability-fields-deprecated.rs b/src/test/compile-fail/lint-stability-fields-deprecated.rs index 5da3e1a930d..0ad4466d0e2 100644 --- a/src/test/compile-fail/lint-stability-fields-deprecated.rs +++ b/src/test/compile-fail/lint-stability-fields-deprecated.rs @@ -9,9 +9,10 @@ // except according to those terms. // aux-build:lint_stability_fields.rs + #![deny(deprecated)] #![allow(dead_code)] -#![feature(staged_api, test_feature)] +#![feature(staged_api, unstable_test_feature)] #![stable(feature = "rust1", since = "1.0.0")] @@ -162,50 +163,50 @@ mod this_crate { #[stable(feature = "rust1", since = "1.0.0")] struct Stable { inherit: u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } #[stable(feature = "rust1", since = "1.0.0")] struct Stable2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] u8); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] struct Unstable { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] struct Unstable2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] u8); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] struct Deprecated { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] struct Deprecated2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] u8); + #[unstable(feature = "unstable_test_feature", issue = "0")] u8); pub fn foo() { let x = Stable { diff --git a/src/test/compile-fail/lint-stability-fields.rs b/src/test/compile-fail/lint-stability-fields.rs index b1b1a9a1fbf..db6b64dabfe 100644 --- a/src/test/compile-fail/lint-stability-fields.rs +++ b/src/test/compile-fail/lint-stability-fields.rs @@ -138,50 +138,50 @@ mod this_crate { #[stable(feature = "rust1", since = "1.0.0")] struct Stable { inherit: u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } #[stable(feature = "rust1", since = "1.0.0")] struct Stable2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] u8); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] struct Unstable { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, #[rustc_deprecated(since = "1.0.0", reason = "text")] - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] struct Unstable2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] u8); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] struct Deprecated { inherit: u8, #[stable(feature = "rust1", since = "1.0.0")] override1: u8, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] override2: u8, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] struct Deprecated2(u8, #[stable(feature = "rust1", since = "1.0.0")] u8, - #[unstable(feature = "test_feature", issue = "0")] u8); + #[unstable(feature = "unstable_test_feature", issue = "0")] u8); pub fn foo() { let x = Stable { diff --git a/src/test/compile-fail/lint-stability.rs b/src/test/compile-fail/lint-stability.rs index bd390108bd8..720b1235d47 100644 --- a/src/test/compile-fail/lint-stability.rs +++ b/src/test/compile-fail/lint-stability.rs @@ -71,11 +71,11 @@ mod cross_crate { ::trait_unstable(&foo); //~ ERROR use of unstable library feature unstable_text(); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text Trait::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text ::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text stable(); foo.method_stable(); @@ -162,9 +162,9 @@ mod cross_crate { Trait::trait_unstable(&foo); //~ ERROR use of unstable library feature ::trait_unstable(&foo); //~ ERROR use of unstable library feature Trait::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text ::trait_unstable_text(&foo); - //~^ ERROR use of unstable library feature 'test_feature': text + //~^ ERROR use of unstable library feature 'unstable_test_feature': text foo.trait_stable(); Trait::trait_stable(&foo); ::trait_stable(&foo); @@ -213,10 +213,10 @@ mod inheritance { } mod this_crate { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn deprecated_text() {} @@ -224,9 +224,9 @@ mod this_crate { #[rustc_deprecated(since = "99.99.99", reason = "text")] pub fn deprecated_future() {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn unstable() {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn unstable_text() {} #[stable(feature = "rust1", since = "1.0.0")] @@ -238,16 +238,16 @@ mod this_crate { pub struct MethodTester; impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn method_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub fn method_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] pub fn method_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -257,16 +257,16 @@ mod this_crate { } pub trait Trait { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn trait_deprecated_text(&self) {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] fn trait_unstable(&self) {} - #[unstable(feature = "test_feature", reason = "text", issue = "0")] + #[unstable(feature = "unstable_test_feature", reason = "text", issue = "0")] fn trait_unstable_text(&self) {} #[stable(feature = "rust1", since = "1.0.0")] @@ -277,43 +277,43 @@ mod this_crate { impl Trait for MethodTester {} - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } #[stable(feature = "rust1", since = "1.0.0")] pub struct StableStruct { - #[stable(feature = "test_feature", since = "1.0.0")] i: isize + #[stable(feature = "stable_test_feature", since = "1.0.0")] i: isize } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedUnitStruct; - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableUnitStruct; #[stable(feature = "rust1", since = "1.0.0")] pub struct StableUnitStruct; pub enum Enum { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] DeprecatedVariant, - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] UnstableVariant, #[stable(feature = "rust1", since = "1.0.0")] StableVariant, } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub struct DeprecatedTupleStruct(isize); - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] pub struct UnstableTupleStruct(isize); #[stable(feature = "rust1", since = "1.0.0")] pub struct StableTupleStruct(isize); @@ -432,7 +432,7 @@ mod this_crate { foo.trait_stable(); } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_fn_body() { fn fn_in_body() {} @@ -440,7 +440,7 @@ mod this_crate { } impl MethodTester { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn test_method_body(&self) { fn fn_in_body() {} @@ -448,7 +448,7 @@ mod this_crate { } } - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub trait DeprecatedTrait { fn dummy(&self) { } diff --git a/src/test/compile-fail/missing-stability.rs b/src/test/compile-fail/missing-stability.rs index a727ecc76b7..1922efb5e19 100644 --- a/src/test/compile-fail/missing-stability.rs +++ b/src/test/compile-fail/missing-stability.rs @@ -13,20 +13,20 @@ #![crate_type="lib"] #![feature(staged_api)] -#![stable(feature = "test_feature", since = "1.0.0")] +#![stable(feature = "stable_test_feature", since = "1.0.0")] pub fn unmarked() { //~^ ERROR This node does not have a stability attribute () } -#[unstable(feature = "foo", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub mod foo { // #[unstable] is inherited pub fn unmarked() {} } -#[stable(feature = "bar", since="1.0.0")] +#[stable(feature = "stable_test_feature", since="1.0.0")] pub mod bar { // #[stable] is not inherited pub fn unmarked() {} diff --git a/src/test/compile-fail/stability-attribute-issue.rs b/src/test/compile-fail/stability-attribute-issue.rs index c473bdd23b5..754c6f792f9 100644 --- a/src/test/compile-fail/stability-attribute-issue.rs +++ b/src/test/compile-fail/stability-attribute-issue.rs @@ -9,6 +9,7 @@ // except according to those terms. // aux-build:stability_attribute_issue.rs +// ignore-tidy-linelength #![deny(deprecated)] @@ -16,6 +17,8 @@ extern crate stability_attribute_issue; use stability_attribute_issue::*; fn main() { - unstable(); //~ ERROR use of unstable library feature 'foo' (see issue #1) - unstable_msg(); //~ ERROR use of unstable library feature 'foo': message (see issue #2) + unstable(); + //~^ ERROR use of unstable library feature 'unstable_test_feature' (see issue #1) + unstable_msg(); + //~^ ERROR use of unstable library feature 'unstable_test_feature': message (see issue #2) } diff --git a/src/test/compile-fail/stability-attribute-sanity-2.rs b/src/test/compile-fail/stability-attribute-sanity-2.rs index 0ddc3a8dceb..9c54315bfd0 100644 --- a/src/test/compile-fail/stability-attribute-sanity-2.rs +++ b/src/test/compile-fail/stability-attribute-sanity-2.rs @@ -12,7 +12,7 @@ #![feature(staged_api)] -#![stable(feature = "test_feature", since = "1.0.0")] +#![stable(feature = "stable_test_feature", since = "1.0.0")] #[stable(feature = "a", feature = "b", since = "1.0.0")] //~ ERROR multiple 'feature' items fn f1() { } diff --git a/src/test/compile-fail/stability-attribute-sanity-3.rs b/src/test/compile-fail/stability-attribute-sanity-3.rs index ddefd24b92f..d4821e009f2 100644 --- a/src/test/compile-fail/stability-attribute-sanity-3.rs +++ b/src/test/compile-fail/stability-attribute-sanity-3.rs @@ -12,7 +12,7 @@ #![feature(staged_api)] -#![stable(feature = "test_feature", since = "1.0.0")] +#![stable(feature = "stable_test_feature", since = "1.0.0")] #[macro_export] macro_rules! mac { //~ ERROR This node does not have a stability attribute diff --git a/src/test/compile-fail/stability-attribute-sanity.rs b/src/test/compile-fail/stability-attribute-sanity.rs index 263ac427b76..794ae1ca087 100644 --- a/src/test/compile-fail/stability-attribute-sanity.rs +++ b/src/test/compile-fail/stability-attribute-sanity.rs @@ -15,7 +15,7 @@ #![stable(feature = "rust1", since = "1.0.0")] mod bogus_attribute_types_1 { - #[stable(feature = "a", since = "a", reason)] //~ ERROR unknown meta item 'reason' [E0541] + #[stable(feature = "a", since = "b", reason)] //~ ERROR unknown meta item 'reason' [E0541] fn f1() { } #[stable(feature = "a", since)] //~ ERROR incorrect meta item [E0539] @@ -35,7 +35,7 @@ mod bogus_attribute_types_2 { #[unstable] //~ ERROR incorrect stability attribute type [E0548] fn f1() { } - #[unstable = "a"] //~ ERROR incorrect stability attribute type [E0548] + #[unstable = "b"] //~ ERROR incorrect stability attribute type [E0548] fn f2() { } #[stable] //~ ERROR incorrect stability attribute type [E0548] @@ -57,7 +57,7 @@ mod missing_feature_names { #[unstable(issue = "0")] //~ ERROR missing 'feature' [E0546] fn f1() { } - #[unstable(feature = "a")] //~ ERROR missing 'issue' [E0547] + #[unstable(feature = "b")] //~ ERROR missing 'issue' [E0547] fn f2() { } #[stable(since = "a")] //~ ERROR missing 'feature' [E0546] @@ -73,12 +73,12 @@ mod missing_version { fn f2() { } } -#[unstable(feature = "a", issue = "0")] +#[unstable(feature = "b", issue = "0")] #[stable(feature = "a", since = "b")] //~ ERROR multiple stability levels [E0544] fn multiple1() { } -#[unstable(feature = "a", issue = "0")] -#[unstable(feature = "a", issue = "0")] //~ ERROR multiple stability levels [E0544] +#[unstable(feature = "b", issue = "0")] +#[unstable(feature = "b", issue = "0")] //~ ERROR multiple stability levels [E0544] fn multiple2() { } #[stable(feature = "a", since = "b")] @@ -88,8 +88,8 @@ fn multiple3() { } #[stable(feature = "a", since = "b")] #[rustc_deprecated(since = "b", reason = "text")] #[rustc_deprecated(since = "b", reason = "text")] -#[rustc_const_unstable(feature = "a")] -#[rustc_const_unstable(feature = "b")] +#[rustc_const_unstable(feature = "c")] +#[rustc_const_unstable(feature = "d")] pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540] //~^ ERROR Invalid stability or deprecation version found //~| ERROR multiple rustc_const_unstable attributes diff --git a/src/test/compile-fail/stable-features.rs b/src/test/compile-fail/stable-features.rs index 5993f4b5a09..32991dd6499 100644 --- a/src/test/compile-fail/stable-features.rs +++ b/src/test/compile-fail/stable-features.rs @@ -13,10 +13,11 @@ #![deny(stable_features)] -#![feature(test_accepted_feature)] //~ ERROR this feature has been stable since 1.0.0 +#![feature(test_accepted_feature)] +//~^ ERROR the feature `test_accepted_feature` has been stable since 1.0.0 -// FIXME(#44232) we should error that this isn't used. #![feature(rust1)] +//~^ ERROR the feature `rust1` has been stable since 1.0.0 fn main() { let _foo: Vec<()> = Vec::new(); diff --git a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs index fed1405b7f4..5eb62316d81 100644 --- a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs +++ b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs @@ -10,6 +10,6 @@ #![crate_type = "lib"] #![feature(staged_api)] -#![unstable(feature = "test_feature", issue = "0")] +#![unstable(feature = "unstable_test_feature", issue = "0")] pub fn baz() { } From 671a81738dad4b98350d08e357a6eb855b176b01 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 12:23:40 +0100 Subject: [PATCH 13/38] Fix test/ui --- src/test/ui/auxiliary/lint_output_format.rs | 8 ++++---- src/test/ui/issue-17337.rs | 4 ++-- src/test/ui/lint-output-format-2.rs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/ui/auxiliary/lint_output_format.rs b/src/test/ui/auxiliary/lint_output_format.rs index 0553b4a49b7..6ba66f3e45f 100644 --- a/src/test/ui/auxiliary/lint_output_format.rs +++ b/src/test/ui/auxiliary/lint_output_format.rs @@ -11,20 +11,20 @@ #![crate_name="lint_output_format"] #![crate_type = "lib"] #![feature(staged_api)] -#![unstable(feature = "test_feature", issue = "0")] +#![unstable(feature = "unstable_test_feature", issue = "0")] -#[stable(feature = "test_feature", since = "1.0.0")] +#[stable(feature = "stable_test_feature", since = "1.0.0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] pub fn foo() -> usize { 20 } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub fn bar() -> usize { 40 } -#[unstable(feature = "test_feature", issue = "0")] +#[unstable(feature = "unstable_test_feature", issue = "0")] pub fn baz() -> usize { 30 } diff --git a/src/test/ui/issue-17337.rs b/src/test/ui/issue-17337.rs index 1208321b529..8642396c380 100644 --- a/src/test/ui/issue-17337.rs +++ b/src/test/ui/issue-17337.rs @@ -11,12 +11,12 @@ #![feature(staged_api)] #![deny(deprecated)] -#![unstable(feature = "test_feature", issue = "0")] +#![unstable(feature = "unstable_test_feature", issue = "0")] struct Foo; impl Foo { - #[unstable(feature = "test_feature", issue = "0")] + #[unstable(feature = "unstable_test_feature", issue = "0")] #[rustc_deprecated(since = "1.0.0", reason = "text")] fn foo(self) {} } diff --git a/src/test/ui/lint-output-format-2.rs b/src/test/ui/lint-output-format-2.rs index 5cd0084901f..811b14063bb 100644 --- a/src/test/ui/lint-output-format-2.rs +++ b/src/test/ui/lint-output-format-2.rs @@ -13,7 +13,7 @@ // FIXME(#44232) we should warn that this isn't used. #![feature(foo)] -#![feature(test_feature)] +#![feature(unstable_test_feature)] #![feature(rustc_attrs)] extern crate lint_output_format; From c717ccba174c054cca4cbd5d6e80c533a1cb7b02 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 13:06:32 +0100 Subject: [PATCH 14/38] Add a test for unknown features --- src/test/ui/feature-gate/unknown-feature.rs | 15 +++++++++++++++ src/test/ui/feature-gate/unknown-feature.stderr | 14 ++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/test/ui/feature-gate/unknown-feature.rs create mode 100644 src/test/ui/feature-gate/unknown-feature.stderr diff --git a/src/test/ui/feature-gate/unknown-feature.rs b/src/test/ui/feature-gate/unknown-feature.rs new file mode 100644 index 00000000000..4101faf7dd0 --- /dev/null +++ b/src/test/ui/feature-gate/unknown-feature.rs @@ -0,0 +1,15 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(unknown_features)] + +#![feature(unknown_rust_feature)] //~ ERROR unknown feature + +fn main() {} diff --git a/src/test/ui/feature-gate/unknown-feature.stderr b/src/test/ui/feature-gate/unknown-feature.stderr new file mode 100644 index 00000000000..392d918246f --- /dev/null +++ b/src/test/ui/feature-gate/unknown-feature.stderr @@ -0,0 +1,14 @@ +error: unknown feature `unknown_rust_feature` + --> $DIR/unknown-feature.rs:13:12 + | +LL | #![feature(unknown_rust_feature)] //~ ERROR unknown feature + | ^^^^^^^^^^^^^^^^^^^^ + | +note: lint level defined here + --> $DIR/unknown-feature.rs:11:9 + | +LL | #![deny(unknown_features)] + | ^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + From 372e1284769847846f37abb43fbee7cd4ae99174 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 13:08:18 +0100 Subject: [PATCH 15/38] Add test for duplicate features --- .../ui/feature-gate/duplicate-features.rs | 20 +++++++++++++++++++ .../ui/feature-gate/duplicate-features.stderr | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/test/ui/feature-gate/duplicate-features.rs create mode 100644 src/test/ui/feature-gate/duplicate-features.stderr diff --git a/src/test/ui/feature-gate/duplicate-features.rs b/src/test/ui/feature-gate/duplicate-features.rs new file mode 100644 index 00000000000..90d2a6cebcc --- /dev/null +++ b/src/test/ui/feature-gate/duplicate-features.rs @@ -0,0 +1,20 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(stable_features)] +#![deny(duplicate_features)] + +#![feature(rust1)] +#![feature(rust1)] //~ ERROR duplicate `rust1` feature attribute + +#![feature(if_let)] +#![feature(if_let)] //~ ERROR duplicate `if_let` feature attribute + +fn main() {} diff --git a/src/test/ui/feature-gate/duplicate-features.stderr b/src/test/ui/feature-gate/duplicate-features.stderr new file mode 100644 index 00000000000..bf8e9157db0 --- /dev/null +++ b/src/test/ui/feature-gate/duplicate-features.stderr @@ -0,0 +1,20 @@ +error: duplicate `if_let` feature attribute + --> $DIR/duplicate-features.rs:18:12 + | +LL | #![feature(if_let)] //~ ERROR duplicate `if_let` feature attribute + | ^^^^^^ + | +note: lint level defined here + --> $DIR/duplicate-features.rs:12:9 + | +LL | #![deny(duplicate_features)] + | ^^^^^^^^^^^^^^^^^^ + +error: duplicate `rust1` feature attribute + --> $DIR/duplicate-features.rs:15:12 + | +LL | #![feature(rust1)] //~ ERROR duplicate `rust1` feature attribute + | ^^^^^ + +error: aborting due to 2 previous errors + From 1511df2521891682c9ff7a72c94b7b882b607045 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 13:49:51 +0100 Subject: [PATCH 16/38] Add a test for feature attribute consistency Note that this doesn't test consistency of some properties, like `reason`. --- .../stability-attribute-consistency.rs | 26 +++++++++++++++++++ .../stability-attribute-consistency.stderr | 15 +++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/test/ui/feature-gate/stability-attribute-consistency.rs create mode 100644 src/test/ui/feature-gate/stability-attribute-consistency.stderr diff --git a/src/test/ui/feature-gate/stability-attribute-consistency.rs b/src/test/ui/feature-gate/stability-attribute-consistency.rs new file mode 100644 index 00000000000..94bc57d10e5 --- /dev/null +++ b/src/test/ui/feature-gate/stability-attribute-consistency.rs @@ -0,0 +1,26 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![stable(feature = "stable_test_feature", since = "1.0.0")] + +#![feature(staged_api)] + +#[stable(feature = "foo", since = "1.0.0")] +fn foo_stable_1_0_0() {} + +#[stable(feature = "foo", since = "1.29.0")] +//~^ ERROR feature `foo` is declared stable since 1.29.0 +fn foo_stable_1_29_0() {} + +#[unstable(feature = "foo", issue = "0")] +//~^ ERROR feature `foo` is declared unstable +fn foo_unstable() {} + +fn main() {} diff --git a/src/test/ui/feature-gate/stability-attribute-consistency.stderr b/src/test/ui/feature-gate/stability-attribute-consistency.stderr new file mode 100644 index 00000000000..1b2fdd6014e --- /dev/null +++ b/src/test/ui/feature-gate/stability-attribute-consistency.stderr @@ -0,0 +1,15 @@ +error[E0711]: feature `foo` is declared stable since 1.29.0, but was previously declared stable since 1.0.0 + --> $DIR/stability-attribute-consistency.rs:18:1 + | +LL | #[stable(feature = "foo", since = "1.29.0")] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0711]: feature `foo` is declared unstable, but was previously declared stable + --> $DIR/stability-attribute-consistency.rs:22:1 + | +LL | #[unstable(feature = "foo", issue = "0")] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0711`. From af77c42e3800d033f501b6e179fb4189c02deb8a Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 13:50:35 +0100 Subject: [PATCH 17/38] Remove panic-runtime opt-out --- .../run-pass/panic-runtime/abort-link-to-unwinding-crates.rs | 3 --- src/test/run-pass/panic-runtime/abort.rs | 3 --- src/test/run-pass/panic-runtime/link-to-abort.rs | 3 --- 3 files changed, 9 deletions(-) diff --git a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs index e2a1a888144..6917c2db3b4 100644 --- a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs +++ b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs @@ -14,9 +14,6 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -// FIXME(varkor): remove this -// ignore-macos - extern crate exit_success_if_unwind; use std::process::Command; diff --git a/src/test/run-pass/panic-runtime/abort.rs b/src/test/run-pass/panic-runtime/abort.rs index bab59dea422..3a3b86aec02 100644 --- a/src/test/run-pass/panic-runtime/abort.rs +++ b/src/test/run-pass/panic-runtime/abort.rs @@ -13,9 +13,6 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -// FIXME(varkor): remove this -// ignore-macos - use std::process::Command; use std::env; diff --git a/src/test/run-pass/panic-runtime/link-to-abort.rs b/src/test/run-pass/panic-runtime/link-to-abort.rs index 16020aaf060..1b9a6cf8500 100644 --- a/src/test/run-pass/panic-runtime/link-to-abort.rs +++ b/src/test/run-pass/panic-runtime/link-to-abort.rs @@ -11,9 +11,6 @@ // compile-flags:-C panic=abort // no-prefer-dynamic -// FIXME(varkor): remove this -// ignore-macos - #![feature(panic_abort)] extern crate panic_abort; From bd66cbb806ee2a4d288d2e22626dff39ee9cc336 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 14:12:35 +0100 Subject: [PATCH 18/38] Remove obsolete tests in tidy These have been replaced by more reliable checks in the compiler itself. --- src/tools/tidy/src/features.rs | 35 +++------------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/src/tools/tidy/src/features.rs b/src/tools/tidy/src/features.rs index f68ba0b095b..1dc36221bd2 100644 --- a/src/tools/tidy/src/features.rs +++ b/src/tools/tidy/src/features.rs @@ -50,34 +50,6 @@ pub struct Feature { pub tracking_issue: Option, } -impl Feature { - fn check_match(&self, other: &Feature)-> Result<(), Vec<&'static str>> { - let mut mismatches = Vec::new(); - if self.level != other.level { - mismatches.push("stability level"); - } - if self.level == Status::Stable || other.level == Status::Stable { - // As long as a feature is unstable, the since field tracks - // when the given part of the feature has been implemented. - // Mismatches are tolerable as features evolve and functionality - // gets added. - // Once a feature is stable, the since field tracks the first version - // it was part of the stable distribution, and mismatches are disallowed. - if self.since != other.since { - mismatches.push("since"); - } - } - if self.tracking_issue != other.tracking_issue { - mismatches.push("tracking issue"); - } - if mismatches.is_empty() { - Ok(()) - } else { - Err(mismatches) - } - } -} - pub type Features = HashMap; pub fn check(path: &Path, bad: &mut bool, quiet: bool) { @@ -310,13 +282,12 @@ fn get_and_check_lib_features(base_src_path: &Path, Ok((name, f)) => { let mut check_features = |f: &Feature, list: &Features, display: &str| { if let Some(ref s) = list.get(name) { - if let Err(m) = (&f).check_match(s) { + if f.tracking_issue != s.tracking_issue { tidy_error!(bad, - "{}:{}: mismatches to {} in: {:?}", + "{}:{}: mismatches the `issue` in {}", file.display(), line, - display, - &m); + display); } } }; From c81b95f305e76c4173121aabb08af15e2d22aaed Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 14:53:39 +0100 Subject: [PATCH 19/38] Remove unnecessary feature attributes that sneaked in --- src/librustc/lib.rs | 3 --- src/librustc_borrowck/lib.rs | 1 - src/librustc_codegen_llvm/lib.rs | 1 - src/librustc_data_structures/lib.rs | 1 - src/librustc_incremental/lib.rs | 1 - src/librustc_metadata/lib.rs | 1 - src/librustc_mir/lib.rs | 3 --- src/librustc_target/lib.rs | 2 -- src/librustc_typeck/lib.rs | 1 - src/librustdoc/lib.rs | 2 -- 10 files changed, 16 deletions(-) diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 8ff5d33c91d..a5913467b80 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -45,8 +45,6 @@ #![feature(const_fn)] #![feature(core_intrinsics)] #![feature(drain_filter)] -#![feature(from_ref)] -#![feature(fs_read_write)] #![feature(iterator_find_map)] #![cfg_attr(windows, feature(libc))] #![feature(macro_vis_matcher)] @@ -72,7 +70,6 @@ #![feature(test)] #![feature(in_band_lifetimes)] #![feature(macro_at_most_once_rep)] -#![feature(inclusive_range_methods)] #![feature(crate_in_paths)] #![recursion_limit="512"] diff --git a/src/librustc_borrowck/lib.rs b/src/librustc_borrowck/lib.rs index a5a20af0e4e..c7e7465a353 100644 --- a/src/librustc_borrowck/lib.rs +++ b/src/librustc_borrowck/lib.rs @@ -14,7 +14,6 @@ #![allow(non_camel_case_types)] -#![feature(from_ref)] #![feature(quote)] #![recursion_limit="256"] diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index c01ef37d1b8..9599ccfe979 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -23,7 +23,6 @@ #![feature(crate_visibility_modifier)] #![feature(custom_attribute)] #![feature(extern_types)] -#![feature(fs_read_write)] #![feature(in_band_lifetimes)] #![allow(unused_attributes)] #![feature(libc)] diff --git a/src/librustc_data_structures/lib.rs b/src/librustc_data_structures/lib.rs index a9e582e510e..dd90cf7ae19 100644 --- a/src/librustc_data_structures/lib.rs +++ b/src/librustc_data_structures/lib.rs @@ -20,7 +20,6 @@ html_favicon_url = "https://www.rust-lang.org/favicon.ico", html_root_url = "https://doc.rust-lang.org/nightly/")] -#![feature(collections_range)] #![feature(unboxed_closures)] #![feature(fn_traits)] #![feature(unsize)] diff --git a/src/librustc_incremental/lib.rs b/src/librustc_incremental/lib.rs index 3839c133a6e..73886e5e281 100644 --- a/src/librustc_incremental/lib.rs +++ b/src/librustc_incremental/lib.rs @@ -14,7 +14,6 @@ html_favicon_url = "https://doc.rust-lang.org/favicon.ico", html_root_url = "https://doc.rust-lang.org/nightly/")] -#![feature(fs_read_write)] #![feature(specialization)] #![recursion_limit="256"] diff --git a/src/librustc_metadata/lib.rs b/src/librustc_metadata/lib.rs index 798b631989b..98946ad6081 100644 --- a/src/librustc_metadata/lib.rs +++ b/src/librustc_metadata/lib.rs @@ -13,7 +13,6 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![feature(box_patterns)] -#![feature(fs_read_write)] #![feature(libc)] #![feature(macro_at_most_once_rep)] #![feature(proc_macro_internals)] diff --git a/src/librustc_mir/lib.rs b/src/librustc_mir/lib.rs index 3f32d307409..d60b453e0d8 100644 --- a/src/librustc_mir/lib.rs +++ b/src/librustc_mir/lib.rs @@ -18,7 +18,6 @@ Rust MIR: a lowered representation of Rust. Also: an experiment! #![feature(in_band_lifetimes)] #![feature(slice_patterns)] #![feature(slice_sort_by_cached_key)] -#![feature(from_ref)] #![feature(box_patterns)] #![feature(box_syntax)] #![feature(catch_expr)] @@ -26,13 +25,11 @@ Rust MIR: a lowered representation of Rust. Also: an experiment! #![feature(const_fn)] #![feature(core_intrinsics)] #![feature(decl_macro)] -#![feature(fs_read_write)] #![feature(in_band_lifetimes)] #![feature(macro_vis_matcher)] #![feature(exhaustive_patterns)] #![feature(range_contains)] #![feature(rustc_diagnostic_macros)] -#![feature(crate_visibility_modifier)] #![feature(never_type)] #![feature(specialization)] #![feature(try_trait)] diff --git a/src/librustc_target/lib.rs b/src/librustc_target/lib.rs index a50a5a2d1cb..af2697f62f7 100644 --- a/src/librustc_target/lib.rs +++ b/src/librustc_target/lib.rs @@ -23,8 +23,6 @@ #![feature(box_syntax)] #![feature(const_fn)] -#![feature(fs_read_write)] -#![feature(inclusive_range)] #![feature(slice_patterns)] #[macro_use] diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index 9fd5db16fb1..ecc167d5a19 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -74,7 +74,6 @@ This API is completely unstable and subject to change. #![feature(box_patterns)] #![feature(box_syntax)] #![feature(crate_visibility_modifier)] -#![feature(from_ref)] #![feature(exhaustive_patterns)] #![feature(iterator_find_map)] #![feature(quote)] diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index dda97cfdb2c..228a1b9b0cd 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -17,13 +17,11 @@ #![feature(rustc_private)] #![feature(box_patterns)] #![feature(box_syntax)] -#![feature(fs_read_write)] #![feature(iterator_find_map)] #![feature(set_stdio)] #![feature(slice_sort_by_cached_key)] #![feature(test)] #![feature(vec_remove_item)] -#![feature(entry_and_modify)] #![feature(ptr_offset_from)] #![feature(crate_visibility_modifier)] From 47619c0dc7f2048dbd5287a57182da50de0f4f1a Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 17:34:04 +0100 Subject: [PATCH 20/38] Turn the duplicate feature lint into an error --- src/librustc/diagnostics.rs | 13 +++++ src/librustc/lint/builtin.rs | 7 --- src/librustc/middle/stability.rs | 49 +++++++++---------- src/librustc_lint/lib.rs | 1 - .../ui/feature-gate/duplicate-features.rs | 5 +- .../ui/feature-gate/duplicate-features.stderr | 19 +++---- 6 files changed, 46 insertions(+), 48 deletions(-) diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 3b3be757882..b78cfc9499f 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1918,6 +1918,19 @@ fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 { ``` "##, +E0636: r##" +A `#![feature]` attribute was declared multiple times. + +Erroneous code example: + +```compile_fail,E0636 +#![allow(stable_features)] +#![feature(rust1)] +#![feature(rust1)] // error: the feature `rust1` has already been declared +``` + +"##, + E0644: r##" A closure or generator was constructed that references its own type. diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 2301055e5ce..6536ab6ea73 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -111,12 +111,6 @@ declare_lint! { "unknown features found in crate-level #[feature] directives" } -declare_lint! { - pub DUPLICATE_FEATURES, - Deny, - "duplicate features found in crate-level #[feature] directives" -} - declare_lint! { pub STABLE_FEATURES, Warn, @@ -375,7 +369,6 @@ impl LintPass for HardwiredLints { WARNINGS, UNUSED_FEATURES, UNKNOWN_FEATURES, - DUPLICATE_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, TRIVIAL_CASTS, diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 85d4bcbd0d4..bbf03801fdb 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -18,7 +18,7 @@ use hir::def::Def; use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE}; use ty::{self, TyCtxt}; use middle::privacy::AccessLevels; -use session::DiagnosticMessageId; +use session::{DiagnosticMessageId, Session}; use syntax::symbol::Symbol; use syntax_pos::{Span, MultiSpan}; use syntax::ast; @@ -816,20 +816,14 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { let declared_lang_features = &tcx.features().declared_lang_features; let mut lang_features = FxHashSet(); - for &(ref feature, span, since) in declared_lang_features { + for &(feature, span, since) in declared_lang_features { if let Some(since) = since { // Warn if the user has enabled an already-stable lang feature. - tcx.lint_node(lint::builtin::STABLE_FEATURES, - ast::CRATE_NODE_ID, - span, - &format_stable_since_msg(*feature, since)); + unnecessary_stable_feature_lint(tcx, span, feature, since); } if lang_features.contains(&feature) { // Warn if the user enables a lang feature multiple times. - tcx.lint_node(lint::builtin::DUPLICATE_FEATURES, - ast::CRATE_NODE_ID, - span, - &format!("duplicate `{}` feature attribute", feature)); + duplicate_feature_err(tcx.sess, span, feature); } lang_features.insert(feature); } @@ -837,12 +831,9 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { let declared_lib_features = &tcx.features().declared_lib_features; let mut remaining_lib_features = FxHashMap(); for (feature, span) in declared_lib_features { - // Warn if the user enables a lib feature multiple times. if remaining_lib_features.contains_key(&feature) { - tcx.lint_node(lint::builtin::DUPLICATE_FEATURES, - ast::CRATE_NODE_ID, - *span, - &format!("duplicate `{}` feature attribute", feature)); + // Warn if the user enables a lib feature multiple times. + duplicate_feature_err(tcx.sess, *span, *feature); } remaining_lib_features.insert(feature, span.clone()); } @@ -851,16 +842,12 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { remaining_lib_features.remove(&Symbol::intern("libc")); for (feature, stable) in tcx.lib_features().iter() { - // Warn if the user has enabled an already-stable lib feature. if let Some(since) = stable { if let Some(span) = remaining_lib_features.get(&feature) { - tcx.lint_node(lint::builtin::STABLE_FEATURES, - ast::CRATE_NODE_ID, - *span, - &format_stable_since_msg(feature, since)); + // Warn if the user has enabled an already-stable lib feature. + unnecessary_stable_feature_lint(tcx, *span, feature, since); } } - remaining_lib_features.remove(&feature); } @@ -875,8 +862,20 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { // don't lint about unused features. We should reenable this one day! } -fn format_stable_since_msg(feature: Symbol, since: Symbol) -> String { - // "this feature has been stable since {}. Attribute no longer needed" - format!("the feature `{}` has been stable since {} and no longer requires \ - an attribute to enable", feature, since) +fn unnecessary_stable_feature_lint<'a, 'tcx>( + tcx: TyCtxt<'a, 'tcx, 'tcx>, + span: Span, + feature: Symbol, + since: Symbol +) { + tcx.lint_node(lint::builtin::STABLE_FEATURES, + ast::CRATE_NODE_ID, + span, + &format!("the feature `{}` has been stable since {} and no longer requires \ + an attribute to enable", feature, since)); +} + +fn duplicate_feature_err(sess: &Session, span: Span, feature: Symbol) { + struct_span_err!(sess, span, E0636, "the feature `{}` has already been declared", feature) + .emit(); } diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 4d8cee294e3..396e5e869f3 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -189,7 +189,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { UNUSED_EXTERN_CRATES, UNUSED_FEATURES, UNKNOWN_FEATURES, - DUPLICATE_FEATURES, UNUSED_LABELS, UNUSED_PARENS); diff --git a/src/test/ui/feature-gate/duplicate-features.rs b/src/test/ui/feature-gate/duplicate-features.rs index 90d2a6cebcc..163a28772a5 100644 --- a/src/test/ui/feature-gate/duplicate-features.rs +++ b/src/test/ui/feature-gate/duplicate-features.rs @@ -9,12 +9,11 @@ // except according to those terms. #![allow(stable_features)] -#![deny(duplicate_features)] #![feature(rust1)] -#![feature(rust1)] //~ ERROR duplicate `rust1` feature attribute +#![feature(rust1)] //~ ERROR the feature `rust1` has already been declared #![feature(if_let)] -#![feature(if_let)] //~ ERROR duplicate `if_let` feature attribute +#![feature(if_let)] //~ ERROR the feature `if_let` has already been declared fn main() {} diff --git a/src/test/ui/feature-gate/duplicate-features.stderr b/src/test/ui/feature-gate/duplicate-features.stderr index bf8e9157db0..d55297bdd0e 100644 --- a/src/test/ui/feature-gate/duplicate-features.stderr +++ b/src/test/ui/feature-gate/duplicate-features.stderr @@ -1,20 +1,15 @@ -error: duplicate `if_let` feature attribute - --> $DIR/duplicate-features.rs:18:12 +error[E0636]: the feature `if_let` has already been declared + --> $DIR/duplicate-features.rs:17:12 | -LL | #![feature(if_let)] //~ ERROR duplicate `if_let` feature attribute +LL | #![feature(if_let)] //~ ERROR the feature `if_let` has already been declared | ^^^^^^ - | -note: lint level defined here - --> $DIR/duplicate-features.rs:12:9 - | -LL | #![deny(duplicate_features)] - | ^^^^^^^^^^^^^^^^^^ -error: duplicate `rust1` feature attribute - --> $DIR/duplicate-features.rs:15:12 +error[E0636]: the feature `rust1` has already been declared + --> $DIR/duplicate-features.rs:14:12 | -LL | #![feature(rust1)] //~ ERROR duplicate `rust1` feature attribute +LL | #![feature(rust1)] //~ ERROR the feature `rust1` has already been declared | ^^^^^ error: aborting due to 2 previous errors +For more information about this error, try `rustc --explain E0636`. From 120989195f0a20e871bf3a9fd91f8fc93ca76d56 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 21:05:39 +0100 Subject: [PATCH 21/38] Convert unknown_features lint into an error --- src/librustc/diagnostics.rs | 11 + src/librustc/lint/builtin.rs | 7 - src/librustc/middle/stability.rs | 9 +- src/librustc_lint/lib.rs | 2 +- src/libsyntax/diagnostic_list.rs | 12 - src/libsyntax/feature_gate.rs | 1 - src/test/compile-fail/lint-renamed-allow.rs | 2 +- .../lint-unknown-feature-default.rs | 3 +- src/test/compile-fail/lint-unknown-feature.rs | 3 +- src/test/run-fail/args-panic.rs | 1 - src/test/run-fail/panic-macro-any.rs | 1 - .../deriving-encodable-decodable-box.rs | 1 - src/test/run-pass-valgrind/coerce-match.rs | 1 - src/test/run-pass/alignment-gep-tup-like-1.rs | 1 - ...ciated-types-doubleendediterator-object.rs | 2 - src/test/run-pass/async-await.rs | 3 - src/test/run-pass/attr-shebang.rs | 4 +- .../run-pass/autoderef-method-on-trait.rs | 2 - .../run-pass/autoderef-method-priority.rs | 2 - .../autoderef-method-twice-but-not-thrice.rs | 2 - src/test/run-pass/autoderef-method-twice.rs | 2 - src/test/run-pass/autoderef-method.rs | 2 - .../autoref-intermediate-types-issue-3585.rs | 3 - src/test/run-pass/auxiliary/cci_nested_lib.rs | 1 - src/test/run-pass/auxiliary/issue-2380.rs | 1 - .../run-pass/auxiliary/method_self_arg1.rs | 1 - .../run-pass/auxiliary/method_self_arg2.rs | 1 - .../borrowck-borrow-from-expr-block.rs | 2 - .../borrowck/borrowck-field-sensitivity.rs | 1 - .../borrowck/borrowck-move-by-capture-ok.rs | 2 - .../run-pass/borrowck/borrowck-mut-uniq.rs | 1 - .../borrowck/borrowck-use-mut-borrow.rs | 1 - .../cancel-clean-via-immediate-rvalue-ref.rs | 1 - src/test/run-pass/cci_borrow.rs | 1 - .../class-cast-to-trait-cross-crate-2.rs | 1 - src/test/run-pass/class-separate-impl.rs | 1 - src/test/run-pass/cleanup-arm-conditional.rs | 1 - .../cleanup-rvalue-during-if-and-while.rs | 3 - ...nup-rvalue-temp-during-incomplete-alloc.rs | 1 - src/test/run-pass/clone-with-exterior.rs | 1 - .../close-over-big-then-small-data.rs | 1 - src/test/run-pass/coerce-expect-unsized.rs | 1 - .../crate-method-reexport-grrrrrrr.rs | 1 - src/test/run-pass/deref-lval.rs | 1 - src/test/run-pass/deref.rs | 1 - src/test/run-pass/deriving-default-box.rs | 2 - src/test/run-pass/drop-on-empty-block-exit.rs | 1 - src/test/run-pass/drop-struct-as-object.rs | 2 - src/test/run-pass/drop-trait-enum.rs | 1 - src/test/run-pass/dst-struct.rs | 2 - src/test/run-pass/dst-trait.rs | 2 - src/test/run-pass/dst-tuple.rs | 1 - .../enum-nullable-simplifycfg-misopt.rs | 2 - src/test/run-pass/explicit-self-generic.rs | 2 - .../run-pass/explicit-self-objects-uniq.rs | 2 - src/test/run-pass/explicit-self.rs | 2 - .../run-pass/expr-block-generic-unique1.rs | 1 - .../run-pass/expr-block-generic-unique2.rs | 2 - src/test/run-pass/expr-block-unique.rs | 3 - src/test/run-pass/expr-if-unique.rs | 4 - .../run-pass/expr-match-generic-unique1.rs | 2 - .../run-pass/expr-match-generic-unique2.rs | 2 - src/test/run-pass/expr-match-unique.rs | 2 - src/test/run-pass/fsu-moves-and-copies.rs | 2 - .../run-pass/func-arg-incomplete-pattern.rs | 2 - src/test/run-pass/func-arg-ref-pattern.rs | 2 - src/test/run-pass/generic-alias-unique.rs | 1 - src/test/run-pass/generic-exterior-unique.rs | 2 - src/test/run-pass/generic-fn-unique.rs | 1 - src/test/run-pass/generic-object.rs | 2 - src/test/run-pass/generic-recursive-tag.rs | 1 - src/test/run-pass/generic-tag.rs | 1 - src/test/run-pass/generic-unique.rs | 2 - src/test/run-pass/hashmap-memory.rs | 2 - src/test/run-pass/hrtb-precedence-of-plus.rs | 2 - src/test/run-pass/intrinsic-atomics.rs | 2 - src/test/run-pass/issue-10682.rs | 1 - src/test/run-pass/issue-10767.rs | 1 - src/test/run-pass/issue-10802.rs | 2 - src/test/run-pass/issue-11552.rs | 2 - src/test/run-pass/issue-13323.rs | 2 - src/test/run-pass/issue-14399.rs | 1 - src/test/run-pass/issue-15571.rs | 1 - src/test/run-pass/issue-15763.rs | 1 - src/test/run-pass/issue-16668.rs | 2 - src/test/run-pass/issue-16739.rs | 2 - src/test/run-pass/issue-16774.rs | 2 - src/test/run-pass/issue-17322.rs | 1 - src/test/run-pass/issue-2288.rs | 1 - src/test/run-pass/issue-2633-2.rs | 1 - src/test/run-pass/issue-2708.rs | 1 - src/test/run-pass/issue-2734.rs | 1 - src/test/run-pass/issue-2735.rs | 1 - src/test/run-pass/issue-2935.rs | 1 - src/test/run-pass/issue-3121.rs | 1 - src/test/run-pass/issue-3290.rs | 2 - src/test/run-pass/issue-3447.rs | 1 - src/test/run-pass/issue-3794.rs | 1 - src/test/run-pass/issue-3878.rs | 1 - src/test/run-pass/issue-4759.rs | 1 - src/test/run-pass/issue-5192.rs | 1 - src/test/run-pass/issue-5666.rs | 1 - src/test/run-pass/issue-5718.rs | 1 - src/test/run-pass/issue-5884.rs | 1 - src/test/run-pass/issue-6318.rs | 1 - src/test/run-pass/issue-6557.rs | 1 - ...7673-cast-generically-implemented-trait.rs | 1 - src/test/run-pass/issue-9129.rs | 1 - src/test/run-pass/issue-9382.rs | 1 - .../run-pass/kindck-owned-trait-contains-1.rs | 2 - src/test/run-pass/last-use-is-capture.rs | 1 - src/test/run-pass/leak-unique-as-tydesc.rs | 1 - src/test/run-pass/let-assignability.rs | 1 - src/test/run-pass/list.rs | 1 - src/test/run-pass/macro-stability.rs | 3 - .../run-pass/match-implicit-copy-unique.rs | 2 - src/test/run-pass/match-unique-bind.rs | 1 - .../match-value-binding-in-guard-3291.rs | 1 - src/test/run-pass/method-self-arg-aux1.rs | 2 - src/test/run-pass/method-self-arg-aux2.rs | 2 - src/test/run-pass/method-self-arg-trait.rs | 2 - src/test/run-pass/method-self-arg.rs | 2 - .../method-two-trait-defer-resolution-2.rs | 2 - src/test/run-pass/move-1-unique.rs | 2 - src/test/run-pass/move-2-unique.rs | 2 - src/test/run-pass/move-2.rs | 2 - src/test/run-pass/move-3-unique.rs | 2 - src/test/run-pass/move-4-unique.rs | 2 - src/test/run-pass/move-4.rs | 2 - src/test/run-pass/move-arg-2-unique.rs | 2 - src/test/run-pass/move-arg-2.rs | 2 - src/test/run-pass/mut-function-arguments.rs | 2 - src/test/run-pass/new-box.rs | 1 - .../nullable-pointer-iotareduction.rs | 2 - .../run-pass/object-one-type-two-traits.rs | 1 - ...owned-object-borrowed-method-headerless.rs | 2 - .../objects-owned-object-owned-method.rs | 2 - src/test/run-pass/output-slot-variants.rs | 1 - src/test/run-pass/overloaded-autoderef.rs | 1 - .../run-pass/overloaded-index-autoderef.rs | 2 - src/test/run-pass/pure-sum.rs | 1 - src/test/run-pass/rcvr-borrowed-to-region.rs | 1 - src/test/run-pass/regions-borrow-at.rs | 1 - src/test/run-pass/regions-borrow-uniq.rs | 2 - ...-close-over-type-parameter-successfully.rs | 2 - .../run-pass/regions-dependent-addr-of.rs | 2 - .../regions-early-bound-trait-param.rs | 2 - .../run-pass/regions-escape-into-other-fn.rs | 2 - src/test/run-pass/regions-fn-subtyping.rs | 1 - ...gions-infer-borrow-scope-within-loop-ok.rs | 2 - .../run-pass/regions-infer-borrow-scope.rs | 2 - .../regions-lifetime-nonfree-late-bound.rs | 1 - ...ions-on-closures-to-inference-variables.rs | 2 - src/test/run-pass/self-impl.rs | 1 - .../self-in-mut-slot-default-method.rs | 2 - src/test/run-pass/self-re-assign.rs | 2 - src/test/run-pass/sendfn-spawn-with-fn-arg.rs | 1 - src/test/run-pass/task-spawn-move-and-copy.rs | 1 - src/test/run-pass/trait-bounds-in-arc.rs | 2 +- src/test/run-pass/trait-object-generics.rs | 2 - .../run-pass/traits-conditional-dispatch.rs | 2 - src/test/run-pass/type-param-constraints.rs | 1 - .../run-pass/typeclasses-eq-example-static.rs | 2 - src/test/run-pass/typeclasses-eq-example.rs | 1 - src/test/run-pass/ufcs-explicit-self.rs | 1 - src/test/run-pass/unboxed-closures-boxed.rs | 1 - ...ed-closures-call-sugar-object-autoderef.rs | 2 - .../unboxed-closures-call-sugar-object.rs | 2 - src/test/run-pass/uniq-self-in-mut-slot.rs | 2 - src/test/run-pass/unique-assign-copy.rs | 2 - src/test/run-pass/unique-assign-drop.rs | 1 - src/test/run-pass/unique-assign-generic.rs | 3 - src/test/run-pass/unique-assign.rs | 2 - src/test/run-pass/unique-autoderef-field.rs | 2 - src/test/run-pass/unique-autoderef-index.rs | 2 - src/test/run-pass/unique-cmp.rs | 2 - src/test/run-pass/unique-containing-tag.rs | 1 - src/test/run-pass/unique-create.rs | 1 - src/test/run-pass/unique-decl-init-copy.rs | 2 - src/test/run-pass/unique-decl-init.rs | 2 - src/test/run-pass/unique-decl-move.rs | 2 - src/test/run-pass/unique-deref.rs | 2 - src/test/run-pass/unique-destructure.rs | 2 - src/test/run-pass/unique-drop-complex.rs | 1 - src/test/run-pass/unique-fn-arg-move.rs | 2 - src/test/run-pass/unique-fn-arg-mut.rs | 2 - src/test/run-pass/unique-fn-arg.rs | 2 - src/test/run-pass/unique-fn-ret.rs | 2 - src/test/run-pass/unique-in-tag.rs | 1 - src/test/run-pass/unique-in-vec-copy.rs | 2 - src/test/run-pass/unique-in-vec.rs | 2 - src/test/run-pass/unique-init.rs | 1 - src/test/run-pass/unique-kinds.rs | 2 - src/test/run-pass/unique-log.rs | 1 - src/test/run-pass/unique-move-drop.rs | 1 - src/test/run-pass/unique-move-temp.rs | 2 - src/test/run-pass/unique-move.rs | 2 - src/test/run-pass/unique-mutable.rs | 2 - src/test/run-pass/unique-object-move.rs | 1 - src/test/run-pass/unique-pat-2.rs | 2 - src/test/run-pass/unique-pat-3.rs | 1 - src/test/run-pass/unique-pat.rs | 1 - src/test/run-pass/unique-rec.rs | 2 - src/test/run-pass/unique-send-2.rs | 1 - src/test/run-pass/unique-send.rs | 2 - src/test/run-pass/unique-swap.rs | 2 - src/test/run-pass/unsized2.rs | 1 - src/test/run-pass/unused-move-capture.rs | 1 - src/test/run-pass/unused-move.rs | 1 - src/test/run-pass/unwind-unique.rs | 1 - src/test/run-pass/vec-dst.rs | 2 - src/test/run-pass/vector-no-ann-2.rs | 1 - .../issue-43106-gating-of-builtin-attrs.rs | 3 +- ...issue-43106-gating-of-builtin-attrs.stderr | 428 +++++++++--------- src/test/ui/feature-gate/unknown-feature.rs | 2 - .../ui/feature-gate/unknown-feature.stderr | 11 +- src/test/ui/lint-output-format-2.rs | 3 - src/test/ui/lint-output-format-2.stderr | 6 +- 218 files changed, 247 insertions(+), 575 deletions(-) diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index b78cfc9499f..a3c0688dcc8 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1918,6 +1918,17 @@ fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 { ``` "##, +E0635: r##" +The `#![feature]` attribute specified an unknown feature. + +Erroneous code example: + +```compile_fail,E0635 +#![feature(nonexistent_rust_feature)] // error: unknown feature +``` + +"##, + E0636: r##" A `#![feature]` attribute was declared multiple times. diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index 6536ab6ea73..590b59568c4 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -105,12 +105,6 @@ declare_lint! { "unused features found in crate-level #[feature] directives" } -declare_lint! { - pub UNKNOWN_FEATURES, - Deny, - "unknown features found in crate-level #[feature] directives" -} - declare_lint! { pub STABLE_FEATURES, Warn, @@ -368,7 +362,6 @@ impl LintPass for HardwiredLints { UNUSED_MACROS, WARNINGS, UNUSED_FEATURES, - UNKNOWN_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, TRIVIAL_CASTS, diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index bbf03801fdb..34b253ff9c6 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -840,6 +840,10 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, // but it happens just to affect `libc`, so we're just going to hard-code it for now. remaining_lib_features.remove(&Symbol::intern("libc")); + // FIXME(varkor): we have a problem gathering features on macros right now, so we're + // going to hard-code some features here for now. + remaining_lib_features.remove(&Symbol::intern("await_macro")); + remaining_lib_features.remove(&Symbol::intern("unstable_macros")); for (feature, stable) in tcx.lib_features().iter() { if let Some(since) = stable { @@ -852,10 +856,7 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { } for (feature, span) in remaining_lib_features { - tcx.lint_node(lint::builtin::UNKNOWN_FEATURES, - ast::CRATE_NODE_ID, - span, - &format!("unknown feature `{}`", feature)); + struct_span_err!(tcx.sess, span, E0635, "unknown feature `{}`", feature).emit(); } // FIXME(#44232): the `used_features` table no longer exists, so we diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 396e5e869f3..75d16232a37 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -188,7 +188,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { UNUSED_DOC_COMMENTS, UNUSED_EXTERN_CRATES, UNUSED_FEATURES, - UNKNOWN_FEATURES, UNUSED_LABELS, UNUSED_PARENS); @@ -343,6 +342,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { store.register_renamed("bare_trait_object", "bare_trait_objects"); store.register_renamed("unstable_name_collision", "unstable_name_collisions"); store.register_renamed("unused_doc_comment", "unused_doc_comments"); + store.register_removed("unknown_features", "replaced by an error"); store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate"); store.register_removed("negate_unsigned", "cast a signed value instead"); store.register_removed("raw_pointer_derive", "using derive with raw pointers is ok"); diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index 20be7f8361a..8534969c623 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -374,18 +374,6 @@ and likely to change in the future. "##, -E0635: r##" -The `#![feature]` attribute specified an unknown feature. - -Erroneous code example: - -```compile_fail,E0635 -#![feature(nonexistent_rust_feature)] // error: unknown feature -``` - -"##, - - } register_diagnostics! { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 9ca9909ffa6..4aafe8bba58 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -140,7 +140,6 @@ declare_features! ( (active, linkage, "1.0.0", Some(29603), None), (active, quote, "1.0.0", Some(29601), None), - // rustc internal (active, rustc_diagnostic_macros, "1.0.0", None, None), (active, rustc_const_unstable, "1.0.0", None, None), diff --git a/src/test/compile-fail/lint-renamed-allow.rs b/src/test/compile-fail/lint-renamed-allow.rs index ae010b64bfd..f6b94e89826 100644 --- a/src/test/compile-fail/lint-renamed-allow.rs +++ b/src/test/compile-fail/lint-renamed-allow.rs @@ -13,6 +13,6 @@ #![allow(renamed_and_removed_lints)] -#[deny(unknown_features)] +#[deny(single_use_lifetime)] #[deny(unused)] fn main() { let unused = (); } //~ ERROR unused diff --git a/src/test/compile-fail/lint-unknown-feature-default.rs b/src/test/compile-fail/lint-unknown-feature-default.rs index 79ba3ea45e1..5a0568f05e6 100644 --- a/src/test/compile-fail/lint-unknown-feature-default.rs +++ b/src/test/compile-fail/lint-unknown-feature-default.rs @@ -10,8 +10,9 @@ // Tests the default for the unused_features lint +#![allow(stable_features)] // FIXME(#44232) we should warn that this isn't used. -#![feature(this_is_not_a_feature)] +#![feature(rust1)] #![feature(rustc_attrs)] diff --git a/src/test/compile-fail/lint-unknown-feature.rs b/src/test/compile-fail/lint-unknown-feature.rs index d230297aaba..81f99f99492 100644 --- a/src/test/compile-fail/lint-unknown-feature.rs +++ b/src/test/compile-fail/lint-unknown-feature.rs @@ -10,8 +10,9 @@ #![warn(unused_features)] +#![allow(stable_features)] // FIXME(#44232) we should warn that this isn't used. -#![feature(this_is_not_a_feature)] +#![feature(rust1)] #![feature(rustc_attrs)] diff --git a/src/test/run-fail/args-panic.rs b/src/test/run-fail/args-panic.rs index b8fb03faf08..3eca89fbed3 100644 --- a/src/test/run-fail/args-panic.rs +++ b/src/test/run-fail/args-panic.rs @@ -11,7 +11,6 @@ // error-pattern:meep -#![allow(unknown_features)] #![feature(box_syntax)] fn f(_a: isize, _b: isize, _c: Box) { diff --git a/src/test/run-fail/panic-macro-any.rs b/src/test/run-fail/panic-macro-any.rs index 7ca45565d85..c8f851be556 100644 --- a/src/test/run-fail/panic-macro-any.rs +++ b/src/test/run-fail/panic-macro-any.rs @@ -10,7 +10,6 @@ // error-pattern:panicked at 'Box' -#![allow(unknown_features)] #![feature(box_syntax)] fn main() { diff --git a/src/test/run-pass-fulldeps/deriving-encodable-decodable-box.rs b/src/test/run-pass-fulldeps/deriving-encodable-decodable-box.rs index 1573b080717..4c5b3259902 100644 --- a/src/test/run-pass-fulldeps/deriving-encodable-decodable-box.rs +++ b/src/test/run-pass-fulldeps/deriving-encodable-decodable-box.rs @@ -9,7 +9,6 @@ // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] #![feature(rustc_private)] diff --git a/src/test/run-pass-valgrind/coerce-match.rs b/src/test/run-pass-valgrind/coerce-match.rs index 6bf5c4d596f..360e8c9cc4f 100644 --- a/src/test/run-pass-valgrind/coerce-match.rs +++ b/src/test/run-pass-valgrind/coerce-match.rs @@ -12,7 +12,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/alignment-gep-tup-like-1.rs b/src/test/run-pass/alignment-gep-tup-like-1.rs index 72a79e188b3..c1f75d5ee74 100644 --- a/src/test/run-pass/alignment-gep-tup-like-1.rs +++ b/src/test/run-pass/alignment-gep-tup-like-1.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] struct pair { diff --git a/src/test/run-pass/associated-types-doubleendediterator-object.rs b/src/test/run-pass/associated-types-doubleendediterator-object.rs index 0a6135080bb..de83e4edd85 100644 --- a/src/test/run-pass/associated-types-doubleendediterator-object.rs +++ b/src/test/run-pass/associated-types-doubleendediterator-object.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn pairwise_sub(mut t: Box>) -> isize { diff --git a/src/test/run-pass/async-await.rs b/src/test/run-pass/async-await.rs index 669d61fdb19..0ac37485d3d 100644 --- a/src/test/run-pass/async-await.rs +++ b/src/test/run-pass/async-await.rs @@ -10,9 +10,6 @@ // edition:2018 -// FIXME(varkor): `await_macro` isn't visible. -#![allow(unknown_features)] - #![feature(arbitrary_self_types, async_await, await_macro, futures_api, pin)] use std::boxed::PinBox; diff --git a/src/test/run-pass/attr-shebang.rs b/src/test/run-pass/attr-shebang.rs index 95f3ea61dd8..73f10410828 100644 --- a/src/test/run-pass/attr-shebang.rs +++ b/src/test/run-pass/attr-shebang.rs @@ -1,4 +1,4 @@ -#![allow(unknown_features)] -#![feature(bogus)] +#![allow(stable_features)] +#![feature(rust1)] pub fn main() { } // ignore-license diff --git a/src/test/run-pass/autoderef-method-on-trait.rs b/src/test/run-pass/autoderef-method-on-trait.rs index 5c5364de6a8..f6ff9a31fa1 100644 --- a/src/test/run-pass/autoderef-method-on-trait.rs +++ b/src/test/run-pass/autoderef-method-on-trait.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait double { diff --git a/src/test/run-pass/autoderef-method-priority.rs b/src/test/run-pass/autoderef-method-priority.rs index c80a92a185a..234af92610a 100644 --- a/src/test/run-pass/autoderef-method-priority.rs +++ b/src/test/run-pass/autoderef-method-priority.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait double { diff --git a/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs b/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs index 2a782cfa176..5890fe44166 100644 --- a/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs +++ b/src/test/run-pass/autoderef-method-twice-but-not-thrice.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait double { diff --git a/src/test/run-pass/autoderef-method-twice.rs b/src/test/run-pass/autoderef-method-twice.rs index a1bcf65ab75..2598ec17d2a 100644 --- a/src/test/run-pass/autoderef-method-twice.rs +++ b/src/test/run-pass/autoderef-method-twice.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait double { diff --git a/src/test/run-pass/autoderef-method.rs b/src/test/run-pass/autoderef-method.rs index 326218674ae..7c83b9c982f 100644 --- a/src/test/run-pass/autoderef-method.rs +++ b/src/test/run-pass/autoderef-method.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait double { diff --git a/src/test/run-pass/autoref-intermediate-types-issue-3585.rs b/src/test/run-pass/autoref-intermediate-types-issue-3585.rs index 05f12fd089a..4096d45d8df 100644 --- a/src/test/run-pass/autoref-intermediate-types-issue-3585.rs +++ b/src/test/run-pass/autoref-intermediate-types-issue-3585.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - - -#![allow(unknown_features)] #![feature(box_syntax)] trait Foo { diff --git a/src/test/run-pass/auxiliary/cci_nested_lib.rs b/src/test/run-pass/auxiliary/cci_nested_lib.rs index 8c1a283a72d..91de734ec3a 100644 --- a/src/test/run-pass/auxiliary/cci_nested_lib.rs +++ b/src/test/run-pass/auxiliary/cci_nested_lib.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::cell::RefCell; diff --git a/src/test/run-pass/auxiliary/issue-2380.rs b/src/test/run-pass/auxiliary/issue-2380.rs index cfebc4abaaa..b3e0f061485 100644 --- a/src/test/run-pass/auxiliary/issue-2380.rs +++ b/src/test/run-pass/auxiliary/issue-2380.rs @@ -11,7 +11,6 @@ #![crate_name="a"] #![crate_type = "lib"] -#![allow(unknown_features)] #![feature(box_syntax)] pub trait i diff --git a/src/test/run-pass/auxiliary/method_self_arg1.rs b/src/test/run-pass/auxiliary/method_self_arg1.rs index 348b71faf0c..785a8b05664 100644 --- a/src/test/run-pass/auxiliary/method_self_arg1.rs +++ b/src/test/run-pass/auxiliary/method_self_arg1.rs @@ -10,7 +10,6 @@ #![crate_type = "lib"] -#![allow(unknown_features)] #![feature(box_syntax)] static mut COUNT: u64 = 1; diff --git a/src/test/run-pass/auxiliary/method_self_arg2.rs b/src/test/run-pass/auxiliary/method_self_arg2.rs index b67ec1b9bfc..3761d58087e 100644 --- a/src/test/run-pass/auxiliary/method_self_arg2.rs +++ b/src/test/run-pass/auxiliary/method_self_arg2.rs @@ -10,7 +10,6 @@ #![crate_type = "lib"] -#![allow(unknown_features)] #![feature(box_syntax)] static mut COUNT: u64 = 1; diff --git a/src/test/run-pass/borrowck/borrowck-borrow-from-expr-block.rs b/src/test/run-pass/borrowck/borrowck-borrow-from-expr-block.rs index 7fdc65a96e2..1d7230510df 100644 --- a/src/test/run-pass/borrowck/borrowck-borrow-from-expr-block.rs +++ b/src/test/run-pass/borrowck/borrowck-borrow-from-expr-block.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn borrow(x: &isize, f: F) where F: FnOnce(&isize) { diff --git a/src/test/run-pass/borrowck/borrowck-field-sensitivity.rs b/src/test/run-pass/borrowck/borrowck-field-sensitivity.rs index d97564a2914..a465c9cf811 100644 --- a/src/test/run-pass/borrowck/borrowck-field-sensitivity.rs +++ b/src/test/run-pass/borrowck/borrowck-field-sensitivity.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct A { a: isize, b: Box } diff --git a/src/test/run-pass/borrowck/borrowck-move-by-capture-ok.rs b/src/test/run-pass/borrowck/borrowck-move-by-capture-ok.rs index 158594df8ca..c3645867117 100644 --- a/src/test/run-pass/borrowck/borrowck-move-by-capture-ok.rs +++ b/src/test/run-pass/borrowck/borrowck-move-by-capture-ok.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/borrowck/borrowck-mut-uniq.rs b/src/test/run-pass/borrowck/borrowck-mut-uniq.rs index f535c5fcfc9..ec868bc5c85 100644 --- a/src/test/run-pass/borrowck/borrowck-mut-uniq.rs +++ b/src/test/run-pass/borrowck/borrowck-mut-uniq.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::mem::swap; diff --git a/src/test/run-pass/borrowck/borrowck-use-mut-borrow.rs b/src/test/run-pass/borrowck/borrowck-use-mut-borrow.rs index 7ad81b6be6e..8c94df6dbf4 100644 --- a/src/test/run-pass/borrowck/borrowck-use-mut-borrow.rs +++ b/src/test/run-pass/borrowck/borrowck-use-mut-borrow.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct A { a: isize, b: Box } diff --git a/src/test/run-pass/cancel-clean-via-immediate-rvalue-ref.rs b/src/test/run-pass/cancel-clean-via-immediate-rvalue-ref.rs index d2eb5c33eae..ac309216250 100644 --- a/src/test/run-pass/cancel-clean-via-immediate-rvalue-ref.rs +++ b/src/test/run-pass/cancel-clean-via-immediate-rvalue-ref.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn foo(x: &mut Box) { diff --git a/src/test/run-pass/cci_borrow.rs b/src/test/run-pass/cci_borrow.rs index cd8f783a2e5..1535ddfb4de 100644 --- a/src/test/run-pass/cci_borrow.rs +++ b/src/test/run-pass/cci_borrow.rs @@ -10,7 +10,6 @@ // aux-build:cci_borrow_lib.rs -#![allow(unknown_features)] #![feature(box_syntax)] extern crate cci_borrow_lib; diff --git a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs index da51ad761c7..04c4b2cb377 100644 --- a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs +++ b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs @@ -10,7 +10,6 @@ // aux-build:cci_class_cast.rs -#![allow(unknown_features)] #![feature(box_syntax)] extern crate cci_class_cast; diff --git a/src/test/run-pass/class-separate-impl.rs b/src/test/run-pass/class-separate-impl.rs index 52853658c82..343d414758c 100644 --- a/src/test/run-pass/class-separate-impl.rs +++ b/src/test/run-pass/class-separate-impl.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::fmt; diff --git a/src/test/run-pass/cleanup-arm-conditional.rs b/src/test/run-pass/cleanup-arm-conditional.rs index 58d7c1df19c..dd900c56b40 100644 --- a/src/test/run-pass/cleanup-arm-conditional.rs +++ b/src/test/run-pass/cleanup-arm-conditional.rs @@ -13,7 +13,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax, os)] use std::os; diff --git a/src/test/run-pass/cleanup-rvalue-during-if-and-while.rs b/src/test/run-pass/cleanup-rvalue-during-if-and-while.rs index d813a6d8102..b117f4abd95 100644 --- a/src/test/run-pass/cleanup-rvalue-during-if-and-while.rs +++ b/src/test/run-pass/cleanup-rvalue-during-if-and-while.rs @@ -8,12 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - // This test verifies that temporaries created for `while`'s and `if` // conditions are dropped after the condition is evaluated. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Temporary; diff --git a/src/test/run-pass/cleanup-rvalue-temp-during-incomplete-alloc.rs b/src/test/run-pass/cleanup-rvalue-temp-during-incomplete-alloc.rs index c401b529c30..ae455d916b6 100644 --- a/src/test/run-pass/cleanup-rvalue-temp-during-incomplete-alloc.rs +++ b/src/test/run-pass/cleanup-rvalue-temp-during-incomplete-alloc.rs @@ -26,7 +26,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/clone-with-exterior.rs b/src/test/run-pass/clone-with-exterior.rs index 48aa41cf1d1..6ac7acd2a6b 100644 --- a/src/test/run-pass/clone-with-exterior.rs +++ b/src/test/run-pass/clone-with-exterior.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/close-over-big-then-small-data.rs b/src/test/run-pass/close-over-big-then-small-data.rs index 99fdc346026..ba700e4e326 100644 --- a/src/test/run-pass/close-over-big-then-small-data.rs +++ b/src/test/run-pass/close-over-big-then-small-data.rs @@ -12,7 +12,6 @@ // storing closure data (as we used to do), the u64 would // overwrite the u16. -#![allow(unknown_features)] #![feature(box_syntax)] struct Pair { diff --git a/src/test/run-pass/coerce-expect-unsized.rs b/src/test/run-pass/coerce-expect-unsized.rs index a074aea9caa..5a1953b563a 100644 --- a/src/test/run-pass/coerce-expect-unsized.rs +++ b/src/test/run-pass/coerce-expect-unsized.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::cell::RefCell; diff --git a/src/test/run-pass/crate-method-reexport-grrrrrrr.rs b/src/test/run-pass/crate-method-reexport-grrrrrrr.rs index 028b3f43e2a..c0bc97b1f65 100644 --- a/src/test/run-pass/crate-method-reexport-grrrrrrr.rs +++ b/src/test/run-pass/crate-method-reexport-grrrrrrr.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] // This is a regression test that the metadata for the diff --git a/src/test/run-pass/deref-lval.rs b/src/test/run-pass/deref-lval.rs index fc97b22a4a9..0e65e5b43b7 100644 --- a/src/test/run-pass/deref-lval.rs +++ b/src/test/run-pass/deref-lval.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::cell::Cell; diff --git a/src/test/run-pass/deref.rs b/src/test/run-pass/deref.rs index 4722ddd64c8..0e6b3d87d34 100644 --- a/src/test/run-pass/deref.rs +++ b/src/test/run-pass/deref.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/deriving-default-box.rs b/src/test/run-pass/deriving-default-box.rs index c9e5b014da3..70ac284cd30 100644 --- a/src/test/run-pass/deriving-default-box.rs +++ b/src/test/run-pass/deriving-default-box.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] use std::default::Default; diff --git a/src/test/run-pass/drop-on-empty-block-exit.rs b/src/test/run-pass/drop-on-empty-block-exit.rs index 268de8ec55c..8dea648508d 100644 --- a/src/test/run-pass/drop-on-empty-block-exit.rs +++ b/src/test/run-pass/drop-on-empty-block-exit.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] enum t { foo(Box), } diff --git a/src/test/run-pass/drop-struct-as-object.rs b/src/test/run-pass/drop-struct-as-object.rs index 33d5c72772c..17603e11ddd 100644 --- a/src/test/run-pass/drop-struct-as-object.rs +++ b/src/test/run-pass/drop-struct-as-object.rs @@ -11,8 +11,6 @@ // Test that destructor on a struct runs successfully after the struct // is boxed and converted to an object. - -#![allow(unknown_features)] #![feature(box_syntax)] static mut value: usize = 0; diff --git a/src/test/run-pass/drop-trait-enum.rs b/src/test/run-pass/drop-trait-enum.rs index 912cb4c5e87..a6027615adb 100644 --- a/src/test/run-pass/drop-trait-enum.rs +++ b/src/test/run-pass/drop-trait-enum.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/dst-struct.rs b/src/test/run-pass/dst-struct.rs index 56199c1aa61..40ca8472787 100644 --- a/src/test/run-pass/dst-struct.rs +++ b/src/test/run-pass/dst-struct.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Fat { diff --git a/src/test/run-pass/dst-trait.rs b/src/test/run-pass/dst-trait.rs index d8d7d9a28bf..a412306b966 100644 --- a/src/test/run-pass/dst-trait.rs +++ b/src/test/run-pass/dst-trait.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Fat { diff --git a/src/test/run-pass/dst-tuple.rs b/src/test/run-pass/dst-tuple.rs index 2f5b28495b8..7c2125d00f9 100644 --- a/src/test/run-pass/dst-tuple.rs +++ b/src/test/run-pass/dst-tuple.rs @@ -9,7 +9,6 @@ // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] #![feature(unsized_tuple_coercion)] diff --git a/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs index c8a1047cfa8..b5db8d91320 100644 --- a/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs +++ b/src/test/run-pass/enum-nullable-simplifycfg-misopt.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] /*! diff --git a/src/test/run-pass/explicit-self-generic.rs b/src/test/run-pass/explicit-self-generic.rs index 1b50d3028b1..d2274ced556 100644 --- a/src/test/run-pass/explicit-self-generic.rs +++ b/src/test/run-pass/explicit-self-generic.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Copy, Clone)] diff --git a/src/test/run-pass/explicit-self-objects-uniq.rs b/src/test/run-pass/explicit-self-objects-uniq.rs index 4021ae89e36..bb7e612a9f2 100644 --- a/src/test/run-pass/explicit-self-objects-uniq.rs +++ b/src/test/run-pass/explicit-self-objects-uniq.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait Foo { diff --git a/src/test/run-pass/explicit-self.rs b/src/test/run-pass/explicit-self.rs index d2a0d60eb66..11711e6ab74 100644 --- a/src/test/run-pass/explicit-self.rs +++ b/src/test/run-pass/explicit-self.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] static tau: f64 = 2.0*3.14159265358979323; diff --git a/src/test/run-pass/expr-block-generic-unique1.rs b/src/test/run-pass/expr-block-generic-unique1.rs index 1654c87c6a4..304f1c7a2ea 100644 --- a/src/test/run-pass/expr-block-generic-unique1.rs +++ b/src/test/run-pass/expr-block-generic-unique1.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn test_generic(expected: Box, eq: F) where T: Clone, F: FnOnce(Box, Box) -> bool { diff --git a/src/test/run-pass/expr-block-generic-unique2.rs b/src/test/run-pass/expr-block-generic-unique2.rs index 5477a9227aa..af3f5547867 100644 --- a/src/test/run-pass/expr-block-generic-unique2.rs +++ b/src/test/run-pass/expr-block-generic-unique2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn test_generic(expected: T, eq: F) where T: Clone, F: FnOnce(T, T) -> bool { diff --git a/src/test/run-pass/expr-block-unique.rs b/src/test/run-pass/expr-block-unique.rs index eb24d70de90..2426ee5966c 100644 --- a/src/test/run-pass/expr-block-unique.rs +++ b/src/test/run-pass/expr-block-unique.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { let x: Box<_> = { box 100 }; assert_eq!(*x, 100); } diff --git a/src/test/run-pass/expr-if-unique.rs b/src/test/run-pass/expr-if-unique.rs index 12000fd54e7..a8547536603 100644 --- a/src/test/run-pass/expr-if-unique.rs +++ b/src/test/run-pass/expr-if-unique.rs @@ -8,12 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - - -#![allow(unknown_features)] #![feature(box_syntax)] - // Tests for if as expressions returning boxed types fn test_box() { let rs: Box<_> = if true { box 100 } else { box 101 }; diff --git a/src/test/run-pass/expr-match-generic-unique1.rs b/src/test/run-pass/expr-match-generic-unique1.rs index 738fcecb2e0..3fce798c285 100644 --- a/src/test/run-pass/expr-match-generic-unique1.rs +++ b/src/test/run-pass/expr-match-generic-unique1.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn test_generic(expected: Box, eq: F) where F: FnOnce(Box, Box) -> bool { diff --git a/src/test/run-pass/expr-match-generic-unique2.rs b/src/test/run-pass/expr-match-generic-unique2.rs index 88ea2415241..5500edcf239 100644 --- a/src/test/run-pass/expr-match-generic-unique2.rs +++ b/src/test/run-pass/expr-match-generic-unique2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn test_generic(expected: T, eq: F) where F: FnOnce(T, T) -> bool { diff --git a/src/test/run-pass/expr-match-unique.rs b/src/test/run-pass/expr-match-unique.rs index e752c20a512..e66f09c63ea 100644 --- a/src/test/run-pass/expr-match-unique.rs +++ b/src/test/run-pass/expr-match-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] // Tests for match as expressions resulting in boxed types diff --git a/src/test/run-pass/fsu-moves-and-copies.rs b/src/test/run-pass/fsu-moves-and-copies.rs index e6ac8b52c51..efd7f66e93b 100644 --- a/src/test/run-pass/fsu-moves-and-copies.rs +++ b/src/test/run-pass/fsu-moves-and-copies.rs @@ -11,8 +11,6 @@ // Issue 4691: Ensure that functional-struct-updates operates // correctly and moves rather than copy when appropriate. - -#![allow(unknown_features)] #![feature(box_syntax, core)] struct ncint { v: isize } diff --git a/src/test/run-pass/func-arg-incomplete-pattern.rs b/src/test/run-pass/func-arg-incomplete-pattern.rs index 6030da44e4a..7d9501879d0 100644 --- a/src/test/run-pass/func-arg-incomplete-pattern.rs +++ b/src/test/run-pass/func-arg-incomplete-pattern.rs @@ -11,8 +11,6 @@ // Test that we do not leak when the arg pattern must drop part of the // argument (in this case, the `y` field). - -#![allow(unknown_features)] #![feature(box_syntax)] struct Foo { diff --git a/src/test/run-pass/func-arg-ref-pattern.rs b/src/test/run-pass/func-arg-ref-pattern.rs index ab565e7abca..5214f2d02f5 100644 --- a/src/test/run-pass/func-arg-ref-pattern.rs +++ b/src/test/run-pass/func-arg-ref-pattern.rs @@ -14,8 +14,6 @@ // boxes. Make sure that we don't free the box as we match the // pattern. - -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/generic-alias-unique.rs b/src/test/run-pass/generic-alias-unique.rs index b8d7c2140be..c4fd3119615 100644 --- a/src/test/run-pass/generic-alias-unique.rs +++ b/src/test/run-pass/generic-alias-unique.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn id(t: T) -> T { return t; } diff --git a/src/test/run-pass/generic-exterior-unique.rs b/src/test/run-pass/generic-exterior-unique.rs index 8dbe6de8388..64091d2926c 100644 --- a/src/test/run-pass/generic-exterior-unique.rs +++ b/src/test/run-pass/generic-exterior-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Recbox {x: Box} diff --git a/src/test/run-pass/generic-fn-unique.rs b/src/test/run-pass/generic-fn-unique.rs index 6599aa74124..3585cd2e079 100644 --- a/src/test/run-pass/generic-fn-unique.rs +++ b/src/test/run-pass/generic-fn-unique.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn f(x: Box) -> Box { return x; } diff --git a/src/test/run-pass/generic-object.rs b/src/test/run-pass/generic-object.rs index 0a59a925a5f..7e737fe00af 100644 --- a/src/test/run-pass/generic-object.rs +++ b/src/test/run-pass/generic-object.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait Foo { diff --git a/src/test/run-pass/generic-recursive-tag.rs b/src/test/run-pass/generic-recursive-tag.rs index 433bd7cd906..ca2bf0ac224 100644 --- a/src/test/run-pass/generic-recursive-tag.rs +++ b/src/test/run-pass/generic-recursive-tag.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] enum list { cons(Box, Box>), nil, } diff --git a/src/test/run-pass/generic-tag.rs b/src/test/run-pass/generic-tag.rs index 75fd9fcb7b6..a79465c8cd8 100644 --- a/src/test/run-pass/generic-tag.rs +++ b/src/test/run-pass/generic-tag.rs @@ -12,7 +12,6 @@ #![allow(dead_assignment)] #![allow(unused_variables)] -#![allow(unknown_features)] #![feature(box_syntax)] enum option { some(Box), none, } diff --git a/src/test/run-pass/generic-unique.rs b/src/test/run-pass/generic-unique.rs index 21e9a9a80d0..1b1355ea336 100644 --- a/src/test/run-pass/generic-unique.rs +++ b/src/test/run-pass/generic-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Triple { x: T, y: T, z: T } diff --git a/src/test/run-pass/hashmap-memory.rs b/src/test/run-pass/hashmap-memory.rs index f88ce83e37d..2e98e0fe5ca 100644 --- a/src/test/run-pass/hashmap-memory.rs +++ b/src/test/run-pass/hashmap-memory.rs @@ -10,8 +10,6 @@ // ignore-emscripten No support for threads -#![allow(unknown_features)] - /** A somewhat reduced test case to expose some Valgrind issues. diff --git a/src/test/run-pass/hrtb-precedence-of-plus.rs b/src/test/run-pass/hrtb-precedence-of-plus.rs index 516278df178..511d3234857 100644 --- a/src/test/run-pass/hrtb-precedence-of-plus.rs +++ b/src/test/run-pass/hrtb-precedence-of-plus.rs @@ -10,8 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] - // Test that `Fn(isize) -> isize + 'static` parses as `(Fn(isize) -> isize) + // 'static` and not `Fn(isize) -> (isize + 'static)`. The latter would // cause a compilation error. Issue #18772. diff --git a/src/test/run-pass/intrinsic-atomics.rs b/src/test/run-pass/intrinsic-atomics.rs index a675528424e..4b11158e8c3 100644 --- a/src/test/run-pass/intrinsic-atomics.rs +++ b/src/test/run-pass/intrinsic-atomics.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #![feature(intrinsics)] diff --git a/src/test/run-pass/issue-10682.rs b/src/test/run-pass/issue-10682.rs index c049bdfe83c..67b73bdadbb 100644 --- a/src/test/run-pass/issue-10682.rs +++ b/src/test/run-pass/issue-10682.rs @@ -13,7 +13,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn work(_: Box) {} diff --git a/src/test/run-pass/issue-10767.rs b/src/test/run-pass/issue-10767.rs index b5ef6020b57..2184aa00fa4 100644 --- a/src/test/run-pass/issue-10767.rs +++ b/src/test/run-pass/issue-10767.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/issue-10802.rs b/src/test/run-pass/issue-10802.rs index 2256315a379..1e700d4e18b 100644 --- a/src/test/run-pass/issue-10802.rs +++ b/src/test/run-pass/issue-10802.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct DroppableStruct; diff --git a/src/test/run-pass/issue-11552.rs b/src/test/run-pass/issue-11552.rs index 5193330a45a..aa980e48c5e 100644 --- a/src/test/run-pass/issue-11552.rs +++ b/src/test/run-pass/issue-11552.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/issue-13323.rs b/src/test/run-pass/issue-13323.rs index 68c6ce7a7b7..de72d7152f8 100644 --- a/src/test/run-pass/issue-13323.rs +++ b/src/test/run-pass/issue-13323.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct StrWrap { diff --git a/src/test/run-pass/issue-14399.rs b/src/test/run-pass/issue-14399.rs index aa91f125e48..d5c67bea099 100644 --- a/src/test/run-pass/issue-14399.rs +++ b/src/test/run-pass/issue-14399.rs @@ -15,7 +15,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Clone)] diff --git a/src/test/run-pass/issue-15571.rs b/src/test/run-pass/issue-15571.rs index 3dc76f4a089..35915a62102 100644 --- a/src/test/run-pass/issue-15571.rs +++ b/src/test/run-pass/issue-15571.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn match_on_local() { diff --git a/src/test/run-pass/issue-15763.rs b/src/test/run-pass/issue-15763.rs index 0baaaac2676..e1176d47063 100644 --- a/src/test/run-pass/issue-15763.rs +++ b/src/test/run-pass/issue-15763.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(PartialEq, Debug)] diff --git a/src/test/run-pass/issue-16668.rs b/src/test/run-pass/issue-16668.rs index 5613211b31d..7944e80a428 100644 --- a/src/test/run-pass/issue-16668.rs +++ b/src/test/run-pass/issue-16668.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] - struct Parser<'a, I, O> { parse: Box Result + 'a> } diff --git a/src/test/run-pass/issue-16739.rs b/src/test/run-pass/issue-16739.rs index ca2b9209eba..2bdedfebe3e 100644 --- a/src/test/run-pass/issue-16739.rs +++ b/src/test/run-pass/issue-16739.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #![feature(unboxed_closures, fn_traits)] diff --git a/src/test/run-pass/issue-16774.rs b/src/test/run-pass/issue-16774.rs index 9ec5910c2f6..1309d2ffab8 100644 --- a/src/test/run-pass/issue-16774.rs +++ b/src/test/run-pass/issue-16774.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #![feature(box_patterns)] diff --git a/src/test/run-pass/issue-17322.rs b/src/test/run-pass/issue-17322.rs index a9f5476d0f8..47dfe878c26 100644 --- a/src/test/run-pass/issue-17322.rs +++ b/src/test/run-pass/issue-17322.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax, io)] use std::io::{self, Write}; diff --git a/src/test/run-pass/issue-2288.rs b/src/test/run-pass/issue-2288.rs index 379715f5390..b8353ea4413 100644 --- a/src/test/run-pass/issue-2288.rs +++ b/src/test/run-pass/issue-2288.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] trait clam { diff --git a/src/test/run-pass/issue-2633-2.rs b/src/test/run-pass/issue-2633-2.rs index 7b5a055d334..b955947c410 100644 --- a/src/test/run-pass/issue-2633-2.rs +++ b/src/test/run-pass/issue-2633-2.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] diff --git a/src/test/run-pass/issue-2708.rs b/src/test/run-pass/issue-2708.rs index d3916db3f75..cf565b9f901 100644 --- a/src/test/run-pass/issue-2708.rs +++ b/src/test/run-pass/issue-2708.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct Font { diff --git a/src/test/run-pass/issue-2734.rs b/src/test/run-pass/issue-2734.rs index 18cd9a87e6b..916e3dd689f 100644 --- a/src/test/run-pass/issue-2734.rs +++ b/src/test/run-pass/issue-2734.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] trait hax { diff --git a/src/test/run-pass/issue-2735.rs b/src/test/run-pass/issue-2735.rs index cd6c6a59e2a..af8eef557f8 100644 --- a/src/test/run-pass/issue-2735.rs +++ b/src/test/run-pass/issue-2735.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] trait hax { diff --git a/src/test/run-pass/issue-2935.rs b/src/test/run-pass/issue-2935.rs index 511344a792f..b2ea183e9f8 100644 --- a/src/test/run-pass/issue-2935.rs +++ b/src/test/run-pass/issue-2935.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] //type t = { a: isize }; diff --git a/src/test/run-pass/issue-3121.rs b/src/test/run-pass/issue-3121.rs index 6e9ee7fb15c..a0bdcf18ec5 100644 --- a/src/test/run-pass/issue-3121.rs +++ b/src/test/run-pass/issue-3121.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Copy, Clone)] diff --git a/src/test/run-pass/issue-3290.rs b/src/test/run-pass/issue-3290.rs index b09820146f5..6c775e15fb5 100644 --- a/src/test/run-pass/issue-3290.rs +++ b/src/test/run-pass/issue-3290.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/issue-3447.rs b/src/test/run-pass/issue-3447.rs index 12c2155dd57..1558d94bae7 100644 --- a/src/test/run-pass/issue-3447.rs +++ b/src/test/run-pass/issue-3447.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::cell::RefCell; diff --git a/src/test/run-pass/issue-3794.rs b/src/test/run-pass/issue-3794.rs index 3d5f38e38cc..badb833ee80 100644 --- a/src/test/run-pass/issue-3794.rs +++ b/src/test/run-pass/issue-3794.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] trait T { diff --git a/src/test/run-pass/issue-3878.rs b/src/test/run-pass/issue-3878.rs index 5d094af2149..e0e11b4fd86 100644 --- a/src/test/run-pass/issue-3878.rs +++ b/src/test/run-pass/issue-3878.rs @@ -11,7 +11,6 @@ // pretty-expanded FIXME #23616 #![allow(path_statements)] -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/issue-4759.rs b/src/test/run-pass/issue-4759.rs index a26d6b05d7e..7788a8f3ec2 100644 --- a/src/test/run-pass/issue-4759.rs +++ b/src/test/run-pass/issue-4759.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct T { a: Box } diff --git a/src/test/run-pass/issue-5192.rs b/src/test/run-pass/issue-5192.rs index d8f7f25508d..0758ace42da 100644 --- a/src/test/run-pass/issue-5192.rs +++ b/src/test/run-pass/issue-5192.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub trait EventLoop { diff --git a/src/test/run-pass/issue-5666.rs b/src/test/run-pass/issue-5666.rs index e28a929d527..eba83227f44 100644 --- a/src/test/run-pass/issue-5666.rs +++ b/src/test/run-pass/issue-5666.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] struct Dog { diff --git a/src/test/run-pass/issue-5718.rs b/src/test/run-pass/issue-5718.rs index 964809631d9..0bc9a07cb00 100644 --- a/src/test/run-pass/issue-5718.rs +++ b/src/test/run-pass/issue-5718.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct Element; diff --git a/src/test/run-pass/issue-5884.rs b/src/test/run-pass/issue-5884.rs index 2096bebd2b2..c3247876c7a 100644 --- a/src/test/run-pass/issue-5884.rs +++ b/src/test/run-pass/issue-5884.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub struct Foo { diff --git a/src/test/run-pass/issue-6318.rs b/src/test/run-pass/issue-6318.rs index 12b71f519b1..69c7ec4cf1f 100644 --- a/src/test/run-pass/issue-6318.rs +++ b/src/test/run-pass/issue-6318.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub enum Thing { diff --git a/src/test/run-pass/issue-6557.rs b/src/test/run-pass/issue-6557.rs index eba87f418e4..109383b343b 100644 --- a/src/test/run-pass/issue-6557.rs +++ b/src/test/run-pass/issue-6557.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/issue-7673-cast-generically-implemented-trait.rs b/src/test/run-pass/issue-7673-cast-generically-implemented-trait.rs index 43b5a997c19..f5acebf3a66 100644 --- a/src/test/run-pass/issue-7673-cast-generically-implemented-trait.rs +++ b/src/test/run-pass/issue-7673-cast-generically-implemented-trait.rs @@ -16,7 +16,6 @@ */ -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() {} diff --git a/src/test/run-pass/issue-9129.rs b/src/test/run-pass/issue-9129.rs index a9f29fdb38c..485f10357b3 100644 --- a/src/test/run-pass/issue-9129.rs +++ b/src/test/run-pass/issue-9129.rs @@ -10,7 +10,6 @@ // ignore-pretty unreported -#![allow(unknown_features)] #![feature(box_syntax)] pub trait bomb { fn boom(&self, _: Ident); } diff --git a/src/test/run-pass/issue-9382.rs b/src/test/run-pass/issue-9382.rs index fb7ffdcd515..7538e55fd95 100644 --- a/src/test/run-pass/issue-9382.rs +++ b/src/test/run-pass/issue-9382.rs @@ -11,7 +11,6 @@ // except according to those terms. #![allow(unnecessary_allocation)] -#![allow(unknown_features)] #![feature(box_syntax)] // Tests for a previous bug that occurred due to an interaction diff --git a/src/test/run-pass/kindck-owned-trait-contains-1.rs b/src/test/run-pass/kindck-owned-trait-contains-1.rs index 9df72f4760a..9b56666fd46 100644 --- a/src/test/run-pass/kindck-owned-trait-contains-1.rs +++ b/src/test/run-pass/kindck-owned-trait-contains-1.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] trait repeat { fn get(&self) -> A; } diff --git a/src/test/run-pass/last-use-is-capture.rs b/src/test/run-pass/last-use-is-capture.rs index 35a17150787..cb2a2061406 100644 --- a/src/test/run-pass/last-use-is-capture.rs +++ b/src/test/run-pass/last-use-is-capture.rs @@ -10,7 +10,6 @@ // Make sure #1399 stays fixed -#![allow(unknown_features)] #![feature(box_syntax)] struct A { a: Box } diff --git a/src/test/run-pass/leak-unique-as-tydesc.rs b/src/test/run-pass/leak-unique-as-tydesc.rs index 30838b3121a..d89888927e1 100644 --- a/src/test/run-pass/leak-unique-as-tydesc.rs +++ b/src/test/run-pass/leak-unique-as-tydesc.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn leaky(_t: T) { } diff --git a/src/test/run-pass/let-assignability.rs b/src/test/run-pass/let-assignability.rs index c53bc83ef6b..69b0eab99f7 100644 --- a/src/test/run-pass/let-assignability.rs +++ b/src/test/run-pass/let-assignability.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn f() { diff --git a/src/test/run-pass/list.rs b/src/test/run-pass/list.rs index 8f0cbf96b60..37612415555 100644 --- a/src/test/run-pass/list.rs +++ b/src/test/run-pass/list.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] enum list { cons(isize, Box), nil, } diff --git a/src/test/run-pass/macro-stability.rs b/src/test/run-pass/macro-stability.rs index b23947cc2b5..9afcd51aa85 100644 --- a/src/test/run-pass/macro-stability.rs +++ b/src/test/run-pass/macro-stability.rs @@ -10,9 +10,6 @@ // aux-build:unstable-macros.rs -// FIXME(varkor): `unstable_macros` isn't visible. -#![allow(unknown_features)] - #![feature(unstable_macros)] #[macro_use] extern crate unstable_macros; diff --git a/src/test/run-pass/match-implicit-copy-unique.rs b/src/test/run-pass/match-implicit-copy-unique.rs index caf76b3ab2f..10de6eeabdd 100644 --- a/src/test/run-pass/match-implicit-copy-unique.rs +++ b/src/test/run-pass/match-implicit-copy-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Pair { a: Box, b: Box } diff --git a/src/test/run-pass/match-unique-bind.rs b/src/test/run-pass/match-unique-bind.rs index 78b02d709e2..ca864c05cfd 100644 --- a/src/test/run-pass/match-unique-bind.rs +++ b/src/test/run-pass/match-unique-bind.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/match-value-binding-in-guard-3291.rs b/src/test/run-pass/match-value-binding-in-guard-3291.rs index d4f4f3bb27e..ab56a8cfc93 100644 --- a/src/test/run-pass/match-value-binding-in-guard-3291.rs +++ b/src/test/run-pass/match-value-binding-in-guard-3291.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn foo(x: Option>, b: bool) -> isize { diff --git a/src/test/run-pass/method-self-arg-aux1.rs b/src/test/run-pass/method-self-arg-aux1.rs index e7615711b4c..2572baf68fd 100644 --- a/src/test/run-pass/method-self-arg-aux1.rs +++ b/src/test/run-pass/method-self-arg-aux1.rs @@ -10,8 +10,6 @@ // Test method calls with self as an argument (cross-crate) - -#![allow(unknown_features)] #![feature(box_syntax)] // aux-build:method_self_arg1.rs diff --git a/src/test/run-pass/method-self-arg-aux2.rs b/src/test/run-pass/method-self-arg-aux2.rs index 0a1efc96fcf..51de69ff01f 100644 --- a/src/test/run-pass/method-self-arg-aux2.rs +++ b/src/test/run-pass/method-self-arg-aux2.rs @@ -10,8 +10,6 @@ // Test method calls with self as an argument (cross-crate) - -#![allow(unknown_features)] #![feature(box_syntax)] // aux-build:method_self_arg2.rs diff --git a/src/test/run-pass/method-self-arg-trait.rs b/src/test/run-pass/method-self-arg-trait.rs index d93cf2b0983..34e849bd0d2 100644 --- a/src/test/run-pass/method-self-arg-trait.rs +++ b/src/test/run-pass/method-self-arg-trait.rs @@ -10,8 +10,6 @@ // Test method calls with self as an argument - -#![allow(unknown_features)] #![feature(box_syntax)] static mut COUNT: u64 = 1; diff --git a/src/test/run-pass/method-self-arg.rs b/src/test/run-pass/method-self-arg.rs index 4361c9b0563..b7fb2fa138d 100644 --- a/src/test/run-pass/method-self-arg.rs +++ b/src/test/run-pass/method-self-arg.rs @@ -10,8 +10,6 @@ // Test method calls with self as an argument - -#![allow(unknown_features)] #![feature(box_syntax)] static mut COUNT: usize = 1; diff --git a/src/test/run-pass/method-two-trait-defer-resolution-2.rs b/src/test/run-pass/method-two-trait-defer-resolution-2.rs index 82d747b6c27..f403f526039 100644 --- a/src/test/run-pass/method-two-trait-defer-resolution-2.rs +++ b/src/test/run-pass/method-two-trait-defer-resolution-2.rs @@ -19,8 +19,6 @@ // codegen the call as `Foo::foo(&x)` and let the specific impl get // chosen later. - -#![allow(unknown_features)] #![feature(box_syntax)] trait Foo { diff --git a/src/test/run-pass/move-1-unique.rs b/src/test/run-pass/move-1-unique.rs index 34a3bdf8765..5c8dd41c646 100644 --- a/src/test/run-pass/move-1-unique.rs +++ b/src/test/run-pass/move-1-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Clone)] diff --git a/src/test/run-pass/move-2-unique.rs b/src/test/run-pass/move-2-unique.rs index 2babf19e164..0b67e54e234 100644 --- a/src/test/run-pass/move-2-unique.rs +++ b/src/test/run-pass/move-2-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct X { x: isize, y: isize, z: isize } diff --git a/src/test/run-pass/move-2.rs b/src/test/run-pass/move-2.rs index 926e28ed155..0fbc2de91e6 100644 --- a/src/test/run-pass/move-2.rs +++ b/src/test/run-pass/move-2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct X { x: isize, y: isize, z: isize } diff --git a/src/test/run-pass/move-3-unique.rs b/src/test/run-pass/move-3-unique.rs index 360593ffe48..36ad3a40b3f 100644 --- a/src/test/run-pass/move-3-unique.rs +++ b/src/test/run-pass/move-3-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Clone)] diff --git a/src/test/run-pass/move-4-unique.rs b/src/test/run-pass/move-4-unique.rs index 153da8e1339..266e34c98a4 100644 --- a/src/test/run-pass/move-4-unique.rs +++ b/src/test/run-pass/move-4-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Triple {a: isize, b: isize, c: isize} diff --git a/src/test/run-pass/move-4.rs b/src/test/run-pass/move-4.rs index 1346860d51d..481068869e3 100644 --- a/src/test/run-pass/move-4.rs +++ b/src/test/run-pass/move-4.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Triple { a: isize, b: isize, c: isize } diff --git a/src/test/run-pass/move-arg-2-unique.rs b/src/test/run-pass/move-arg-2-unique.rs index 0ff5a66adc2..b6e225cc8b7 100644 --- a/src/test/run-pass/move-arg-2-unique.rs +++ b/src/test/run-pass/move-arg-2-unique.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn test(foo: Box> ) { assert_eq!((*foo)[0], 10); } diff --git a/src/test/run-pass/move-arg-2.rs b/src/test/run-pass/move-arg-2.rs index 8de487bc363..78774854c9f 100644 --- a/src/test/run-pass/move-arg-2.rs +++ b/src/test/run-pass/move-arg-2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn test(foo: Box>) { assert_eq!((*foo)[0], 10); } diff --git a/src/test/run-pass/mut-function-arguments.rs b/src/test/run-pass/mut-function-arguments.rs index 010f656d531..bf4d4ea921a 100644 --- a/src/test/run-pass/mut-function-arguments.rs +++ b/src/test/run-pass/mut-function-arguments.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn f(mut y: Box) { diff --git a/src/test/run-pass/new-box.rs b/src/test/run-pass/new-box.rs index 17f71c3de43..d6881ea90af 100644 --- a/src/test/run-pass/new-box.rs +++ b/src/test/run-pass/new-box.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn f(x: Box) { diff --git a/src/test/run-pass/nullable-pointer-iotareduction.rs b/src/test/run-pass/nullable-pointer-iotareduction.rs index 7e8d082a286..d33102a38f9 100644 --- a/src/test/run-pass/nullable-pointer-iotareduction.rs +++ b/src/test/run-pass/nullable-pointer-iotareduction.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] // Iota-reduction is a rule in the Calculus of (Co-)Inductive Constructions, diff --git a/src/test/run-pass/object-one-type-two-traits.rs b/src/test/run-pass/object-one-type-two-traits.rs index aa2dbf03bb2..284beccdb29 100644 --- a/src/test/run-pass/object-one-type-two-traits.rs +++ b/src/test/run-pass/object-one-type-two-traits.rs @@ -11,7 +11,6 @@ // Testing creating two vtables with the same self type, but different // traits. -#![allow(unknown_features)] #![feature(box_syntax)] use std::any::Any; diff --git a/src/test/run-pass/objects-owned-object-borrowed-method-headerless.rs b/src/test/run-pass/objects-owned-object-borrowed-method-headerless.rs index 768f126e4ed..c27bc62ada8 100644 --- a/src/test/run-pass/objects-owned-object-borrowed-method-headerless.rs +++ b/src/test/run-pass/objects-owned-object-borrowed-method-headerless.rs @@ -12,8 +12,6 @@ // closed over do not contain managed values, and thus the boxes do // not have headers. - -#![allow(unknown_features)] #![feature(box_syntax)] diff --git a/src/test/run-pass/objects-owned-object-owned-method.rs b/src/test/run-pass/objects-owned-object-owned-method.rs index 71ed995e76c..5d9658dc15d 100644 --- a/src/test/run-pass/objects-owned-object-owned-method.rs +++ b/src/test/run-pass/objects-owned-object-owned-method.rs @@ -12,8 +12,6 @@ // closed over contain managed values. This implies that the boxes // will have headers that must be skipped over. - -#![allow(unknown_features)] #![feature(box_syntax)] trait FooTrait { diff --git a/src/test/run-pass/output-slot-variants.rs b/src/test/run-pass/output-slot-variants.rs index 4c3017c066e..2171b8c481d 100644 --- a/src/test/run-pass/output-slot-variants.rs +++ b/src/test/run-pass/output-slot-variants.rs @@ -12,7 +12,6 @@ #![allow(dead_assignment)] #![allow(unused_variables)] -#![allow(unknown_features)] #![feature(box_syntax)] struct A { a: isize, b: isize } diff --git a/src/test/run-pass/overloaded-autoderef.rs b/src/test/run-pass/overloaded-autoderef.rs index d9ffbe51aa5..759e2aace61 100644 --- a/src/test/run-pass/overloaded-autoderef.rs +++ b/src/test/run-pass/overloaded-autoderef.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax, core)] use std::cell::RefCell; diff --git a/src/test/run-pass/overloaded-index-autoderef.rs b/src/test/run-pass/overloaded-index-autoderef.rs index efa00514934..9988599d59d 100644 --- a/src/test/run-pass/overloaded-index-autoderef.rs +++ b/src/test/run-pass/overloaded-index-autoderef.rs @@ -10,8 +10,6 @@ // Test overloaded indexing combined with autoderef. - -#![allow(unknown_features)] #![feature(box_syntax, core)] use std::ops::{Index, IndexMut}; diff --git a/src/test/run-pass/pure-sum.rs b/src/test/run-pass/pure-sum.rs index c27b95e1f13..3313196a5ec 100644 --- a/src/test/run-pass/pure-sum.rs +++ b/src/test/run-pass/pure-sum.rs @@ -12,7 +12,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn sums_to(v: Vec , sum: isize) -> bool { diff --git a/src/test/run-pass/rcvr-borrowed-to-region.rs b/src/test/run-pass/rcvr-borrowed-to-region.rs index 6e9769ea2b9..bc869113fe9 100644 --- a/src/test/run-pass/rcvr-borrowed-to-region.rs +++ b/src/test/run-pass/rcvr-borrowed-to-region.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] trait get { diff --git a/src/test/run-pass/regions-borrow-at.rs b/src/test/run-pass/regions-borrow-at.rs index 83a82041af9..abebb670e65 100644 --- a/src/test/run-pass/regions-borrow-at.rs +++ b/src/test/run-pass/regions-borrow-at.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn foo(x: &usize) -> usize { diff --git a/src/test/run-pass/regions-borrow-uniq.rs b/src/test/run-pass/regions-borrow-uniq.rs index 2a08940dab6..48b09b33851 100644 --- a/src/test/run-pass/regions-borrow-uniq.rs +++ b/src/test/run-pass/regions-borrow-uniq.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn foo(x: &usize) -> usize { diff --git a/src/test/run-pass/regions-close-over-type-parameter-successfully.rs b/src/test/run-pass/regions-close-over-type-parameter-successfully.rs index d048633519a..4a24e201b35 100644 --- a/src/test/run-pass/regions-close-over-type-parameter-successfully.rs +++ b/src/test/run-pass/regions-close-over-type-parameter-successfully.rs @@ -11,8 +11,6 @@ // A test where we (successfully) close over a reference into // an object. - -#![allow(unknown_features)] #![feature(box_syntax)] trait SomeTrait { fn get(&self) -> isize; } diff --git a/src/test/run-pass/regions-dependent-addr-of.rs b/src/test/run-pass/regions-dependent-addr-of.rs index e9a3e16438f..c8b39bbe749 100644 --- a/src/test/run-pass/regions-dependent-addr-of.rs +++ b/src/test/run-pass/regions-dependent-addr-of.rs @@ -11,8 +11,6 @@ // Test lifetimes are linked properly when we create dependent region pointers. // Issue #3148. - -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/regions-early-bound-trait-param.rs b/src/test/run-pass/regions-early-bound-trait-param.rs index 86fcfb9e6dd..75c209a0920 100644 --- a/src/test/run-pass/regions-early-bound-trait-param.rs +++ b/src/test/run-pass/regions-early-bound-trait-param.rs @@ -11,8 +11,6 @@ // Tests that you can use an early-bound lifetime parameter as // on of the generic parameters in a trait. - -#![allow(unknown_features)] #![feature(box_syntax)] trait Trait<'a> { diff --git a/src/test/run-pass/regions-escape-into-other-fn.rs b/src/test/run-pass/regions-escape-into-other-fn.rs index 597333482fd..7cb719cccce 100644 --- a/src/test/run-pass/regions-escape-into-other-fn.rs +++ b/src/test/run-pass/regions-escape-into-other-fn.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn foo(x: &usize) -> &usize { x } diff --git a/src/test/run-pass/regions-fn-subtyping.rs b/src/test/run-pass/regions-fn-subtyping.rs index c7a4accff85..f762b4f41ed 100644 --- a/src/test/run-pass/regions-fn-subtyping.rs +++ b/src/test/run-pass/regions-fn-subtyping.rs @@ -14,7 +14,6 @@ #![allow(dead_assignment)] #![allow(unused_variables)] -#![allow(unknown_features)] // Should pass region checking. fn ok(f: Box) { diff --git a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs index a89f6f4a7b5..a40ba8382fc 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn borrow(x: &T) -> &T {x} diff --git a/src/test/run-pass/regions-infer-borrow-scope.rs b/src/test/run-pass/regions-infer-borrow-scope.rs index 01f41637311..72208272df7 100644 --- a/src/test/run-pass/regions-infer-borrow-scope.rs +++ b/src/test/run-pass/regions-infer-borrow-scope.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Point {x: isize, y: isize} diff --git a/src/test/run-pass/regions-lifetime-nonfree-late-bound.rs b/src/test/run-pass/regions-lifetime-nonfree-late-bound.rs index a2c07d27288..2a20cd2b773 100644 --- a/src/test/run-pass/regions-lifetime-nonfree-late-bound.rs +++ b/src/test/run-pass/regions-lifetime-nonfree-late-bound.rs @@ -24,7 +24,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/regions-relate-bound-regions-on-closures-to-inference-variables.rs b/src/test/run-pass/regions-relate-bound-regions-on-closures-to-inference-variables.rs index 3162ef54f39..3322fc36fd3 100644 --- a/src/test/run-pass/regions-relate-bound-regions-on-closures-to-inference-variables.rs +++ b/src/test/run-pass/regions-relate-bound-regions-on-closures-to-inference-variables.rs @@ -17,8 +17,6 @@ // changes were caught. However, those uses in the compiler could // easily get changed or refactored away in the future. - -#![allow(unknown_features)] #![feature(box_syntax)] struct Ctxt<'tcx> { diff --git a/src/test/run-pass/self-impl.rs b/src/test/run-pass/self-impl.rs index 688b66a0a87..fcd233c361b 100644 --- a/src/test/run-pass/self-impl.rs +++ b/src/test/run-pass/self-impl.rs @@ -12,7 +12,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] struct Foo; diff --git a/src/test/run-pass/self-in-mut-slot-default-method.rs b/src/test/run-pass/self-in-mut-slot-default-method.rs index 877988e60a9..905a23f22a6 100644 --- a/src/test/run-pass/self-in-mut-slot-default-method.rs +++ b/src/test/run-pass/self-in-mut-slot-default-method.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct X { diff --git a/src/test/run-pass/self-re-assign.rs b/src/test/run-pass/self-re-assign.rs index a523340784c..05295aa3309 100644 --- a/src/test/run-pass/self-re-assign.rs +++ b/src/test/run-pass/self-re-assign.rs @@ -11,8 +11,6 @@ // Ensure assigning an owned or managed variable to itself works. In particular, // that we do not glue_drop before we glue_take (#3290). - -#![allow(unknown_features)] #![feature(box_syntax)] use std::rc::Rc; diff --git a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs index fb5877b8a48..ecd0bfb1440 100644 --- a/src/test/run-pass/sendfn-spawn-with-fn-arg.rs +++ b/src/test/run-pass/sendfn-spawn-with-fn-arg.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/task-spawn-move-and-copy.rs b/src/test/run-pass/task-spawn-move-and-copy.rs index cd6cb5a4b52..94b69a1c3e4 100644 --- a/src/test/run-pass/task-spawn-move-and-copy.rs +++ b/src/test/run-pass/task-spawn-move-and-copy.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/trait-bounds-in-arc.rs b/src/test/run-pass/trait-bounds-in-arc.rs index 9623da3309a..7b57d66ef21 100644 --- a/src/test/run-pass/trait-bounds-in-arc.rs +++ b/src/test/run-pass/trait-bounds-in-arc.rs @@ -12,7 +12,7 @@ // and shared between threads as long as all types fulfill Send. // ignore-emscripten no threads support -#![allow(unknown_features)] + #![feature(box_syntax)] use std::sync::Arc; diff --git a/src/test/run-pass/trait-object-generics.rs b/src/test/run-pass/trait-object-generics.rs index 61d32bd6ffc..4b14ac2f76f 100644 --- a/src/test/run-pass/trait-object-generics.rs +++ b/src/test/run-pass/trait-object-generics.rs @@ -10,8 +10,6 @@ // test for #8664 - -#![allow(unknown_features)] #![feature(box_syntax)] use std::marker; diff --git a/src/test/run-pass/traits-conditional-dispatch.rs b/src/test/run-pass/traits-conditional-dispatch.rs index 8d2faaf418b..53457d85e01 100644 --- a/src/test/run-pass/traits-conditional-dispatch.rs +++ b/src/test/run-pass/traits-conditional-dispatch.rs @@ -12,8 +12,6 @@ // blanket impl for T:Copy coexists with an impl for Box, because // Box does not impl Copy. - -#![allow(unknown_features)] #![feature(box_syntax)] trait Get { diff --git a/src/test/run-pass/type-param-constraints.rs b/src/test/run-pass/type-param-constraints.rs index 381f1b68257..1a3bdcca7a1 100644 --- a/src/test/run-pass/type-param-constraints.rs +++ b/src/test/run-pass/type-param-constraints.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] fn p_foo(_pinned: T) { } diff --git a/src/test/run-pass/typeclasses-eq-example-static.rs b/src/test/run-pass/typeclasses-eq-example-static.rs index 0ea7a1be432..d386f27d8c2 100644 --- a/src/test/run-pass/typeclasses-eq-example-static.rs +++ b/src/test/run-pass/typeclasses-eq-example-static.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] // Example from lkuper's intern talk, August 2012 -- now with static diff --git a/src/test/run-pass/typeclasses-eq-example.rs b/src/test/run-pass/typeclasses-eq-example.rs index 69d22cf34f1..8e8fd9bf648 100644 --- a/src/test/run-pass/typeclasses-eq-example.rs +++ b/src/test/run-pass/typeclasses-eq-example.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] // Example from lkuper's intern talk, August 2012. diff --git a/src/test/run-pass/ufcs-explicit-self.rs b/src/test/run-pass/ufcs-explicit-self.rs index bd09a311b70..b3cbd2c4eb3 100644 --- a/src/test/run-pass/ufcs-explicit-self.rs +++ b/src/test/run-pass/ufcs-explicit-self.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] #[derive(Copy, Clone)] diff --git a/src/test/run-pass/unboxed-closures-boxed.rs b/src/test/run-pass/unboxed-closures-boxed.rs index 069f26841d2..72d5a1dc043 100644 --- a/src/test/run-pass/unboxed-closures-boxed.rs +++ b/src/test/run-pass/unboxed-closures-boxed.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] use std::ops::FnMut; diff --git a/src/test/run-pass/unboxed-closures-call-sugar-object-autoderef.rs b/src/test/run-pass/unboxed-closures-call-sugar-object-autoderef.rs index 789d2237c54..f4453f1bb8a 100644 --- a/src/test/run-pass/unboxed-closures-call-sugar-object-autoderef.rs +++ b/src/test/run-pass/unboxed-closures-call-sugar-object-autoderef.rs @@ -10,8 +10,6 @@ // Test that the call operator autoderefs when calling to an object type. -#![allow(unknown_features)] - use std::ops::FnMut; fn make_adder(x: isize) -> Boxisize + 'static> { diff --git a/src/test/run-pass/unboxed-closures-call-sugar-object.rs b/src/test/run-pass/unboxed-closures-call-sugar-object.rs index e7307715471..2fdb9e9b346 100644 --- a/src/test/run-pass/unboxed-closures-call-sugar-object.rs +++ b/src/test/run-pass/unboxed-closures-call-sugar-object.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] - use std::ops::FnMut; fn make_adder(x: isize) -> Boxisize + 'static> { diff --git a/src/test/run-pass/uniq-self-in-mut-slot.rs b/src/test/run-pass/uniq-self-in-mut-slot.rs index 7910380abee..a4f953ceaf5 100644 --- a/src/test/run-pass/uniq-self-in-mut-slot.rs +++ b/src/test/run-pass/uniq-self-in-mut-slot.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct X { diff --git a/src/test/run-pass/unique-assign-copy.rs b/src/test/run-pass/unique-assign-copy.rs index 3323b3c046b..1e36f5287a7 100644 --- a/src/test/run-pass/unique-assign-copy.rs +++ b/src/test/run-pass/unique-assign-copy.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-assign-drop.rs b/src/test/run-pass/unique-assign-drop.rs index 37aa1f0a64b..1227c14ec02 100644 --- a/src/test/run-pass/unique-assign-drop.rs +++ b/src/test/run-pass/unique-assign-drop.rs @@ -10,7 +10,6 @@ #![allow(dead_assignment)] -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-assign-generic.rs b/src/test/run-pass/unique-assign-generic.rs index 249b734a691..1abc8203305 100644 --- a/src/test/run-pass/unique-assign-generic.rs +++ b/src/test/run-pass/unique-assign-generic.rs @@ -8,11 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] - fn f(t: T) -> T { let t1 = t; t1 diff --git a/src/test/run-pass/unique-assign.rs b/src/test/run-pass/unique-assign.rs index 8e97fdd4a6a..66b78d27c59 100644 --- a/src/test/run-pass/unique-assign.rs +++ b/src/test/run-pass/unique-assign.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-autoderef-field.rs b/src/test/run-pass/unique-autoderef-field.rs index a711dbb685f..4ad465abc48 100644 --- a/src/test/run-pass/unique-autoderef-field.rs +++ b/src/test/run-pass/unique-autoderef-field.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct J { j: isize } diff --git a/src/test/run-pass/unique-autoderef-index.rs b/src/test/run-pass/unique-autoderef-index.rs index 1ef61008b3c..b0abcfab78e 100644 --- a/src/test/run-pass/unique-autoderef-index.rs +++ b/src/test/run-pass/unique-autoderef-index.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-cmp.rs b/src/test/run-pass/unique-cmp.rs index 1bd44ecb721..e949215396c 100644 --- a/src/test/run-pass/unique-cmp.rs +++ b/src/test/run-pass/unique-cmp.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-containing-tag.rs b/src/test/run-pass/unique-containing-tag.rs index ce5a2bed48d..94f523eb396 100644 --- a/src/test/run-pass/unique-containing-tag.rs +++ b/src/test/run-pass/unique-containing-tag.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-create.rs b/src/test/run-pass/unique-create.rs index 6d638bbf562..5ebabf0c29a 100644 --- a/src/test/run-pass/unique-create.rs +++ b/src/test/run-pass/unique-create.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-decl-init-copy.rs b/src/test/run-pass/unique-decl-init-copy.rs index 9d749803ffb..71197b9d02f 100644 --- a/src/test/run-pass/unique-decl-init-copy.rs +++ b/src/test/run-pass/unique-decl-init-copy.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-decl-init.rs b/src/test/run-pass/unique-decl-init.rs index a00de08998f..2501caddb46 100644 --- a/src/test/run-pass/unique-decl-init.rs +++ b/src/test/run-pass/unique-decl-init.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-decl-move.rs b/src/test/run-pass/unique-decl-move.rs index f4ff44ffff5..fc6421e2e08 100644 --- a/src/test/run-pass/unique-decl-move.rs +++ b/src/test/run-pass/unique-decl-move.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-deref.rs b/src/test/run-pass/unique-deref.rs index 70b2617797d..8c008683ef3 100644 --- a/src/test/run-pass/unique-deref.rs +++ b/src/test/run-pass/unique-deref.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-destructure.rs b/src/test/run-pass/unique-destructure.rs index b368cbee2f6..70b4af1886f 100644 --- a/src/test/run-pass/unique-destructure.rs +++ b/src/test/run-pass/unique-destructure.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/unique-drop-complex.rs b/src/test/run-pass/unique-drop-complex.rs index 1910d51bd0b..bcfb65769da 100644 --- a/src/test/run-pass/unique-drop-complex.rs +++ b/src/test/run-pass/unique-drop-complex.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-fn-arg-move.rs b/src/test/run-pass/unique-fn-arg-move.rs index d101cbd3129..45cc530659f 100644 --- a/src/test/run-pass/unique-fn-arg-move.rs +++ b/src/test/run-pass/unique-fn-arg-move.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn f(i: Box) { diff --git a/src/test/run-pass/unique-fn-arg-mut.rs b/src/test/run-pass/unique-fn-arg-mut.rs index ebe89b275d4..77c4fa29558 100644 --- a/src/test/run-pass/unique-fn-arg-mut.rs +++ b/src/test/run-pass/unique-fn-arg-mut.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn f(i: &mut Box) { diff --git a/src/test/run-pass/unique-fn-arg.rs b/src/test/run-pass/unique-fn-arg.rs index 97006d2a01a..20a0008ef56 100644 --- a/src/test/run-pass/unique-fn-arg.rs +++ b/src/test/run-pass/unique-fn-arg.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn f(i: Box) { diff --git a/src/test/run-pass/unique-fn-ret.rs b/src/test/run-pass/unique-fn-ret.rs index d3be0cf01f1..7d88176828e 100644 --- a/src/test/run-pass/unique-fn-ret.rs +++ b/src/test/run-pass/unique-fn-ret.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] fn f() -> Box { diff --git a/src/test/run-pass/unique-in-tag.rs b/src/test/run-pass/unique-in-tag.rs index 0762b37ff8b..517cdd02535 100644 --- a/src/test/run-pass/unique-in-tag.rs +++ b/src/test/run-pass/unique-in-tag.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] fn test1() { diff --git a/src/test/run-pass/unique-in-vec-copy.rs b/src/test/run-pass/unique-in-vec-copy.rs index ece206caa02..a460aa6ec10 100644 --- a/src/test/run-pass/unique-in-vec-copy.rs +++ b/src/test/run-pass/unique-in-vec-copy.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-in-vec.rs b/src/test/run-pass/unique-in-vec.rs index bd965d41eea..a7edc9cc710 100644 --- a/src/test/run-pass/unique-in-vec.rs +++ b/src/test/run-pass/unique-in-vec.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-init.rs b/src/test/run-pass/unique-init.rs index bd7a6495260..768614b1e3c 100644 --- a/src/test/run-pass/unique-init.rs +++ b/src/test/run-pass/unique-init.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-kinds.rs b/src/test/run-pass/unique-kinds.rs index f45b3285da7..80364114bce 100644 --- a/src/test/run-pass/unique-kinds.rs +++ b/src/test/run-pass/unique-kinds.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] use std::cmp::PartialEq; diff --git a/src/test/run-pass/unique-log.rs b/src/test/run-pass/unique-log.rs index 148ca4757ae..0c17acb3d89 100644 --- a/src/test/run-pass/unique-log.rs +++ b/src/test/run-pass/unique-log.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-move-drop.rs b/src/test/run-pass/unique-move-drop.rs index c2813771b7c..ba865abc371 100644 --- a/src/test/run-pass/unique-move-drop.rs +++ b/src/test/run-pass/unique-move-drop.rs @@ -10,7 +10,6 @@ #![allow(unused_variables)] -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-move-temp.rs b/src/test/run-pass/unique-move-temp.rs index 4b937625201..8c1178b9a7e 100644 --- a/src/test/run-pass/unique-move-temp.rs +++ b/src/test/run-pass/unique-move-temp.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-move.rs b/src/test/run-pass/unique-move.rs index bed1d6e171a..e731ca818fe 100644 --- a/src/test/run-pass/unique-move.rs +++ b/src/test/run-pass/unique-move.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-mutable.rs b/src/test/run-pass/unique-mutable.rs index 8beec6a4198..48006010300 100644 --- a/src/test/run-pass/unique-mutable.rs +++ b/src/test/run-pass/unique-mutable.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unique-object-move.rs b/src/test/run-pass/unique-object-move.rs index 4d120e7caf3..d93df4e96f9 100644 --- a/src/test/run-pass/unique-object-move.rs +++ b/src/test/run-pass/unique-object-move.rs @@ -12,7 +12,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub trait EventLoop { fn foo(&self) {} } diff --git a/src/test/run-pass/unique-pat-2.rs b/src/test/run-pass/unique-pat-2.rs index c314b70e536..12e81a202e9 100644 --- a/src/test/run-pass/unique-pat-2.rs +++ b/src/test/run-pass/unique-pat-2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/unique-pat-3.rs b/src/test/run-pass/unique-pat-3.rs index 648e9599a97..9f361d460e0 100644 --- a/src/test/run-pass/unique-pat-3.rs +++ b/src/test/run-pass/unique-pat-3.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] enum bar { u(Box), w(isize), } diff --git a/src/test/run-pass/unique-pat.rs b/src/test/run-pass/unique-pat.rs index 1312ea924b5..8af160b1f56 100644 --- a/src/test/run-pass/unique-pat.rs +++ b/src/test/run-pass/unique-pat.rs @@ -9,7 +9,6 @@ // except according to those terms. -#![allow(unknown_features)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/test/run-pass/unique-rec.rs b/src/test/run-pass/unique-rec.rs index 72975c27eea..aa3fc8f5bb5 100644 --- a/src/test/run-pass/unique-rec.rs +++ b/src/test/run-pass/unique-rec.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] struct X { x: isize } diff --git a/src/test/run-pass/unique-send-2.rs b/src/test/run-pass/unique-send-2.rs index 2e864797db0..7a0e585e8b0 100644 --- a/src/test/run-pass/unique-send-2.rs +++ b/src/test/run-pass/unique-send-2.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::sync::mpsc::{channel, Sender}; diff --git a/src/test/run-pass/unique-send.rs b/src/test/run-pass/unique-send.rs index bc0f790b2b0..7644da08e4a 100644 --- a/src/test/run-pass/unique-send.rs +++ b/src/test/run-pass/unique-send.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] use std::sync::mpsc::channel; diff --git a/src/test/run-pass/unique-swap.rs b/src/test/run-pass/unique-swap.rs index cfa076f1a07..6e6fe4e420b 100644 --- a/src/test/run-pass/unique-swap.rs +++ b/src/test/run-pass/unique-swap.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] use std::mem::swap; diff --git a/src/test/run-pass/unsized2.rs b/src/test/run-pass/unsized2.rs index 50d8d3d27f2..90b99f98533 100644 --- a/src/test/run-pass/unsized2.rs +++ b/src/test/run-pass/unsized2.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(unknown_features)] #![feature(box_syntax)] // Test sized-ness checking in substitution. diff --git a/src/test/run-pass/unused-move-capture.rs b/src/test/run-pass/unused-move-capture.rs index b155620e519..e5a77d1cdbd 100644 --- a/src/test/run-pass/unused-move-capture.rs +++ b/src/test/run-pass/unused-move-capture.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/unused-move.rs b/src/test/run-pass/unused-move.rs index e4b9d14fb4b..9a0ea181d99 100644 --- a/src/test/run-pass/unused-move.rs +++ b/src/test/run-pass/unused-move.rs @@ -15,7 +15,6 @@ // pretty-expanded FIXME #23616 #![allow(path_statements)] -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() diff --git a/src/test/run-pass/unwind-unique.rs b/src/test/run-pass/unwind-unique.rs index 320a11f64d8..321e8198817 100644 --- a/src/test/run-pass/unwind-unique.rs +++ b/src/test/run-pass/unwind-unique.rs @@ -10,7 +10,6 @@ // ignore-emscripten no threads support -#![allow(unknown_features)] #![feature(box_syntax)] use std::thread; diff --git a/src/test/run-pass/vec-dst.rs b/src/test/run-pass/vec-dst.rs index aadbb922f67..cf4222b405e 100644 --- a/src/test/run-pass/vec-dst.rs +++ b/src/test/run-pass/vec-dst.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { diff --git a/src/test/run-pass/vector-no-ann-2.rs b/src/test/run-pass/vector-no-ann-2.rs index 10f71b3e12c..09e70cf03ca 100644 --- a/src/test/run-pass/vector-no-ann-2.rs +++ b/src/test/run-pass/vector-no-ann-2.rs @@ -10,7 +10,6 @@ // pretty-expanded FIXME #23616 -#![allow(unknown_features)] #![feature(box_syntax)] pub fn main() { let _quux: Box> = box Vec::new(); } diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs index db50b951443..dd235cb9c3a 100644 --- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs +++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs @@ -43,6 +43,7 @@ #![feature(rustc_attrs)] // For `rustc_error`; see note below. #![warn(unused_attributes, unknown_lints)] #![allow(dead_code)] +#![allow(stable_features)] // UNGATED WHITE-LISTED BUILT-IN ATTRIBUTES @@ -100,7 +101,7 @@ // For #![crate_id], see issue #43142. (I cannot bear to enshrine current behavior in a test) // FIXME(#44232) we should warn that this isn't used. -#![feature ( x0600)] +#![feature ( rust1)] // For #![no_start], see issue #43144. (I cannot bear to enshrine current behavior in a test) diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr index 2dbe9831014..fd38fb6f976 100644 --- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr +++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr @@ -1,5 +1,5 @@ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:49:33 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:50:33 | LL | #![warn (x5400)] //~ WARN unknown lint: `x5400` | ^^^^^ @@ -11,175 +11,175 @@ LL | #![warn(unused_attributes, unknown_lints)] | ^^^^^^^^^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:50:33 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:51:33 | LL | #![allow (x5300)] //~ WARN unknown lint: `x5300` | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:51:33 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:52:33 | LL | #![forbid (x5200)] //~ WARN unknown lint: `x5200` | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:52:33 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:53:33 | LL | #![deny (x5100)] //~ WARN unknown lint: `x5100` | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:114:8 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:115:8 | LL | #[warn(x5400)] | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:117:25 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:118:25 | LL | mod inner { #![warn(x5400)] } | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:120:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:121:12 | LL | #[warn(x5400)] fn f() { } | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:123:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:124:12 | LL | #[warn(x5400)] struct S; | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:126:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:127:12 | LL | #[warn(x5400)] type T = S; | ^^^^^ warning: unknown lint: `x5400` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:129:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:130:12 | LL | #[warn(x5400)] impl S { } | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:133:9 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:134:9 | LL | #[allow(x5300)] | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:136:26 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:137:26 | LL | mod inner { #![allow(x5300)] } | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:139:13 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:140:13 | LL | #[allow(x5300)] fn f() { } | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:142:13 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:143:13 | LL | #[allow(x5300)] struct S; | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:145:13 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:146:13 | LL | #[allow(x5300)] type T = S; | ^^^^^ warning: unknown lint: `x5300` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:148:13 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:149:13 | LL | #[allow(x5300)] impl S { } | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:152:10 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:153:10 | LL | #[forbid(x5200)] | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:155:27 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:156:27 | LL | mod inner { #![forbid(x5200)] } | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:158:14 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:159:14 | LL | #[forbid(x5200)] fn f() { } | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:161:14 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:162:14 | LL | #[forbid(x5200)] struct S; | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:164:14 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:165:14 | LL | #[forbid(x5200)] type T = S; | ^^^^^ warning: unknown lint: `x5200` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:167:14 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:168:14 | LL | #[forbid(x5200)] impl S { } | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:171:8 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:172:8 | LL | #[deny(x5100)] | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:174:25 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:175:25 | LL | mod inner { #![deny(x5100)] } | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:177:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:178:12 | LL | #[deny(x5100)] fn f() { } | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:180:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:181:12 | LL | #[deny(x5100)] struct S; | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:183:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:184:12 | LL | #[deny(x5100)] type T = S; | ^^^^^ warning: unknown lint: `x5100` - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:186:12 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:187:12 | LL | #[deny(x5100)] impl S { } | ^^^^^ warning: macro_escape is a deprecated synonym for macro_use - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:500:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:501:1 | LL | #[macro_escape] | ^^^^^^^^^^^^^^^ warning: macro_escape is a deprecated synonym for macro_use - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:503:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:504:17 | LL | mod inner { #![macro_escape] } | ^^^^^^^^^^^^^^^^ @@ -187,7 +187,7 @@ LL | mod inner { #![macro_escape] } = help: consider an outer attribute, #[macro_use] mod ... warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:316:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:17 | LL | mod inner { #![repr="3900"] } | ^^^^^^^^^^^^^^^ needs a hint @@ -197,7 +197,7 @@ LL | mod inner { #![repr="3900"] } = note: for more information, visit warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:320:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5 | LL | #[repr = "3900"] fn f() { } | ^^^^^^^^^^^^^^^^ needs a hint @@ -206,7 +206,7 @@ LL | #[repr = "3900"] fn f() { } = note: for more information, visit warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:326:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:327:5 | LL | #[repr = "3900"] type T = S; | ^^^^^^^^^^^^^^^^ needs a hint @@ -215,7 +215,7 @@ LL | #[repr = "3900"] type T = S; = note: for more information, visit warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:330:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:331:5 | LL | #[repr = "3900"] impl S { } | ^^^^^^^^^^^^^^^^ needs a hint @@ -224,7 +224,7 @@ LL | #[repr = "3900"] impl S { } = note: for more information, visit warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:312:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:313:1 | LL | #[repr = "3900"] | ^^^^^^^^^^^^^^^^ needs a hint @@ -233,7 +233,7 @@ LL | #[repr = "3900"] = note: for more information, visit warning: `repr` attribute isn't configurable with a literal - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:62:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:63:1 | LL | #![repr = "3900"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ needs a hint @@ -242,7 +242,7 @@ LL | #![repr = "3900"] = note: for more information, visit warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:194:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:195:5 | LL | #[macro_use] fn f() { } | ^^^^^^^^^^^^ @@ -254,277 +254,277 @@ LL | #![warn(unused_attributes, unknown_lints)] | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:197:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:198:5 | LL | #[macro_use] struct S; | ^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:200:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:201:5 | LL | #[macro_use] type T = S; | ^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:203:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:204:5 | LL | #[macro_use] impl S { } | ^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:210:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:211:17 | LL | mod inner { #![macro_export="4800"] } | ^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:213:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:214:5 | LL | #[macro_export = "4800"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:216:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:217:5 | LL | #[macro_export = "4800"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:219:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:220:5 | LL | #[macro_export = "4800"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:222:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:223:5 | LL | #[macro_export = "4800"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:207:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:208:1 | LL | #[macro_export = "4800"] | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:229:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:230:17 | LL | mod inner { #![plugin_registrar="4700"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:234:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:235:5 | LL | #[plugin_registrar = "4700"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:237:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:238:5 | LL | #[plugin_registrar = "4700"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:240:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:241:5 | LL | #[plugin_registrar = "4700"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:226:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:227:1 | LL | #[plugin_registrar = "4700"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:247:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:248:17 | LL | mod inner { #![main="4300"] } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:252:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:253:5 | LL | #[main = "4400"] struct S; | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:255:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:256:5 | LL | #[main = "4400"] type T = S; | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:258:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:259:5 | LL | #[main = "4400"] impl S { } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:244:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:245:1 | LL | #[main = "4400"] | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:265:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:266:17 | LL | mod inner { #![start="4300"] } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:270:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:271:5 | LL | #[start = "4300"] struct S; | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:273:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:274:5 | LL | #[start = "4300"] type T = S; | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:276:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:277:5 | LL | #[start = "4300"] impl S { } | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:262:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:263:1 | LL | #[start = "4300"] | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:316:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:17 | LL | mod inner { #![repr="3900"] } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:320:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5 | LL | #[repr = "3900"] fn f() { } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:326:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:327:5 | LL | #[repr = "3900"] type T = S; | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:330:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:331:5 | LL | #[repr = "3900"] impl S { } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:312:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:313:1 | LL | #[repr = "3900"] | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:339:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:340:5 | LL | #[path = "3800"] fn f() { } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:342:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:343:5 | LL | #[path = "3800"] struct S; | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:345:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:346:5 | LL | #[path = "3800"] type T = S; | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:348:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:349:5 | LL | #[path = "3800"] impl S { } | ^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:355:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:356:17 | LL | mod inner { #![abi="3700"] } | ^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:358:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:359:5 | LL | #[abi = "3700"] fn f() { } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:361:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:362:5 | LL | #[abi = "3700"] struct S; | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:364:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:365:5 | LL | #[abi = "3700"] type T = S; | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:367:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:368:5 | LL | #[abi = "3700"] impl S { } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:352:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:353:1 | LL | #[abi = "3700"] | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:374:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:375:17 | LL | mod inner { #![automatically_derived="3600"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:377:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:378:5 | LL | #[automatically_derived = "3600"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:380:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:381:5 | LL | #[automatically_derived = "3600"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:383:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:384:5 | LL | #[automatically_derived = "3600"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:386:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:387:5 | LL | #[automatically_derived = "3600"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:371:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:372:1 | LL | #[automatically_derived = "3600"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: function is marked #[no_mangle], but not exported - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:394:27 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:395:27 | LL | #[no_mangle = "3500"] fn f() { } | -^^^^^^^^^ @@ -534,787 +534,787 @@ LL | #[no_mangle = "3500"] fn f() { } = note: #[warn(private_no_mangle_fns)] on by default warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:407:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:408:17 | LL | mod inner { #![no_link="3400"] } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:410:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:411:5 | LL | #[no_link = "3400"] fn f() { } | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:413:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:414:5 | LL | #[no_link = "3400"] struct S; | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:416:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:417:5 | LL | #[no_link = "3400"]type T = S; | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:419:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:420:5 | LL | #[no_link = "3400"] impl S { } | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:404:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:405:1 | LL | #[no_link = "3400"] | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:426:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:427:17 | LL | mod inner { #![should_panic="3200"] } | ^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:429:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:430:5 | LL | #[should_panic = "3200"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:432:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:433:5 | LL | #[should_panic = "3200"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:435:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:436:5 | LL | #[should_panic = "3200"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:438:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:439:5 | LL | #[should_panic = "3200"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:423:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:424:1 | LL | #[should_panic = "3200"] | ^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:445:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:446:17 | LL | mod inner { #![ignore="3100"] } | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:448:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:449:5 | LL | #[ignore = "3100"] fn f() { } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:451:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:452:5 | LL | #[ignore = "3100"] struct S; | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:454:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:455:5 | LL | #[ignore = "3100"] type T = S; | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:457:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:458:5 | LL | #[ignore = "3100"] impl S { } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:442:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:443:1 | LL | #[ignore = "3100"] | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:464:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:465:17 | LL | mod inner { #![no_implicit_prelude="3000"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:467:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:468:5 | LL | #[no_implicit_prelude = "3000"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:470:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:471:5 | LL | #[no_implicit_prelude = "3000"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:473:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:474:5 | LL | #[no_implicit_prelude = "3000"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:477:5 | LL | #[no_implicit_prelude = "3000"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:461:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:462:1 | LL | #[no_implicit_prelude = "3000"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:483:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:484:17 | LL | mod inner { #![reexport_test_harness_main="2900"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:486:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:487:5 | LL | #[reexport_test_harness_main = "2900"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:489:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:490:5 | LL | #[reexport_test_harness_main = "2900"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:493:5 | LL | #[reexport_test_harness_main = "2900"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:495:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5 | LL | #[reexport_test_harness_main = "2900"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:480:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:481:1 | LL | #[reexport_test_harness_main = "2900"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:506:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:507:5 | LL | #[macro_escape] fn f() { } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:509:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:510:5 | LL | #[macro_escape] struct S; | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:512:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:513:5 | LL | #[macro_escape] type T = S; | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:515:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:516:5 | LL | #[macro_escape] impl S { } | ^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:523:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:524:17 | LL | mod inner { #![no_std="2600"] } | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:523:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:524:17 | LL | mod inner { #![no_std="2600"] } | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:527:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:528:5 | LL | #[no_std = "2600"] fn f() { } | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:527:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:528:5 | LL | #[no_std = "2600"] fn f() { } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:531:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:532:5 | LL | #[no_std = "2600"] struct S; | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:531:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:532:5 | LL | #[no_std = "2600"] struct S; | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:535:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:536:5 | LL | #[no_std = "2600"] type T = S; | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:535:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:536:5 | LL | #[no_std = "2600"] type T = S; | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:539:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:540:5 | LL | #[no_std = "2600"] impl S { } | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:539:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:540:5 | LL | #[no_std = "2600"] impl S { } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:519:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:520:1 | LL | #[no_std = "2600"] | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:519:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:520:1 | LL | #[no_std = "2600"] | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:678:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:679:17 | LL | mod inner { #![crate_name="0900"] } | ^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:678:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:679:17 | LL | mod inner { #![crate_name="0900"] } | ^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:682:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:683:5 | LL | #[crate_name = "0900"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:682:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:683:5 | LL | #[crate_name = "0900"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:686:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:687:5 | LL | #[crate_name = "0900"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:686:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:687:5 | LL | #[crate_name = "0900"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:690:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:691:5 | LL | #[crate_name = "0900"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:690:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:691:5 | LL | #[crate_name = "0900"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:694:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:695:5 | LL | #[crate_name = "0900"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:694:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:695:5 | LL | #[crate_name = "0900"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:674:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:675:1 | LL | #[crate_name = "0900"] | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:674:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:675:1 | LL | #[crate_name = "0900"] | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:703:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:704:17 | LL | mod inner { #![crate_type="0800"] } | ^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:703:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:704:17 | LL | mod inner { #![crate_type="0800"] } | ^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:708:5 | LL | #[crate_type = "0800"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:708:5 | LL | #[crate_type = "0800"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:712:5 | LL | #[crate_type = "0800"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:712:5 | LL | #[crate_type = "0800"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5 | LL | #[crate_type = "0800"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:716:5 | LL | #[crate_type = "0800"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:5 | LL | #[crate_type = "0800"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:720:5 | LL | #[crate_type = "0800"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:699:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:700:1 | LL | #[crate_type = "0800"] | ^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:699:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:700:1 | LL | #[crate_type = "0800"] | ^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:729:17 | LL | mod inner { #![feature(x0600)] } | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:728:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:729:17 | LL | mod inner { #![feature(x0600)] } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:732:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:733:5 | LL | #[feature(x0600)] fn f() { } | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:732:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:733:5 | LL | #[feature(x0600)] fn f() { } | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:736:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:737:5 | LL | #[feature(x0600)] struct S; | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:736:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:737:5 | LL | #[feature(x0600)] struct S; | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:741:5 | LL | #[feature(x0600)] type T = S; | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:741:5 | LL | #[feature(x0600)] type T = S; | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:5 | LL | #[feature(x0600)] impl S { } | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:5 | LL | #[feature(x0600)] impl S { } | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:725:1 | LL | #[feature(x0600)] | ^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:724:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:725:1 | LL | #[feature(x0600)] | ^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:754:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:755:17 | LL | mod inner { #![no_main="0400"] } | ^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:754:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:755:17 | LL | mod inner { #![no_main="0400"] } | ^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:758:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:759:5 | LL | #[no_main = "0400"] fn f() { } | ^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:758:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:759:5 | LL | #[no_main = "0400"] fn f() { } | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:762:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:763:5 | LL | #[no_main = "0400"] struct S; | ^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:762:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:763:5 | LL | #[no_main = "0400"] struct S; | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:766:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:767:5 | LL | #[no_main = "0400"] type T = S; | ^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:766:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:767:5 | LL | #[no_main = "0400"] type T = S; | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:771:5 | LL | #[no_main = "0400"] impl S { } | ^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:771:5 | LL | #[no_main = "0400"] impl S { } | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:750:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:751:1 | LL | #[no_main = "0400"] | ^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:750:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:751:1 | LL | #[no_main = "0400"] | ^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:792:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:793:17 | LL | mod inner { #![recursion_limit="0200"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:792:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:793:17 | LL | mod inner { #![recursion_limit="0200"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:796:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:797:5 | LL | #[recursion_limit="0200"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:796:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:797:5 | LL | #[recursion_limit="0200"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:800:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:801:5 | LL | #[recursion_limit="0200"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:800:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:801:5 | LL | #[recursion_limit="0200"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:804:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:805:5 | LL | #[recursion_limit="0200"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:804:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:805:5 | LL | #[recursion_limit="0200"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:808:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:809:5 | LL | #[recursion_limit="0200"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:808:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:809:5 | LL | #[recursion_limit="0200"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:788:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:789:1 | LL | #[recursion_limit="0200"] | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:788:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:789:1 | LL | #[recursion_limit="0200"] | ^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:817:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:818:17 | LL | mod inner { #![type_length_limit="0100"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be in the root module - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:817:17 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:818:17 | LL | mod inner { #![type_length_limit="0100"] } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:821:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:822:5 | LL | #[type_length_limit="0100"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:821:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:822:5 | LL | #[type_length_limit="0100"] fn f() { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:825:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:826:5 | LL | #[type_length_limit="0100"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:825:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:826:5 | LL | #[type_length_limit="0100"] struct S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:829:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:830:5 | LL | #[type_length_limit="0100"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:829:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:830:5 | LL | #[type_length_limit="0100"] type T = S; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:833:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:834:5 | LL | #[type_length_limit="0100"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:833:5 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:834:5 | LL | #[type_length_limit="0100"] impl S { } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:813:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:814:1 | LL | #[type_length_limit="0100"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo] - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:813:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:814:1 | LL | #[type_length_limit="0100"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:54:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:55:1 | LL | #![macro_export = "4800"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:55:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:56:1 | LL | #![plugin_registrar = "4700"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:58:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:59:1 | LL | #![main = "x4400"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:59:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:60:1 | LL | #![start = "x4300"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:62:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:63:1 | LL | #![repr = "3900"] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:65:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:66:1 | LL | #![path = "3800"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:66:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:67:1 | LL | #![abi = "3700"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:67:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:68:1 | LL | #![automatically_derived = "3600"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:69:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:70:1 | LL | #![no_link = "3400"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:71:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:72:1 | LL | #![should_panic = "3200"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:72:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:73:1 | LL | #![ignore = "3100"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ warning: unused attribute - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:78:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:79:1 | LL | #![proc_macro_derive = "2500"] //~ WARN unused attribute | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: compilation successful - --> $DIR/issue-43106-gating-of-builtin-attrs.rs:844:1 + --> $DIR/issue-43106-gating-of-builtin-attrs.rs:845:1 | LL | / fn main() { //~ ERROR compilation successful LL | | println!("Hello World"); diff --git a/src/test/ui/feature-gate/unknown-feature.rs b/src/test/ui/feature-gate/unknown-feature.rs index 4101faf7dd0..da1b257f634 100644 --- a/src/test/ui/feature-gate/unknown-feature.rs +++ b/src/test/ui/feature-gate/unknown-feature.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![deny(unknown_features)] - #![feature(unknown_rust_feature)] //~ ERROR unknown feature fn main() {} diff --git a/src/test/ui/feature-gate/unknown-feature.stderr b/src/test/ui/feature-gate/unknown-feature.stderr index 392d918246f..f44aaeec032 100644 --- a/src/test/ui/feature-gate/unknown-feature.stderr +++ b/src/test/ui/feature-gate/unknown-feature.stderr @@ -1,14 +1,9 @@ -error: unknown feature `unknown_rust_feature` - --> $DIR/unknown-feature.rs:13:12 +error[E0635]: unknown feature `unknown_rust_feature` + --> $DIR/unknown-feature.rs:11:12 | LL | #![feature(unknown_rust_feature)] //~ ERROR unknown feature | ^^^^^^^^^^^^^^^^^^^^ - | -note: lint level defined here - --> $DIR/unknown-feature.rs:11:9 - | -LL | #![deny(unknown_features)] - | ^^^^^^^^^^^^^^^^ error: aborting due to previous error +For more information about this error, try `rustc --explain E0635`. diff --git a/src/test/ui/lint-output-format-2.rs b/src/test/ui/lint-output-format-2.rs index 811b14063bb..e87ddde7413 100644 --- a/src/test/ui/lint-output-format-2.rs +++ b/src/test/ui/lint-output-format-2.rs @@ -10,9 +10,6 @@ // aux-build:lint_output_format.rs -// FIXME(#44232) we should warn that this isn't used. -#![feature(foo)] - #![feature(unstable_test_feature)] #![feature(rustc_attrs)] diff --git a/src/test/ui/lint-output-format-2.stderr b/src/test/ui/lint-output-format-2.stderr index d484061ef96..8c6247688e8 100644 --- a/src/test/ui/lint-output-format-2.stderr +++ b/src/test/ui/lint-output-format-2.stderr @@ -1,5 +1,5 @@ warning: use of deprecated item 'lint_output_format::foo': text - --> $DIR/lint-output-format-2.rs:20:26 + --> $DIR/lint-output-format-2.rs:17:26 | LL | use lint_output_format::{foo, bar}; | ^^^ @@ -7,13 +7,13 @@ LL | use lint_output_format::{foo, bar}; = note: #[warn(deprecated)] on by default warning: use of deprecated item 'lint_output_format::foo': text - --> $DIR/lint-output-format-2.rs:25:14 + --> $DIR/lint-output-format-2.rs:22:14 | LL | let _x = foo(); | ^^^ error: compilation successful - --> $DIR/lint-output-format-2.rs:24:1 + --> $DIR/lint-output-format-2.rs:21:1 | LL | / fn main() { //~ ERROR: compilation successful LL | | let _x = foo(); From 53add5d7d3d4f0ad2cc8b3a965c1886478d94c55 Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 23 Jul 2018 22:37:57 +0100 Subject: [PATCH 22/38] Add support for feature attributes on macros --- src/librustc/middle/lib_features.rs | 3 +++ src/librustc/middle/stability.rs | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index a1abfb704ec..365fe1e6b5a 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -171,5 +171,8 @@ pub fn collect<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> LibFeatures { } collector.collect_from_attrs(&tcx.hir.krate().attrs); tcx.hir.krate().visit_all_item_likes(&mut collector); + for exported_macro in &tcx.hir.krate().exported_macros { + collector.collect_from_attrs(&exported_macro.attrs); + } collector.lib_features } diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 34b253ff9c6..98c2eaaeb61 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -840,10 +840,6 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, // but it happens just to affect `libc`, so we're just going to hard-code it for now. remaining_lib_features.remove(&Symbol::intern("libc")); - // FIXME(varkor): we have a problem gathering features on macros right now, so we're - // going to hard-code some features here for now. - remaining_lib_features.remove(&Symbol::intern("await_macro")); - remaining_lib_features.remove(&Symbol::intern("unstable_macros")); for (feature, stable) in tcx.lib_features().iter() { if let Some(since) = stable { From f91d7baaa47efc6c8c2d8a1e6e2c79c3bef2f70d Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 24 Jul 2018 00:56:00 +0100 Subject: [PATCH 23/38] Add special support for libc --- src/librustc/middle/lib_features.rs | 2 -- src/librustc/middle/stability.rs | 6 +++--- src/libsyntax/feature_gate.rs | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index 365fe1e6b5a..b30341103e4 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -62,8 +62,6 @@ impl<'a, 'tcx> LibFeatureCollector<'a, 'tcx> { let mut features = vec![]; for attr in attrs { - // FIXME(varkor): the stability attribute might be behind a `#[cfg]` attribute. - // Find a stability attribute (i.e. `#[stable (..)]`, `#[unstable (..)]`, // `#[rustc_const_unstable (..)]`). if let Some(stab_attr) = stab_attrs.iter().find(|stab_attr| { diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 98c2eaaeb61..f2296c04acc 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -813,7 +813,6 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { krate.visit_all_item_likes(&mut missing.as_deep_visitor()); } - let declared_lang_features = &tcx.features().declared_lang_features; let mut lang_features = FxHashSet(); for &(feature, span, since) in declared_lang_features { @@ -837,8 +836,9 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { } remaining_lib_features.insert(feature, span.clone()); } - // FIXME(varkor): we don't properly handle lib features behind `cfg` attributes yet, - // but it happens just to affect `libc`, so we're just going to hard-code it for now. + // `stdbuild` has special handling for `libc`, so we need to + // recognise the feature when building std. + // FIXME: only remove `libc` when `stdbuild` is active. remaining_lib_features.remove(&Symbol::intern("libc")); for (feature, stable) in tcx.lib_features().iter() { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 4aafe8bba58..833b6953dcd 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -321,7 +321,6 @@ declare_features! ( // `extern "x86-interrupt" fn()` (active, abi_x86_interrupt, "1.17.0", Some(40180), None), - // Allows the `catch {...}` expression (active, catch_expr, "1.17.0", Some(31436), Some(Edition::Edition2018)), From f2fd00005e9fe37da466b3d48290cf36498de9e0 Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 24 Jul 2018 13:37:41 +0100 Subject: [PATCH 24/38] Fix incremental tests --- src/librustc_metadata/decoder.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 45a61ec3308..032f8bdd069 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -647,10 +647,12 @@ impl<'a, 'tcx> CrateMetadata { /// Iterates over all the stability attributes in the given crate. pub fn get_lib_features(&self) -> Vec<(ast::Name, Option)> { - self.root + let mut features: Vec<_> = self.root .lib_features .decode(self) - .collect() + .collect(); + features.sort_unstable_by_key(|f| f.0.as_str()); + features } /// Iterates over the language items in the given crate. From f22ccbe315676dee6accdfd6fc22fa48bace1354 Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 24 Jul 2018 18:24:12 +0100 Subject: [PATCH 25/38] Fix run-pass-fulldeps tests --- .../auxiliary/pub_and_stability.rs | 28 +++++++++---------- .../compile-fail/auxiliary/unstable-macros.rs | 2 +- src/test/run-pass-fulldeps/compiler-calls.rs | 3 +- src/test/run-pass-fulldeps/deriving-global.rs | 2 +- .../proc-macro/attr-stmt-expr.rs | 2 +- .../associated-types-nested-projections.rs | 2 -- src/test/run-pass/auxiliary/issue13507.rs | 2 -- .../auxiliary/typeid-intrinsic-aux1.rs | 2 -- .../auxiliary/typeid-intrinsic-aux2.rs | 2 -- .../run-pass/auxiliary/unstable-macros.rs | 2 +- .../run-pass/deriving-associated-types.rs | 2 -- src/test/run-pass/dst-index.rs | 3 -- src/test/run-pass/generic-extern-mangle.rs | 3 -- src/test/run-pass/issue-15734.rs | 3 -- src/test/run-pass/issue-17351.rs | 2 -- src/test/run-pass/issue-21562.rs | 2 -- src/test/run-pass/issue-22346.rs | 2 -- src/test/run-pass/issue-3563-3.rs | 2 -- src/test/run-pass/issue-3753.rs | 2 -- ...o-traits-distinguished-via-where-clause.rs | 2 -- src/test/run-pass/operator-overloading.rs | 2 -- .../run-pass/overloaded-index-assoc-list.rs | 3 -- .../run-pass/overloaded-index-in-field.rs | 3 -- src/test/run-pass/overloaded-index.rs | 3 -- .../run-pass/parallel-codegen-closures.rs | 1 - src/test/run-pass/slice.rs | 3 -- src/test/run-pass/small-enum-range-edge.rs | 8 +----- .../trait-bounds-on-structs-and-enums.rs | 2 -- src/test/run-pass/trait-inheritance-num0.rs | 2 -- src/test/run-pass/type-id-higher-rank.rs | 3 -- src/test/run-pass/utf8_chars.rs | 3 -- ...ariance-intersection-of-ref-and-opt-ref.rs | 2 -- src/test/run-pass/variance-vec-covariant.rs | 2 -- .../rustdoc/auxiliary/rustdoc-default-impl.rs | 1 - .../ui/auxiliary/svh-a-change-type-static.rs | 1 - 35 files changed, 20 insertions(+), 89 deletions(-) diff --git a/src/test/compile-fail-fulldeps/auxiliary/pub_and_stability.rs b/src/test/compile-fail-fulldeps/auxiliary/pub_and_stability.rs index dfbe35dfd56..eedc1e745e2 100644 --- a/src/test/compile-fail-fulldeps/auxiliary/pub_and_stability.rs +++ b/src/test/compile-fail-fulldeps/auxiliary/pub_and_stability.rs @@ -36,16 +36,16 @@ #![feature(staged_api)] -#![stable(feature = "unit_test", since = "0.0.0")] +#![stable(feature = "unit_test", since = "1.0.0")] -#[stable(feature = "unit_test", since = "0.0.0")] +#[stable(feature = "unit_test", since = "1.0.0")] pub use m::{Record, Trait, Tuple}; mod m { #[derive(Default)] - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub struct Record { - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub a_stable_pub: i32, #[unstable(feature = "unstable_declared", issue = "38412")] pub a_unstable_declared_pub: i32, @@ -55,14 +55,14 @@ mod m { pub(crate) b_crate: i32, #[unstable(feature = "unstable_declared", issue = "38412")] // SILLY pub(in m) c_mod: i32, - #[stable(feature = "unit_test", since = "0.0.0")] // SILLY + #[stable(feature = "unit_test", since = "1.0.0")] // SILLY d_priv: i32 } #[derive(Default)] #[stable(feature = "unit_test", since = "1.0.0")] pub struct Tuple( - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub i32, #[unstable(feature = "unstable_declared", issue = "38412")] pub i32, @@ -84,11 +84,11 @@ mod m { } - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub trait Trait { - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] type Type; - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] fn stable_trait_method(&self) -> Self::Type; #[unstable(feature = "unstable_undeclared", issue = "38412")] fn unstable_undeclared_trait_method(&self) -> Self::Type; @@ -96,7 +96,7 @@ mod m { fn unstable_declared_trait_method(&self) -> Self::Type; } - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] impl Trait for Record { type Type = i32; fn stable_trait_method(&self) -> i32 { self.d_priv } @@ -104,7 +104,7 @@ mod m { fn unstable_declared_trait_method(&self) -> i32 { self.d_priv } } - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] impl Trait for Tuple { type Type = i32; fn stable_trait_method(&self) -> i32 { self.3 } @@ -117,14 +117,14 @@ mod m { pub fn unstable_undeclared(&self) -> i32 { self.d_priv } #[unstable(feature = "unstable_declared", issue = "38412")] pub fn unstable_declared(&self) -> i32 { self.d_priv } - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub fn stable(&self) -> i32 { self.d_priv } #[unstable(feature = "unstable_undeclared", issue = "38412")] // SILLY pub(crate) fn pub_crate(&self) -> i32 { self.d_priv } #[unstable(feature = "unstable_declared", issue = "38412")] // SILLY pub(in m) fn pub_mod(&self) -> i32 { self.d_priv } - #[stable(feature = "unit_test", since = "0.0.0")] // SILLY + #[stable(feature = "unit_test", since = "1.0.0")] // SILLY fn private(&self) -> i32 { self.d_priv } } @@ -133,7 +133,7 @@ mod m { pub fn unstable_undeclared(&self) -> i32 { self.0 } #[unstable(feature = "unstable_declared", issue = "38412")] pub fn unstable_declared(&self) -> i32 { self.0 } - #[stable(feature = "unit_test", since = "0.0.0")] + #[stable(feature = "unit_test", since = "1.0.0")] pub fn stable(&self) -> i32 { self.0 } pub(crate) fn pub_crate(&self) -> i32 { self.0 } diff --git a/src/test/compile-fail/auxiliary/unstable-macros.rs b/src/test/compile-fail/auxiliary/unstable-macros.rs index 6462c11af48..836164a721a 100644 --- a/src/test/compile-fail/auxiliary/unstable-macros.rs +++ b/src/test/compile-fail/auxiliary/unstable-macros.rs @@ -9,7 +9,7 @@ // except according to those terms. #![feature(staged_api)] -#![stable(feature = "unit_test", since = "0.0.0")] +#![stable(feature = "unit_test", since = "1.0.0")] #[unstable(feature = "unstable_macros", issue = "0")] #[macro_export] diff --git a/src/test/run-pass-fulldeps/compiler-calls.rs b/src/test/run-pass-fulldeps/compiler-calls.rs index cc2b6c641e9..baf9e0d5dc5 100644 --- a/src/test/run-pass-fulldeps/compiler-calls.rs +++ b/src/test/run-pass-fulldeps/compiler-calls.rs @@ -12,8 +12,7 @@ // ignore-cross-compile -#![feature(rustc_private, path)] -#![feature(core)] +#![feature(rustc_private)] extern crate getopts; extern crate rustc; diff --git a/src/test/run-pass-fulldeps/deriving-global.rs b/src/test/run-pass-fulldeps/deriving-global.rs index 10e8ddc41f3..e9678732804 100644 --- a/src/test/run-pass-fulldeps/deriving-global.rs +++ b/src/test/run-pass-fulldeps/deriving-global.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(rand, rustc_private)] +#![feature(rustc_private)] extern crate serialize; diff --git a/src/test/run-pass-fulldeps/proc-macro/attr-stmt-expr.rs b/src/test/run-pass-fulldeps/proc-macro/attr-stmt-expr.rs index 021b10e033f..3356828c04b 100644 --- a/src/test/run-pass-fulldeps/proc-macro/attr-stmt-expr.rs +++ b/src/test/run-pass-fulldeps/proc-macro/attr-stmt-expr.rs @@ -11,7 +11,7 @@ // aux-build:attr-stmt-expr.rs // ignore-stage1 -#![feature(use_extern_macros, stmt_expr_attributes, proc_macro_stmt, proc_macro_expr)] +#![feature(use_extern_macros, stmt_expr_attributes, proc_macro_expr)] extern crate attr_stmt_expr; use attr_stmt_expr::{expect_let, expect_print_stmt, expect_expr, expect_print_expr, diff --git a/src/test/run-pass/associated-types-nested-projections.rs b/src/test/run-pass/associated-types-nested-projections.rs index 83f0d360e61..62fa07e20b6 100644 --- a/src/test/run-pass/associated-types-nested-projections.rs +++ b/src/test/run-pass/associated-types-nested-projections.rs @@ -12,8 +12,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - use std::slice; trait Bound {} diff --git a/src/test/run-pass/auxiliary/issue13507.rs b/src/test/run-pass/auxiliary/issue13507.rs index ee7d45b77bf..dee40b2fc57 100644 --- a/src/test/run-pass/auxiliary/issue13507.rs +++ b/src/test/run-pass/auxiliary/issue13507.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - pub mod testtypes { use std::any::TypeId; diff --git a/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs b/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs index 10e315f269f..0d0f1b3a482 100644 --- a/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs +++ b/src/test/run-pass/auxiliary/typeid-intrinsic-aux1.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - use std::any::{Any, TypeId}; pub struct A; diff --git a/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs b/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs index 10e315f269f..0d0f1b3a482 100644 --- a/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs +++ b/src/test/run-pass/auxiliary/typeid-intrinsic-aux2.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - use std::any::{Any, TypeId}; pub struct A; diff --git a/src/test/run-pass/auxiliary/unstable-macros.rs b/src/test/run-pass/auxiliary/unstable-macros.rs index 6462c11af48..836164a721a 100644 --- a/src/test/run-pass/auxiliary/unstable-macros.rs +++ b/src/test/run-pass/auxiliary/unstable-macros.rs @@ -9,7 +9,7 @@ // except according to those terms. #![feature(staged_api)] -#![stable(feature = "unit_test", since = "0.0.0")] +#![stable(feature = "unit_test", since = "1.0.0")] #[unstable(feature = "unstable_macros", issue = "0")] #[macro_export] diff --git a/src/test/run-pass/deriving-associated-types.rs b/src/test/run-pass/deriving-associated-types.rs index 632ef5e0c8a..d3aaa3ded69 100644 --- a/src/test/run-pass/deriving-associated-types.rs +++ b/src/test/run-pass/deriving-associated-types.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - pub trait DeclaredTrait { type Type; } diff --git a/src/test/run-pass/dst-index.rs b/src/test/run-pass/dst-index.rs index 34a187fa6f2..6bda400a7cd 100644 --- a/src/test/run-pass/dst-index.rs +++ b/src/test/run-pass/dst-index.rs @@ -11,9 +11,6 @@ // Test that overloaded index expressions with DST result types // work and don't ICE. - -#![feature(core)] - use std::ops::Index; use std::fmt::Debug; diff --git a/src/test/run-pass/generic-extern-mangle.rs b/src/test/run-pass/generic-extern-mangle.rs index 67aea1f9f8a..debe3706891 100644 --- a/src/test/run-pass/generic-extern-mangle.rs +++ b/src/test/run-pass/generic-extern-mangle.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![feature(core)] - use std::ops::Add; extern "C" fn foo(a: T, b: T) -> T::Output { a + b } diff --git a/src/test/run-pass/issue-15734.rs b/src/test/run-pass/issue-15734.rs index daf14b4c2ff..5a35239cf72 100644 --- a/src/test/run-pass/issue-15734.rs +++ b/src/test/run-pass/issue-15734.rs @@ -11,9 +11,6 @@ // If `Index` used an associated type for its output, this test would // work more smoothly. - -#![feature(core)] - use std::ops::Index; struct Mat { data: Vec, cols: usize, } diff --git a/src/test/run-pass/issue-17351.rs b/src/test/run-pass/issue-17351.rs index 6e93194647a..88f83a300a7 100644 --- a/src/test/run-pass/issue-17351.rs +++ b/src/test/run-pass/issue-17351.rs @@ -10,8 +10,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - trait Str { fn foo(&self) {} } impl Str for str {} impl<'a, S: ?Sized> Str for &'a S where S: Str {} diff --git a/src/test/run-pass/issue-21562.rs b/src/test/run-pass/issue-21562.rs index aa784ba432c..51896786d0c 100644 --- a/src/test/run-pass/issue-21562.rs +++ b/src/test/run-pass/issue-21562.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - extern crate core; use core::marker::Sync; diff --git a/src/test/run-pass/issue-22346.rs b/src/test/run-pass/issue-22346.rs index 8538950a895..895b9d222a8 100644 --- a/src/test/run-pass/issue-22346.rs +++ b/src/test/run-pass/issue-22346.rs @@ -10,8 +10,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - // This used to cause an ICE because the retslot for the "return" had the wrong type fn testcase<'a>() -> Box + 'a> { return Box::new((0..3).map(|i| { return i; })); diff --git a/src/test/run-pass/issue-3563-3.rs b/src/test/run-pass/issue-3563-3.rs index ecee2fd0faa..56208d08779 100644 --- a/src/test/run-pass/issue-3563-3.rs +++ b/src/test/run-pass/issue-3563-3.rs @@ -22,8 +22,6 @@ // that are already linked in. Using WriterUtil allows us to use the write_line // method. -#![feature(core)] - use std::fmt; use std::iter::repeat; use std::slice; diff --git a/src/test/run-pass/issue-3753.rs b/src/test/run-pass/issue-3753.rs index e81025d8464..e6eb8efe442 100644 --- a/src/test/run-pass/issue-3753.rs +++ b/src/test/run-pass/issue-3753.rs @@ -12,8 +12,6 @@ // Issue Name: pub method preceded by attribute can't be parsed // Abstract: Visibility parsing failed when compiler parsing -#![feature(core)] - use std::f64; #[derive(Copy, Clone)] diff --git a/src/test/run-pass/method-two-traits-distinguished-via-where-clause.rs b/src/test/run-pass/method-two-traits-distinguished-via-where-clause.rs index 77072bdec90..3f0f4f35745 100644 --- a/src/test/run-pass/method-two-traits-distinguished-via-where-clause.rs +++ b/src/test/run-pass/method-two-traits-distinguished-via-where-clause.rs @@ -13,8 +13,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - trait A { fn foo(self); } diff --git a/src/test/run-pass/operator-overloading.rs b/src/test/run-pass/operator-overloading.rs index 045af79189a..c3a1164ba9c 100644 --- a/src/test/run-pass/operator-overloading.rs +++ b/src/test/run-pass/operator-overloading.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(core)] - use std::cmp; use std::ops; diff --git a/src/test/run-pass/overloaded-index-assoc-list.rs b/src/test/run-pass/overloaded-index-assoc-list.rs index e0f61fd8497..50140d1aab9 100644 --- a/src/test/run-pass/overloaded-index-assoc-list.rs +++ b/src/test/run-pass/overloaded-index-assoc-list.rs @@ -11,9 +11,6 @@ // Test overloading of the `[]` operator. In particular test that it // takes its argument *by reference*. - -#![feature(core)] - use std::ops::Index; struct AssociationList { diff --git a/src/test/run-pass/overloaded-index-in-field.rs b/src/test/run-pass/overloaded-index-in-field.rs index ff867e76810..7e2b586631d 100644 --- a/src/test/run-pass/overloaded-index-in-field.rs +++ b/src/test/run-pass/overloaded-index-in-field.rs @@ -11,9 +11,6 @@ // Test using overloaded indexing when the "map" is stored in a // field. This caused problems at some point. - -#![feature(core)] - use std::ops::Index; struct Foo { diff --git a/src/test/run-pass/overloaded-index.rs b/src/test/run-pass/overloaded-index.rs index fa3c107697e..b54a18f722a 100644 --- a/src/test/run-pass/overloaded-index.rs +++ b/src/test/run-pass/overloaded-index.rs @@ -8,9 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![feature(core)] - use std::ops::{Index, IndexMut}; struct Foo { diff --git a/src/test/run-pass/parallel-codegen-closures.rs b/src/test/run-pass/parallel-codegen-closures.rs index e3c2b448ce0..27b9eeccbeb 100644 --- a/src/test/run-pass/parallel-codegen-closures.rs +++ b/src/test/run-pass/parallel-codegen-closures.rs @@ -14,7 +14,6 @@ // ignore-bitrig // compile-flags: -C codegen_units=2 -#![feature(core)] #![feature(iter_arith)] mod a { diff --git a/src/test/run-pass/slice.rs b/src/test/run-pass/slice.rs index 8e1d96d3669..dfd7b947c57 100644 --- a/src/test/run-pass/slice.rs +++ b/src/test/run-pass/slice.rs @@ -10,9 +10,6 @@ // Test slicing sugar. - -#![feature(core)] - extern crate core; use core::ops::{Index, IndexMut, Range, RangeTo, RangeFrom, RangeFull}; diff --git a/src/test/run-pass/small-enum-range-edge.rs b/src/test/run-pass/small-enum-range-edge.rs index d2283da8bdd..7b6f0a7c9ab 100644 --- a/src/test/run-pass/small-enum-range-edge.rs +++ b/src/test/run-pass/small-enum-range-edge.rs @@ -8,13 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -// this is for the wrapping_add call below. -#![feature(core)] - -/*! - * Tests the range assertion wraparound case when reading discriminants. - */ +// Tests the range assertion wraparound case when reading discriminants. #[repr(u8)] #[derive(Copy, Clone)] diff --git a/src/test/run-pass/trait-bounds-on-structs-and-enums.rs b/src/test/run-pass/trait-bounds-on-structs-and-enums.rs index bb8ae8247fa..6f088e15b35 100644 --- a/src/test/run-pass/trait-bounds-on-structs-and-enums.rs +++ b/src/test/run-pass/trait-bounds-on-structs-and-enums.rs @@ -10,8 +10,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - trait U {} trait T { fn get(self) -> X; } diff --git a/src/test/run-pass/trait-inheritance-num0.rs b/src/test/run-pass/trait-inheritance-num0.rs index 70515a088e2..9f5c7cf6036 100644 --- a/src/test/run-pass/trait-inheritance-num0.rs +++ b/src/test/run-pass/trait-inheritance-num0.rs @@ -12,8 +12,6 @@ // pretty-expanded FIXME #23616 -#![feature(core)] - use std::cmp::PartialOrd; pub trait NumCast: Sized { diff --git a/src/test/run-pass/type-id-higher-rank.rs b/src/test/run-pass/type-id-higher-rank.rs index 2865b5d04e5..2a6708dc999 100644 --- a/src/test/run-pass/type-id-higher-rank.rs +++ b/src/test/run-pass/type-id-higher-rank.rs @@ -11,9 +11,6 @@ // Test that type IDs correctly account for higher-rank lifetimes // Also acts as a regression test for an ICE (issue #19791) - -#![feature(core)] - use std::any::{Any, TypeId}; struct Struct<'a>(&'a ()); diff --git a/src/test/run-pass/utf8_chars.rs b/src/test/run-pass/utf8_chars.rs index 2602e395bcc..b2550e77a8a 100644 --- a/src/test/run-pass/utf8_chars.rs +++ b/src/test/run-pass/utf8_chars.rs @@ -7,9 +7,6 @@ // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. -// - -#![feature(core)] use std::str; diff --git a/src/test/run-pass/variance-intersection-of-ref-and-opt-ref.rs b/src/test/run-pass/variance-intersection-of-ref-and-opt-ref.rs index af06fe38136..948d68e0ccd 100644 --- a/src/test/run-pass/variance-intersection-of-ref-and-opt-ref.rs +++ b/src/test/run-pass/variance-intersection-of-ref-and-opt-ref.rs @@ -13,9 +13,7 @@ // us from approximating the lifetimes of `field1` and `field2` to a // common intersection. - #![allow(dead_code)] -#![feature(core)] struct List<'l> { field1: &'l i32, diff --git a/src/test/run-pass/variance-vec-covariant.rs b/src/test/run-pass/variance-vec-covariant.rs index 89927b7b55b..caec6df5a4d 100644 --- a/src/test/run-pass/variance-vec-covariant.rs +++ b/src/test/run-pass/variance-vec-covariant.rs @@ -10,9 +10,7 @@ // Test that vec is now covariant in its argument type. - #![allow(dead_code)] -#![feature(core)] fn foo<'a,'b>(v1: Vec<&'a i32>, v2: Vec<&'b i32>) -> i32 { bar(v1, v2).cloned().unwrap_or(0) // only type checks if we can intersect 'a and 'b diff --git a/src/test/rustdoc/auxiliary/rustdoc-default-impl.rs b/src/test/rustdoc/auxiliary/rustdoc-default-impl.rs index 34a1331353d..c346c7323d3 100644 --- a/src/test/rustdoc/auxiliary/rustdoc-default-impl.rs +++ b/src/test/rustdoc/auxiliary/rustdoc-default-impl.rs @@ -9,7 +9,6 @@ // except according to those terms. #![feature(optin_builtin_traits)] -#![feature(core)] pub mod bar { use std::marker; diff --git a/src/test/ui/auxiliary/svh-a-change-type-static.rs b/src/test/ui/auxiliary/svh-a-change-type-static.rs index 62f7986f1c3..0d4c76abb10 100644 --- a/src/test/ui/auxiliary/svh-a-change-type-static.rs +++ b/src/test/ui/auxiliary/svh-a-change-type-static.rs @@ -14,7 +14,6 @@ //! (#14132). #![crate_name = "a"] -#![feature(core)] macro_rules! three { () => { 3 } From 8cee487eb305a9ce1cdd7c6f7875c32be02da194 Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 24 Jul 2018 23:32:20 +0100 Subject: [PATCH 26/38] Fix rustdoc test --- src/test/rustdoc/const-evalutation-ice.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/rustdoc/const-evalutation-ice.rs b/src/test/rustdoc/const-evalutation-ice.rs index 9fed67ee583..000ed709a8a 100644 --- a/src/test/rustdoc/const-evalutation-ice.rs +++ b/src/test/rustdoc/const-evalutation-ice.rs @@ -10,8 +10,6 @@ // Just check if we don't get an ICE for the _S type. -#![feature(const_size_of)] - use std::cell::Cell; use std::mem; From 319b052357f3c6bb2cc6a911f1f7e7ce82e2b85c Mon Sep 17 00:00:00 2001 From: varkor Date: Wed, 25 Jul 2018 14:27:27 +0100 Subject: [PATCH 27/38] Fix stage 2 tests --- src/liballoc/lib.rs | 8 +++----- src/liballoc/tests/lib.rs | 2 -- src/libcore/tests/lib.rs | 1 - src/libstd/lib.rs | 2 +- .../allow-warnings-cmdline-stability/bar.rs | 2 +- .../allow-warnings-cmdline-stability/foo.rs | 2 +- src/test/run-make-fulldeps/link-path-order/main.rs | 2 +- .../panic-runtime/abort-link-to-unwinding-crates.rs | 1 + src/test/run-pass/panic-runtime/abort.rs | 1 + src/test/run-pass/panic-runtime/link-to-abort.rs | 1 + src/tools/compiletest/src/main.rs | 1 - 11 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index aaafcd84dd7..d1b607bbe9b 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -74,9 +74,10 @@ #![needs_allocator] #![deny(missing_debug_implementations)] -#![cfg_attr(test, allow(deprecated))] // rand +#![cfg_attr(not(test), feature(fn_traits))] #![cfg_attr(not(test), feature(generator_trait))] -#![cfg_attr(test, feature(rand, test))] +#![cfg_attr(test, feature(test))] + #![feature(allocator_api)] #![feature(allow_internal_unstable)] #![feature(arbitrary_self_types)] @@ -117,9 +118,6 @@ #![feature(rustc_const_unstable)] #![feature(const_vec_new)] -#![cfg_attr(not(test), feature(fn_traits))] -#![cfg_attr(test, feature(test))] - // Allow testing this library #[cfg(test)] diff --git a/src/liballoc/tests/lib.rs b/src/liballoc/tests/lib.rs index ad1e5807562..c12c7a81f79 100644 --- a/src/liballoc/tests/lib.rs +++ b/src/liballoc/tests/lib.rs @@ -17,9 +17,7 @@ #![feature(exact_size_is_empty)] #![feature(pattern)] #![feature(slice_sort_by_cached_key)] -#![feature(splice)] #![feature(str_escape)] -#![feature(string_retain)] #![feature(try_reserve)] #![feature(unboxed_closures)] #![feature(exact_chunks)] diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index 87bb623a5b1..b77e9e49773 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -26,7 +26,6 @@ #![feature(refcell_map_split)] #![feature(refcell_replace_swap)] #![feature(slice_patterns)] -#![feature(slice_rotate)] #![feature(sort_internals)] #![feature(specialization)] #![feature(step_trait)] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 4f462658eb6..444bbe15e11 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -232,6 +232,7 @@ // std is implemented with unstable features, many of which are internal // compiler details that will never be stable +#![cfg_attr(test, feature(test, update_panic_count))] #![feature(alloc)] #![feature(alloc_error_handler)] #![feature(alloc_system)] @@ -302,7 +303,6 @@ #![feature(doc_cfg)] #![feature(doc_masked)] #![feature(doc_spotlight)] -#![cfg_attr(test, feature(update_panic_count))] #![cfg_attr(windows, feature(used))] #![feature(doc_alias)] #![feature(doc_keyword)] diff --git a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs index 5eb62316d81..1dad2ed9052 100644 --- a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs +++ b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs @@ -12,4 +12,4 @@ #![feature(staged_api)] #![unstable(feature = "unstable_test_feature", issue = "0")] -pub fn baz() { } +pub fn baz() {} diff --git a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs index a36cc474c2b..b728136a89e 100644 --- a/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs +++ b/src/test/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(test_feature)] +#![feature(unstable_test_feature)] extern crate bar; diff --git a/src/test/run-make-fulldeps/link-path-order/main.rs b/src/test/run-make-fulldeps/link-path-order/main.rs index aaac3927f1c..f3502e8bcd4 100644 --- a/src/test/run-make-fulldeps/link-path-order/main.rs +++ b/src/test/run-make-fulldeps/link-path-order/main.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(libc, exit_status)] +#![feature(libc)] extern crate libc; diff --git a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs index 6917c2db3b4..731603606e4 100644 --- a/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs +++ b/src/test/run-pass/panic-runtime/abort-link-to-unwinding-crates.rs @@ -13,6 +13,7 @@ // no-prefer-dynamic // ignore-cloudabi no processes // ignore-emscripten no processes +// ignore-macos extern crate exit_success_if_unwind; diff --git a/src/test/run-pass/panic-runtime/abort.rs b/src/test/run-pass/panic-runtime/abort.rs index 3a3b86aec02..4692ad3ca2f 100644 --- a/src/test/run-pass/panic-runtime/abort.rs +++ b/src/test/run-pass/panic-runtime/abort.rs @@ -12,6 +12,7 @@ // no-prefer-dynamic // ignore-cloudabi no processes // ignore-emscripten no processes +// ignore-macos use std::process::Command; use std::env; diff --git a/src/test/run-pass/panic-runtime/link-to-abort.rs b/src/test/run-pass/panic-runtime/link-to-abort.rs index 1b9a6cf8500..9f5407e4526 100644 --- a/src/test/run-pass/panic-runtime/link-to-abort.rs +++ b/src/test/run-pass/panic-runtime/link-to-abort.rs @@ -10,6 +10,7 @@ // compile-flags:-C panic=abort // no-prefer-dynamic +// ignore-macos #![feature(panic_abort)] diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 2bfc1ece095..c1d3df79222 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -10,7 +10,6 @@ #![crate_name = "compiletest"] #![feature(test)] -#![feature(slice_rotate)] #![deny(warnings)] extern crate diff; From e5d5e6a5604dbc14090e1a5919b6eac522442f6e Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 26 Jul 2018 23:44:36 +0100 Subject: [PATCH 28/38] Fix outdated handling of GetLangItems --- src/librustc/dep_graph/dep_node.rs | 2 +- src/librustc/ty/context.rs | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index f099325dfc1..66d6a434668 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -617,7 +617,7 @@ define_dep_nodes!( <'tcx> [] ExternModStmtCnum(DefId), [input] GetLibFeatures, [] DefinedLibFeatures(CrateNum), - [input] GetLangItems, + [eval_always] GetLangItems, [] DefinedLangItems(CrateNum), [] MissingLangItems(CrateNum), [] VisibleParentMap, diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 21f482ecf39..a35bd3c012f 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -2851,15 +2851,7 @@ pub fn provide(providers: &mut ty::query::Providers) { }; providers.get_lang_items = |tcx, id| { assert_eq!(id, LOCAL_CRATE); - // FIXME(#42293) Right now we insert a `with_ignore` node in the dep - // graph here to ignore the fact that `get_lang_items` below depends on - // the entire crate. For now this'll prevent false positives of - // recompiling too much when anything changes. - // - // Once red/green incremental compilation lands we should be able to - // remove this because while the crate changes often the lint level map - // will change rarely. - tcx.dep_graph.with_ignore(|| Lrc::new(middle::lang_items::collect(tcx))) + Lrc::new(middle::lang_items::collect(tcx)) }; providers.freevars = |tcx, id| tcx.gcx.freevars.get(&id).cloned(); providers.maybe_unused_trait_import = |tcx, id| { From bd90137b94471eabe499b3775315bdb594ea2a95 Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 27 Jul 2018 00:06:57 +0100 Subject: [PATCH 29/38] Improve query efficiency --- src/librustc/dep_graph/dep_node.rs | 2 +- src/librustc/middle/lib_features.rs | 8 +++++--- src/librustc/middle/stability.rs | 2 +- src/librustc/ty/context.rs | 3 +-- src/librustc_metadata/decoder.rs | 6 ++---- src/librustc_metadata/encoder.rs | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index 66d6a434668..b7281cf0445 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -615,7 +615,7 @@ define_dep_nodes!( <'tcx> [input] CrateName(CrateNum), [] ItemChildren(DefId), [] ExternModStmtCnum(DefId), - [input] GetLibFeatures, + [eval_always] GetLibFeatures, [] DefinedLibFeatures(CrateNum), [eval_always] GetLangItems, [] DefinedLangItems(CrateNum), diff --git a/src/librustc/middle/lib_features.rs b/src/librustc/middle/lib_features.rs index b30341103e4..47c6bfbe694 100644 --- a/src/librustc/middle/lib_features.rs +++ b/src/librustc/middle/lib_features.rs @@ -37,10 +37,12 @@ impl LibFeatures { } } - pub fn iter(&self) -> Vec<(Symbol, Option)> { - self.stable.iter().map(|(f, s)| (*f, Some(*s))) + pub fn to_vec(&self) -> Vec<(Symbol, Option)> { + let mut all_features: Vec<_> = self.stable.iter().map(|(f, s)| (*f, Some(*s))) .chain(self.unstable.iter().map(|f| (*f, None))) - .collect() + .collect(); + all_features.sort_unstable_by_key(|f| f.0.as_str()); + all_features } } diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index f2296c04acc..7fd788ff2ea 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -841,7 +841,7 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { // FIXME: only remove `libc` when `stdbuild` is active. remaining_lib_features.remove(&Symbol::intern("libc")); - for (feature, stable) in tcx.lib_features().iter() { + for (feature, stable) in tcx.lib_features().to_vec() { if let Some(since) = stable { if let Some(span) = remaining_lib_features.get(&feature) { // Warn if the user has enabled an already-stable lib feature. diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index a35bd3c012f..bb14af29a7a 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -2846,8 +2846,7 @@ pub fn provide(providers: &mut ty::query::Providers) { }; providers.get_lib_features = |tcx, id| { assert_eq!(id, LOCAL_CRATE); - // FIXME(#42293): see comment below. - tcx.dep_graph.with_ignore(|| Lrc::new(middle::lib_features::collect(tcx))) + Lrc::new(middle::lib_features::collect(tcx)) }; providers.get_lang_items = |tcx, id| { assert_eq!(id, LOCAL_CRATE); diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 032f8bdd069..45a61ec3308 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -647,12 +647,10 @@ impl<'a, 'tcx> CrateMetadata { /// Iterates over all the stability attributes in the given crate. pub fn get_lib_features(&self) -> Vec<(ast::Name, Option)> { - let mut features: Vec<_> = self.root + self.root .lib_features .decode(self) - .collect(); - features.sort_unstable_by_key(|f| f.0.as_str()); - features + .collect() } /// Iterates over the language items in the given crate. diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 9bb5a849bc7..96d6c5b75f4 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -1466,7 +1466,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { fn encode_lib_features(&mut self, _: ()) -> LazySeq<(ast::Name, Option)> { let tcx = self.tcx; let lib_features = tcx.lib_features(); - self.lazy_seq(lib_features.iter()) + self.lazy_seq(lib_features.to_vec()) } fn encode_lang_items(&mut self, _: ()) -> LazySeq<(DefIndex, usize)> { From d19832105e60195d82326a2468956f4d6a79f460 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 2 Aug 2018 15:53:18 +0100 Subject: [PATCH 30/38] Remove bad features after rebase --- src/librustc_mir/lib.rs | 1 - src/librustdoc/lib.rs | 1 - src/libstd/lib.rs | 1 - 3 files changed, 3 deletions(-) diff --git a/src/librustc_mir/lib.rs b/src/librustc_mir/lib.rs index d60b453e0d8..05c843096d2 100644 --- a/src/librustc_mir/lib.rs +++ b/src/librustc_mir/lib.rs @@ -25,7 +25,6 @@ Rust MIR: a lowered representation of Rust. Also: an experiment! #![feature(const_fn)] #![feature(core_intrinsics)] #![feature(decl_macro)] -#![feature(in_band_lifetimes)] #![feature(macro_vis_matcher)] #![feature(exhaustive_patterns)] #![feature(range_contains)] diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 228a1b9b0cd..cc8af789f47 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -13,7 +13,6 @@ html_root_url = "https://doc.rust-lang.org/nightly/", html_playground_url = "https://play.rust-lang.org/")] -#![feature(ascii_ctype)] #![feature(rustc_private)] #![feature(box_patterns)] #![feature(box_syntax)] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 444bbe15e11..2f18719b9eb 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -243,7 +243,6 @@ #![feature(align_offset)] #![feature(arbitrary_self_types)] #![feature(array_error_internals)] -#![feature(ascii_ctype)] #![feature(asm)] #![feature(attr_literals)] #![feature(box_syntax)] From 60ad63640f61c457e94fefa72f0ece65c6a6edd5 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 2 Aug 2018 17:31:54 +0100 Subject: [PATCH 31/38] Add an error when declaring features that are stable in the current Rust edition --- src/libsyntax/diagnostic_list.rs | 14 ++++++++ src/libsyntax/feature_gate.rs | 60 ++++++++++++++++++++------------ src/test/ui/E0705.rs | 18 ++++++++++ src/test/ui/E0705.stderr | 9 +++++ 4 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 src/test/ui/E0705.rs create mode 100644 src/test/ui/E0705.stderr diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index 8534969c623..bfbe9ef1fee 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -374,6 +374,20 @@ and likely to change in the future. "##, +E0705: r##" +A `#![feature]` attribute was declared for a feature that is stable in +the current edition. + +Erroneous code example: + +```compile_fail,E0705 +#![allow(rust_2018_preview)] +#![feature(raw_identifiers)] // error: the feature `raw_identifiers` is + // included in the Rust 2018 edition +``` + +"##, + } register_diagnostics! { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 833b6953dcd..0014fd5ae48 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -25,6 +25,7 @@ use self::AttributeType::*; use self::AttributeGate::*; +use rustc_data_structures::fx::FxHashMap; use rustc_target::spec::abi::Abi; use ast::{self, NodeId, PatKind, RangeEnd}; use attr; @@ -1900,10 +1901,13 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], let mut feature_checker = FeatureChecker::default(); - for &(.., f_edition, set) in ACTIVE_FEATURES.iter() { + let mut edition_enabled_features = FxHashMap(); + + for &(name, .., f_edition, set) in ACTIVE_FEATURES.iter() { if let Some(f_edition) = f_edition { if f_edition <= crate_edition { set(&mut features, DUMMY_SP); + edition_enabled_features.insert(Symbol::intern(name), crate_edition); } } } @@ -1931,10 +1935,40 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], continue }; + if let Some(edition) = ALL_EDITIONS.iter().find(|e| name == e.feature_name()) { + if *edition <= crate_edition { + continue + } + + for &(name, .., f_edition, set) in ACTIVE_FEATURES.iter() { + if let Some(f_edition) = f_edition { + if f_edition <= *edition { + // FIXME(Manishearth) there is currently no way to set + // lib features by edition + set(&mut features, DUMMY_SP); + edition_enabled_features.insert(Symbol::intern(name), *edition); + } + } + } + + continue + } + if let Some((.., set)) = ACTIVE_FEATURES.iter().find(|f| name == f.0) { - set(&mut features, mi.span); - feature_checker.collect(&features, mi.span); - features.declared_lang_features.push((name, mi.span, None)); + if let Some(edition) = edition_enabled_features.get(&name) { + struct_span_err!( + span_handler, + mi.span, + E0705, + "the feature `{}` is included in the Rust {} edition", + name, + edition, + ).emit(); + } else { + set(&mut features, mi.span); + feature_checker.collect(&features, mi.span); + features.declared_lang_features.push((name, mi.span, None)); + } continue } @@ -1951,24 +1985,6 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], continue } - if let Some(edition) = ALL_EDITIONS.iter().find(|e| name == e.feature_name()) { - if *edition <= crate_edition { - continue - } - - for &(.., f_edition, set) in ACTIVE_FEATURES.iter() { - if let Some(f_edition) = f_edition { - if *edition >= f_edition { - // FIXME(Manishearth) there is currently no way to set - // lib features by edition - set(&mut features, DUMMY_SP); - } - } - } - - continue - } - features.declared_lib_features.push((name, mi.span)); } } diff --git a/src/test/ui/E0705.rs b/src/test/ui/E0705.rs new file mode 100644 index 00000000000..743c108bb68 --- /dev/null +++ b/src/test/ui/E0705.rs @@ -0,0 +1,18 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(rust_2018_preview)] +#![feature(raw_identifiers)] +//~^ ERROR the feature `raw_identifiers` is included in the Rust 2018 edition + +fn main() { + let foo = 0; + let bar = r#foo; +} diff --git a/src/test/ui/E0705.stderr b/src/test/ui/E0705.stderr new file mode 100644 index 00000000000..cab443a2137 --- /dev/null +++ b/src/test/ui/E0705.stderr @@ -0,0 +1,9 @@ +error[E0705]: the feature `raw_identifiers` is included in the Rust 2018 edition + --> $DIR/E0705.rs:12:12 + | +LL | #![feature(raw_identifiers)] + | ^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0705`. From 5815a8428090a9c85d4efec8bb6ea83b5aa97cf6 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 2 Aug 2018 17:36:08 +0100 Subject: [PATCH 32/38] Remove references to unknown feature `io` --- src/test/run-pass/issue-13304.rs | 2 -- src/test/run-pass/issue-14456.rs | 2 -- src/test/run-pass/issue-17322.rs | 2 +- src/test/run-pass/issue-4333.rs | 2 -- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/test/run-pass/issue-13304.rs b/src/test/run-pass/issue-13304.rs index 1676281aa2f..36036ae241e 100644 --- a/src/test/run-pass/issue-13304.rs +++ b/src/test/run-pass/issue-13304.rs @@ -11,8 +11,6 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -#![feature(io)] - use std::env; use std::io::prelude::*; use std::io; diff --git a/src/test/run-pass/issue-14456.rs b/src/test/run-pass/issue-14456.rs index bfedc52919c..601fafbf02e 100644 --- a/src/test/run-pass/issue-14456.rs +++ b/src/test/run-pass/issue-14456.rs @@ -11,8 +11,6 @@ // ignore-cloudabi no processes // ignore-emscripten no processes -#![feature(io)] - use std::env; use std::io::prelude::*; use std::io; diff --git a/src/test/run-pass/issue-17322.rs b/src/test/run-pass/issue-17322.rs index 47dfe878c26..c94345f794d 100644 --- a/src/test/run-pass/issue-17322.rs +++ b/src/test/run-pass/issue-17322.rs @@ -10,7 +10,7 @@ // pretty-expanded FIXME #23616 -#![feature(box_syntax, io)] +#![feature(box_syntax)] use std::io::{self, Write}; diff --git a/src/test/run-pass/issue-4333.rs b/src/test/run-pass/issue-4333.rs index 48753e15a70..a84d7f3fe82 100644 --- a/src/test/run-pass/issue-4333.rs +++ b/src/test/run-pass/issue-4333.rs @@ -10,8 +10,6 @@ // pretty-expanded FIXME #23616 -#![feature(io)] - use std::io; pub fn main() { From c157ec87ed0c565e98c2887a361c1d7517949e1f Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 2 Aug 2018 19:33:24 +0100 Subject: [PATCH 33/38] Fix 2018 edition tests --- src/libcore/tests/lib.rs | 1 - src/libsyntax/diagnostic_list.rs | 2 +- .../rfc-2126-extern-absolute-paths/non-existent-1.rs | 2 -- .../rfc-2126-extern-absolute-paths/non-existent-2.rs | 2 -- .../rfc-2126-extern-absolute-paths/non-existent-3.rs | 2 -- .../rfc-2126-extern-absolute-paths/single-segment.rs | 3 --- .../save-analysis-rfc2126/extern_absolute_paths.rs | 2 -- src/test/run-pass/auxiliary/edition-kw-macro-2018.rs | 2 -- src/test/run-pass/edition-keywords-2018-2015.rs | 2 -- src/test/run-pass/edition-keywords-2018-2018.rs | 2 -- src/test/run-pass/rfc-2126-extern-absolute-paths/basic.rs | 2 -- src/test/run-pass/rfc-2126-extern-absolute-paths/test.rs | 5 +---- src/test/ui/auxiliary/edition-kw-macro-2018.rs | 1 - src/test/ui/edition-keywords-2018-2015-expansion.rs | 1 - src/test/ui/edition-keywords-2018-2015-parsing.rs | 2 -- src/test/ui/edition-keywords-2018-2015-parsing.stderr | 8 ++++---- src/test/ui/edition-keywords-2018-2018-expansion.rs | 2 -- src/test/ui/edition-keywords-2018-2018-expansion.stderr | 2 +- src/test/ui/edition-keywords-2018-2018-parsing.rs | 2 -- src/test/ui/edition-keywords-2018-2018-parsing.stderr | 8 ++++---- 20 files changed, 11 insertions(+), 42 deletions(-) diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index b77e9e49773..fc92a5a2225 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -13,7 +13,6 @@ #![feature(core_private_bignum)] #![feature(core_private_diy_float)] #![feature(dec2flt)] -#![feature(decode_utf8)] #![feature(euclidean_division)] #![feature(exact_size_is_empty)] #![feature(fixed_size_array)] diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index bfbe9ef1fee..91265623270 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -381,7 +381,7 @@ the current edition. Erroneous code example: ```compile_fail,E0705 -#![allow(rust_2018_preview)] +#![feature(rust_2018_preview)] #![feature(raw_identifiers)] // error: the feature `raw_identifiers` is // included in the Rust 2018 edition ``` diff --git a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-1.rs b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-1.rs index e04bb27f435..826bf675bd6 100644 --- a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-1.rs +++ b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-1.rs @@ -10,8 +10,6 @@ // edition:2018 -#![feature(extern_absolute_paths)] - use xcrate::S; //~ ERROR can't find crate for `xcrate` fn main() {} diff --git a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-2.rs b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-2.rs index bebf0236bb4..053bf92f4d1 100644 --- a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-2.rs +++ b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-2.rs @@ -10,8 +10,6 @@ // edition:2018 -#![feature(extern_absolute_paths)] - fn main() { let s = ::xcrate::S; //~ ERROR can't find crate for `xcrate` } diff --git a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-3.rs b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-3.rs index 5906a0719c8..1b9e5a75e83 100644 --- a/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-3.rs +++ b/src/test/compile-fail/rfc-2126-extern-absolute-paths/non-existent-3.rs @@ -10,8 +10,6 @@ // edition:2018 -#![feature(extern_absolute_paths)] - use ycrate; //~ ERROR can't find crate for `ycrate` fn main() {} diff --git a/src/test/compile-fail/rfc-2126-extern-absolute-paths/single-segment.rs b/src/test/compile-fail/rfc-2126-extern-absolute-paths/single-segment.rs index 7111176dbd9..e9de0f01b30 100644 --- a/src/test/compile-fail/rfc-2126-extern-absolute-paths/single-segment.rs +++ b/src/test/compile-fail/rfc-2126-extern-absolute-paths/single-segment.rs @@ -11,9 +11,6 @@ // aux-build:xcrate.rs // edition:2018 -#![feature(crate_in_paths)] -#![feature(extern_absolute_paths)] - use crate; //~ ERROR unresolved import `crate` //~^ NOTE crate root imports need to be explicitly named: `use crate as name;` use *; //~ ERROR unresolved import `*` diff --git a/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_absolute_paths.rs b/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_absolute_paths.rs index b1fe535766d..7e5343df841 100644 --- a/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_absolute_paths.rs +++ b/src/test/run-make-fulldeps/save-analysis-rfc2126/extern_absolute_paths.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(extern_absolute_paths)] - use krate2::hello; fn main() { diff --git a/src/test/run-pass/auxiliary/edition-kw-macro-2018.rs b/src/test/run-pass/auxiliary/edition-kw-macro-2018.rs index 415988586a0..36562fd0049 100644 --- a/src/test/run-pass/auxiliary/edition-kw-macro-2018.rs +++ b/src/test/run-pass/auxiliary/edition-kw-macro-2018.rs @@ -10,8 +10,6 @@ // edition:2018 -#![feature(raw_identifiers)] - #[macro_export] macro_rules! produces_async { () => (pub fn async() {}) diff --git a/src/test/run-pass/edition-keywords-2018-2015.rs b/src/test/run-pass/edition-keywords-2018-2015.rs index 4c22667d0bf..7d5de00cdb8 100644 --- a/src/test/run-pass/edition-keywords-2018-2015.rs +++ b/src/test/run-pass/edition-keywords-2018-2015.rs @@ -11,8 +11,6 @@ // edition:2018 // aux-build:edition-kw-macro-2015.rs -#![feature(raw_identifiers)] - #[macro_use] extern crate edition_kw_macro_2015; diff --git a/src/test/run-pass/edition-keywords-2018-2018.rs b/src/test/run-pass/edition-keywords-2018-2018.rs index 2a98b904da5..6462fc4da60 100644 --- a/src/test/run-pass/edition-keywords-2018-2018.rs +++ b/src/test/run-pass/edition-keywords-2018-2018.rs @@ -11,8 +11,6 @@ // edition:2018 // aux-build:edition-kw-macro-2018.rs -#![feature(raw_identifiers)] - #[macro_use] extern crate edition_kw_macro_2018; diff --git a/src/test/run-pass/rfc-2126-extern-absolute-paths/basic.rs b/src/test/run-pass/rfc-2126-extern-absolute-paths/basic.rs index dfa583415f7..93384b81e4a 100644 --- a/src/test/run-pass/rfc-2126-extern-absolute-paths/basic.rs +++ b/src/test/run-pass/rfc-2126-extern-absolute-paths/basic.rs @@ -11,8 +11,6 @@ // aux-build:xcrate.rs // edition:2018 -#![feature(extern_absolute_paths)] - use xcrate::Z; fn f() { diff --git a/src/test/run-pass/rfc-2126-extern-absolute-paths/test.rs b/src/test/run-pass/rfc-2126-extern-absolute-paths/test.rs index 6317dc17652..cace83d6274 100644 --- a/src/test/run-pass/rfc-2126-extern-absolute-paths/test.rs +++ b/src/test/run-pass/rfc-2126-extern-absolute-paths/test.rs @@ -15,8 +15,5 @@ // edition:2018 // compile-flags: --test -#![feature(extern_absolute_paths)] - #[test] -fn test() { -} +fn test() {} diff --git a/src/test/ui/auxiliary/edition-kw-macro-2018.rs b/src/test/ui/auxiliary/edition-kw-macro-2018.rs index d42014766ec..85ef15858fe 100644 --- a/src/test/ui/auxiliary/edition-kw-macro-2018.rs +++ b/src/test/ui/auxiliary/edition-kw-macro-2018.rs @@ -10,7 +10,6 @@ // edition:2018 -#![feature(raw_identifiers)] #![allow(async_idents)] #[macro_export] diff --git a/src/test/ui/edition-keywords-2018-2015-expansion.rs b/src/test/ui/edition-keywords-2018-2015-expansion.rs index be22d8b9b01..911dcd855aa 100644 --- a/src/test/ui/edition-keywords-2018-2015-expansion.rs +++ b/src/test/ui/edition-keywords-2018-2015-expansion.rs @@ -12,7 +12,6 @@ // aux-build:edition-kw-macro-2015.rs // compile-pass -#![feature(raw_identifiers)] #![allow(async_idents)] #[macro_use] diff --git a/src/test/ui/edition-keywords-2018-2015-parsing.rs b/src/test/ui/edition-keywords-2018-2015-parsing.rs index 713da57f7e2..02b061f8cbc 100644 --- a/src/test/ui/edition-keywords-2018-2015-parsing.rs +++ b/src/test/ui/edition-keywords-2018-2015-parsing.rs @@ -11,8 +11,6 @@ // edition:2018 // aux-build:edition-kw-macro-2015.rs -#![feature(raw_identifiers)] - #[macro_use] extern crate edition_kw_macro_2015; diff --git a/src/test/ui/edition-keywords-2018-2015-parsing.stderr b/src/test/ui/edition-keywords-2018-2015-parsing.stderr index ceab5ea730e..02e7d5b7cd0 100644 --- a/src/test/ui/edition-keywords-2018-2015-parsing.stderr +++ b/src/test/ui/edition-keywords-2018-2015-parsing.stderr @@ -1,23 +1,23 @@ error: expected identifier, found reserved keyword `async` - --> $DIR/edition-keywords-2018-2015-parsing.rs:20:13 + --> $DIR/edition-keywords-2018-2015-parsing.rs:18:13 | LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async` | ^^^^^ expected identifier, found reserved keyword error: expected identifier, found reserved keyword `async` - --> $DIR/edition-keywords-2018-2015-parsing.rs:30:13 + --> $DIR/edition-keywords-2018-2015-parsing.rs:28:13 | LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async` | ^^^^^ expected identifier, found reserved keyword error: no rules expected the token `r#async` - --> $DIR/edition-keywords-2018-2015-parsing.rs:24:31 + --> $DIR/edition-keywords-2018-2015-parsing.rs:22:31 | LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async` | ^^^^^^^ error: no rules expected the token `async` - --> $DIR/edition-keywords-2018-2015-parsing.rs:25:35 + --> $DIR/edition-keywords-2018-2015-parsing.rs:23:35 | LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async` | ^^^^^ diff --git a/src/test/ui/edition-keywords-2018-2018-expansion.rs b/src/test/ui/edition-keywords-2018-2018-expansion.rs index a1ae1b5d004..81bef913ac6 100644 --- a/src/test/ui/edition-keywords-2018-2018-expansion.rs +++ b/src/test/ui/edition-keywords-2018-2018-expansion.rs @@ -11,8 +11,6 @@ // edition:2018 // aux-build:edition-kw-macro-2018.rs -#![feature(raw_identifiers)] - #[macro_use] extern crate edition_kw_macro_2018; diff --git a/src/test/ui/edition-keywords-2018-2018-expansion.stderr b/src/test/ui/edition-keywords-2018-2018-expansion.stderr index 91d0b2d30b5..c6e0927a3a4 100644 --- a/src/test/ui/edition-keywords-2018-2018-expansion.stderr +++ b/src/test/ui/edition-keywords-2018-2018-expansion.stderr @@ -1,5 +1,5 @@ error: expected identifier, found reserved keyword `async` - --> $DIR/edition-keywords-2018-2018-expansion.rs:20:5 + --> $DIR/edition-keywords-2018-2018-expansion.rs:18:5 | LL | produces_async! {} //~ ERROR expected identifier, found reserved keyword `async` | ^^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword diff --git a/src/test/ui/edition-keywords-2018-2018-parsing.rs b/src/test/ui/edition-keywords-2018-2018-parsing.rs index 263ec95caa7..565c2f2dc74 100644 --- a/src/test/ui/edition-keywords-2018-2018-parsing.rs +++ b/src/test/ui/edition-keywords-2018-2018-parsing.rs @@ -11,8 +11,6 @@ // edition:2018 // aux-build:edition-kw-macro-2018.rs -#![feature(raw_identifiers)] - #[macro_use] extern crate edition_kw_macro_2018; diff --git a/src/test/ui/edition-keywords-2018-2018-parsing.stderr b/src/test/ui/edition-keywords-2018-2018-parsing.stderr index e48aac0a2bb..435e395c291 100644 --- a/src/test/ui/edition-keywords-2018-2018-parsing.stderr +++ b/src/test/ui/edition-keywords-2018-2018-parsing.stderr @@ -1,23 +1,23 @@ error: expected identifier, found reserved keyword `async` - --> $DIR/edition-keywords-2018-2018-parsing.rs:20:13 + --> $DIR/edition-keywords-2018-2018-parsing.rs:18:13 | LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async` | ^^^^^ expected identifier, found reserved keyword error: expected identifier, found reserved keyword `async` - --> $DIR/edition-keywords-2018-2018-parsing.rs:30:13 + --> $DIR/edition-keywords-2018-2018-parsing.rs:28:13 | LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async` | ^^^^^ expected identifier, found reserved keyword error: no rules expected the token `r#async` - --> $DIR/edition-keywords-2018-2018-parsing.rs:24:31 + --> $DIR/edition-keywords-2018-2018-parsing.rs:22:31 | LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async` | ^^^^^^^ error: no rules expected the token `async` - --> $DIR/edition-keywords-2018-2018-parsing.rs:25:35 + --> $DIR/edition-keywords-2018-2018-parsing.rs:23:35 | LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async` | ^^^^^ From d027cc8ee1d07e93e2a7b959db54099fb1f21edd Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 3 Aug 2018 21:12:57 +0100 Subject: [PATCH 34/38] Change feature edition error into a warning --- src/libsyntax/feature_gate.rs | 2 +- src/test/ui/E0705.rs | 4 +++- src/test/ui/E0705.stderr | 7 ++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 0014fd5ae48..193e560893f 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1956,7 +1956,7 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute], if let Some((.., set)) = ACTIVE_FEATURES.iter().find(|f| name == f.0) { if let Some(edition) = edition_enabled_features.get(&name) { - struct_span_err!( + struct_span_warn!( span_handler, mi.span, E0705, diff --git a/src/test/ui/E0705.rs b/src/test/ui/E0705.rs index 743c108bb68..a0ce95e3e02 100644 --- a/src/test/ui/E0705.rs +++ b/src/test/ui/E0705.rs @@ -8,9 +8,11 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// compile-pass + #![feature(rust_2018_preview)] #![feature(raw_identifiers)] -//~^ ERROR the feature `raw_identifiers` is included in the Rust 2018 edition +//~^ WARN the feature `raw_identifiers` is included in the Rust 2018 edition fn main() { let foo = 0; diff --git a/src/test/ui/E0705.stderr b/src/test/ui/E0705.stderr index cab443a2137..ebb8dd4975d 100644 --- a/src/test/ui/E0705.stderr +++ b/src/test/ui/E0705.stderr @@ -1,9 +1,6 @@ -error[E0705]: the feature `raw_identifiers` is included in the Rust 2018 edition - --> $DIR/E0705.rs:12:12 +warning[E0705]: the feature `raw_identifiers` is included in the Rust 2018 edition + --> $DIR/E0705.rs:14:12 | LL | #![feature(raw_identifiers)] | ^^^^^^^^^^^^^^^ -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0705`. From 8d7638fa69134eee7f43a27b1788aa5767f8642b Mon Sep 17 00:00:00 2001 From: varkor Date: Sun, 5 Aug 2018 15:55:18 +0100 Subject: [PATCH 35/38] Fix failure on msvc --- src/libpanic_unwind/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libpanic_unwind/lib.rs b/src/libpanic_unwind/lib.rs index 5c320bb369e..2abdf7cee63 100644 --- a/src/libpanic_unwind/lib.rs +++ b/src/libpanic_unwind/lib.rs @@ -39,7 +39,6 @@ #![feature(staged_api)] #![feature(std_internals)] #![feature(unwind_attributes)] -#![cfg_attr(target_env = "msvc", feature(raw))] #![panic_runtime] #![feature(panic_runtime)] From a8b5b95d65cec78a0eda6ab2b451f92d12e8bfe5 Mon Sep 17 00:00:00 2001 From: varkor Date: Sun, 5 Aug 2018 17:43:30 +0100 Subject: [PATCH 36/38] Fix diagnostic_list error --- src/libsyntax/diagnostic_list.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs index 91265623270..15abad555f4 100644 --- a/src/libsyntax/diagnostic_list.rs +++ b/src/libsyntax/diagnostic_list.rs @@ -380,7 +380,7 @@ the current edition. Erroneous code example: -```compile_fail,E0705 +```ignore (limited to a warning during 2018 edition development) #![feature(rust_2018_preview)] #![feature(raw_identifiers)] // error: the feature `raw_identifiers` is // included in the Rust 2018 edition From 7e7622a714a544225f7051ecaef4a86d1ee84347 Mon Sep 17 00:00:00 2001 From: varkor Date: Sun, 5 Aug 2018 22:48:49 +0100 Subject: [PATCH 37/38] Fix WASM tests --- src/test/run-make/wasm-custom-section/bar.rs | 1 - src/test/run-make/wasm-custom-section/foo.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/test/run-make/wasm-custom-section/bar.rs b/src/test/run-make/wasm-custom-section/bar.rs index ed537280e6c..6b165f1f700 100644 --- a/src/test/run-make/wasm-custom-section/bar.rs +++ b/src/test/run-make/wasm-custom-section/bar.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_type = "cdylib"] -#![feature(wasm_custom_section)] #![deny(warnings)] extern crate foo; diff --git a/src/test/run-make/wasm-custom-section/foo.rs b/src/test/run-make/wasm-custom-section/foo.rs index fb3bec31ada..6a35d743710 100644 --- a/src/test/run-make/wasm-custom-section/foo.rs +++ b/src/test/run-make/wasm-custom-section/foo.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_type = "rlib"] -#![feature(wasm_custom_section)] #![deny(warnings)] #[link_section = "foo"] From 4687476470d383fefe62ac9cde4e6f9015ba550f Mon Sep 17 00:00:00 2001 From: varkor Date: Mon, 6 Aug 2018 16:46:08 +0100 Subject: [PATCH 38/38] Special-case "test" feature --- src/librustc/middle/stability.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 7fd788ff2ea..0aa532fd9a4 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -838,8 +838,12 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { } // `stdbuild` has special handling for `libc`, so we need to // recognise the feature when building std. + // Likewise, libtest is handled specially, so `test` isn't + // available as we'd like it to be. // FIXME: only remove `libc` when `stdbuild` is active. + // FIXME: remove special casing for `test`. remaining_lib_features.remove(&Symbol::intern("libc")); + remaining_lib_features.remove(&Symbol::intern("test")); for (feature, stable) in tcx.lib_features().to_vec() { if let Some(since) = stable {