Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions compiler/rustc_ast_passes/src/feature_gate.rs
Original file line number Diff line number Diff line change
@@ -420,6 +420,31 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
}
}
}

// Emit errors for non-staged-api crates.
if !self.features.staged_api {
if attr.has_name(sym::rustc_deprecated)
|| attr.has_name(sym::unstable)
|| attr.has_name(sym::stable)
|| attr.has_name(sym::rustc_const_unstable)
|| attr.has_name(sym::rustc_const_stable)
{
struct_span_err!(
self.sess,
attr.span,
E0734,
"stability attributes may not be used outside of the standard library",
)
.emit();
}
} else {
if attr.has_name(sym::deprecated) {
self.sess
.struct_span_err(attr.span, "`#[deprecated]` cannot be used in staged API")
.span_label(attr.span, "use `#[rustc_deprecated]` instead")
.emit();
}
}
}

fn visit_item(&mut self, i: &'a ast::Item) {
2 changes: 1 addition & 1 deletion compiler/rustc_const_eval/src/interpret/validity.rs
Original file line number Diff line number Diff line change
@@ -697,7 +697,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValueVisitor<'mir, 'tcx, M>
this.ecx.read_discriminant(op),
this.path,
err_ub!(InvalidTag(val)) =>
{ "{}", val } expected { "a valid enum tag" },
{ "{:x}", val } expected { "a valid enum tag" },
err_ub!(InvalidUninitBytes(None)) =>
{ "uninitialized bytes" } expected { "a valid enum tag" },
err_unsup!(ReadPointerAsBytes) =>
3 changes: 3 additions & 0 deletions compiler/rustc_expand/src/config.rs
Original file line number Diff line number Diff line change
@@ -165,6 +165,7 @@ fn get_features(
if let Some(Feature { since, .. }) = ACCEPTED_FEATURES.iter().find(|f| name == f.name) {
let since = Some(Symbol::intern(since));
features.declared_lang_features.push((name, mi.span(), since));
features.active_features.insert(name);
continue;
}

@@ -185,10 +186,12 @@ fn get_features(
if let Some(f) = ACTIVE_FEATURES.iter().find(|f| name == f.name) {
f.set(&mut features, mi.span());
features.declared_lang_features.push((name, mi.span(), None));
features.active_features.insert(name);
continue;
}

features.declared_lib_features.push((name, mi.span()));
features.active_features.insert(name);
}
}

8 changes: 8 additions & 0 deletions compiler/rustc_feature/src/active.rs
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@
use super::{to_nonzero, Feature, State};

use rustc_data_structures::fx::FxHashSet;
use rustc_span::edition::Edition;
use rustc_span::symbol::{sym, Symbol};
use rustc_span::Span;
@@ -47,6 +48,8 @@ macro_rules! declare_features {
pub declared_lang_features: Vec<(Symbol, Span, Option<Symbol>)>,
/// `#![feature]` attrs for non-language (library) features.
pub declared_lib_features: Vec<(Symbol, Span)>,
/// Features enabled for this crate.
pub active_features: FxHashSet<Symbol>,
$(
$(#[doc = $doc])*
pub $feature: bool
@@ -58,6 +61,11 @@ macro_rules! declare_features {
$(f(stringify!($feature), self.$feature);)+
}

/// Is the given feature active?
pub fn active(&self, feature: Symbol) -> bool {
self.active_features.contains(&feature)
}

/// Is the given feature enabled?
///
/// Panics if the symbol doesn't correspond to a declared feature.
11 changes: 6 additions & 5 deletions compiler/rustc_interface/src/passes.rs
Original file line number Diff line number Diff line change
@@ -932,12 +932,18 @@ fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> {
tcx.ensure().check_mod_const_bodies(module);
});
},
{
sess.time("unused_lib_feature_checking", || {
rustc_passes::stability::check_unused_or_stable_features(tcx)
});
},
{
// We force these querie to run,
// since they might not otherwise get called.
// This marks the corresponding crate-level attributes
// as used, and ensures that their values are valid.
tcx.ensure().limits(());
tcx.ensure().stability_index(());
}
);
});
@@ -1009,11 +1015,6 @@ fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> {
tcx.hir()
.par_for_each_module(|module| tcx.ensure().check_mod_deathness(module));
},
{
sess.time("unused_lib_feature_checking", || {
rustc_passes::stability::check_unused_or_stable_features(tcx)
});
},
{
sess.time("lint_checking", || {
rustc_lint::check_crate(tcx, || {
12 changes: 3 additions & 9 deletions compiler/rustc_middle/src/middle/stability.rs
Original file line number Diff line number Diff line change
@@ -6,12 +6,12 @@ pub use self::StabilityLevel::*;
use crate::ty::{self, DefIdTree, TyCtxt};
use rustc_ast::NodeId;
use rustc_attr::{self as attr, ConstStability, Deprecation, Stability};
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::fx::FxHashMap;
use rustc_errors::{Applicability, DiagnosticBuilder};
use rustc_feature::GateIssue;
use rustc_hir as hir;
use rustc_hir::def::DefKind;
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX};
use rustc_hir::def_id::{DefId, LocalDefId, CRATE_DEF_INDEX};
use rustc_hir::{self, HirId};
use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_session::lint::builtin::{DEPRECATED, DEPRECATED_IN_FUTURE, SOFT_UNSTABLE};
@@ -63,12 +63,6 @@ pub struct Index<'tcx> {
pub stab_map: FxHashMap<LocalDefId, &'tcx Stability>,
pub const_stab_map: FxHashMap<LocalDefId, &'tcx ConstStability>,
pub depr_map: FxHashMap<LocalDefId, DeprecationEntry>,

/// Maps for each crate whether it is part of the staged API.
pub staged_api: FxHashMap<CrateNum, bool>,

/// Features enabled for this crate.
pub active_features: FxHashSet<Symbol>,
}

impl<'tcx> Index<'tcx> {
@@ -423,7 +417,7 @@ impl<'tcx> TyCtxt<'tcx> {
debug!("stability: skipping span={:?} since it is internal", span);
return EvalResult::Allow;
}
if self.stability().active_features.contains(&feature) {
if self.features().active(feature) {
return EvalResult::Allow;
}

2 changes: 1 addition & 1 deletion compiler/rustc_middle/src/mir/interpret/error.rs
Original file line number Diff line number Diff line change
@@ -370,7 +370,7 @@ impl fmt::Display for UndefinedBehaviorInfo<'_> {
InvalidChar(c) => {
write!(f, "interpreting an invalid 32-bit value as a char: 0x{:08x}", c)
}
InvalidTag(val) => write!(f, "enum value has invalid tag: {}", val),
InvalidTag(val) => write!(f, "enum value has invalid tag: {:x}", val),
InvalidFunctionPointer(p) => {
write!(f, "using {:?} as function pointer but it does not point to a function", p)
}
18 changes: 11 additions & 7 deletions compiler/rustc_middle/src/mir/interpret/value.rs
Original file line number Diff line number Diff line change
@@ -153,7 +153,16 @@ impl<Tag: Provenance> fmt::Display for Scalar<Tag> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Scalar::Ptr(ptr, _size) => write!(f, "pointer to {:?}", ptr),
Scalar::Int(int) => write!(f, "{:?}", int),
Scalar::Int(int) => write!(f, "{}", int),
}
}
}

impl<Tag: Provenance> fmt::LowerHex for Scalar<Tag> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Scalar::Ptr(ptr, _size) => write!(f, "pointer to {:?}", ptr),
Scalar::Int(int) => write!(f, "0x{:x}", int),
}
}
}
@@ -456,11 +465,6 @@ impl<'tcx, Tag: Provenance> Scalar<Tag> {
// Going through `u64` to check size and truncation.
Ok(Double::from_bits(self.to_u64()?.into()))
}

// FIXME: Replace current `impl Display for Scalar` with `impl LowerHex`.
pub fn rustdoc_display(&self) -> String {
if let Scalar::Int(int) = self { int.to_string() } else { self.to_string() }
}
}

#[derive(Clone, Copy, Eq, PartialEq, TyEncodable, TyDecodable, HashStable, Hash)]
@@ -494,7 +498,7 @@ impl<Tag: Provenance> fmt::Display for ScalarMaybeUninit<Tag> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ScalarMaybeUninit::Uninit => write!(f, "uninitialized bytes"),
ScalarMaybeUninit::Scalar(s) => write!(f, "{}", s),
ScalarMaybeUninit::Scalar(s) => write!(f, "{:x}", s),
}
}
}
5 changes: 0 additions & 5 deletions compiler/rustc_middle/src/ty/context.rs
Original file line number Diff line number Diff line change
@@ -2962,11 +2962,6 @@ pub fn provide(providers: &mut ty::query::Providers) {
tcx.arena.alloc(tcx.resolutions(()).glob_map.get(&id).cloned().unwrap_or_default())
};

providers.lookup_stability = |tcx, id| tcx.stability().local_stability(id.expect_local());
providers.lookup_const_stability =
|tcx, id| tcx.stability().local_const_stability(id.expect_local());
providers.lookup_deprecation_entry =
|tcx, id| tcx.stability().local_deprecation_entry(id.expect_local());
providers.extern_mod_stmt_cnum =
|tcx, id| tcx.resolutions(()).extern_crate_map.get(&id).cloned();
providers.output_filenames = |tcx, ()| &tcx.output_filenames;
3 changes: 1 addition & 2 deletions compiler/rustc_middle/src/ty/print/pretty.rs
Original file line number Diff line number Diff line change
@@ -1436,8 +1436,7 @@ pub trait PrettyPrinter<'tcx>:
// relocations (we have an active `str` reference here). We don't use this
// result to affect interpreter execution.
let slice = data.inspect_with_uninit_and_ptr_outside_interpreter(start..end);
let s = std::str::from_utf8(slice).expect("non utf8 str from miri");
p!(write("{:?}", s));
p!(write("{:?}", String::from_utf8_lossy(slice)));
Ok(self)
}
(ConstValue::ByRef { alloc, offset }, ty::Array(t, n)) if *t == u8_type => {
101 changes: 24 additions & 77 deletions compiler/rustc_passes/src/stability.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
//! A pass that annotates every item and method with its stability level,
//! propagating default levels lexically from parent to children ast nodes.
use rustc_ast::Attribute;
use rustc_attr::{self as attr, ConstStability, Stability};
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_errors::struct_span_err;
use rustc_hir as hir;
use rustc_hir::def::{DefKind, Res};
use rustc_hir::def_id::{DefId, LocalDefId, CRATE_DEF_ID, CRATE_DEF_INDEX, LOCAL_CRATE};
use rustc_hir::def_id::{DefId, LocalDefId, CRATE_DEF_ID, CRATE_DEF_INDEX};
use rustc_hir::hir_id::CRATE_HIR_ID;
use rustc_hir::intravisit::{self, Visitor};
use rustc_hir::{FieldDef, Generics, HirId, Item, TraitRef, Ty, TyKind, Variant};
@@ -113,12 +112,8 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
{
let attrs = self.tcx.get_attrs(def_id.to_def_id());
debug!("annotate(id = {:?}, attrs = {:?})", def_id, attrs);
let mut did_error = false;
if !self.tcx.features().staged_api {
did_error = self.forbid_staged_api_attrs(def_id, attrs, inherit_deprecation.clone());
}

let depr = if did_error { None } else { attr::find_deprecation(&self.tcx.sess, attrs) };
let depr = attr::find_deprecation(&self.tcx.sess, attrs);
let mut is_deprecated = false;
if let Some((depr, span)) = &depr {
is_deprecated = true;
@@ -148,16 +143,15 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
}
}

if self.tcx.features().staged_api {
if let Some(a) = attrs.iter().find(|a| a.has_name(sym::deprecated)) {
self.tcx
.sess
.struct_span_err(a.span, "`#[deprecated]` cannot be used in staged API")
.span_label(a.span, "use `#[rustc_deprecated]` instead")
.span_label(item_sp, "")
.emit();
if !self.tcx.features().staged_api {
// Propagate unstability. This can happen even for non-staged-api crates in case
// -Zforce-unstable-if-unmarked is set.
if let Some(stab) = self.parent_stab {
if inherit_deprecation.yes() && stab.level.is_unstable() {
self.index.stab_map.insert(def_id, stab);
}
}
} else {

self.recurse_with_stability_attrs(
depr.map(|(d, _)| DeprecationEntry::local(d, def_id)),
None,
@@ -331,47 +325,6 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
self.parent_const_stab = orig_parent_const_stab;
}
}

// returns true if an error occurred, used to suppress some spurious errors
fn forbid_staged_api_attrs(
&mut self,
def_id: LocalDefId,
attrs: &[Attribute],
inherit_deprecation: InheritDeprecation,
) -> bool {
// Emit errors for non-staged-api crates.
let unstable_attrs = [
sym::unstable,
sym::stable,
sym::rustc_deprecated,
sym::rustc_const_unstable,
sym::rustc_const_stable,
];
let mut has_error = false;
for attr in attrs {
let name = attr.name_or_empty();
if unstable_attrs.contains(&name) {
struct_span_err!(
self.tcx.sess,
attr.span,
E0734,
"stability attributes may not be used outside of the standard library",
)
.emit();
has_error = true;
}
}

// Propagate unstability. This can happen even for non-staged-api crates in case
// -Zforce-unstable-if-unmarked is set.
if let Some(stab) = self.parent_stab {
if inherit_deprecation.yes() && stab.level.is_unstable() {
self.index.stab_map.insert(def_id, stab);
}
}

has_error
}
}

impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> {
@@ -656,28 +609,12 @@ impl<'tcx> Visitor<'tcx> for MissingStabilityAnnotations<'tcx> {
}

fn stability_index<'tcx>(tcx: TyCtxt<'tcx>, (): ()) -> Index<'tcx> {
let is_staged_api =
tcx.sess.opts.debugging_opts.force_unstable_if_unmarked || tcx.features().staged_api;
let mut staged_api = FxHashMap::default();
staged_api.insert(LOCAL_CRATE, is_staged_api);
let mut index = Index {
staged_api,
stab_map: Default::default(),
const_stab_map: Default::default(),
depr_map: Default::default(),
active_features: Default::default(),
};

let active_lib_features = &tcx.features().declared_lib_features;
let active_lang_features = &tcx.features().declared_lang_features;

// Put the active features into a map for quick lookup.
index.active_features = active_lib_features
.iter()
.map(|&(s, ..)| s)
.chain(active_lang_features.iter().map(|&(s, ..)| s))
.collect();

{
let mut annotator = Annotator {
tcx,
@@ -730,7 +667,16 @@ fn check_mod_unstable_api_usage(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
}

pub(crate) fn provide(providers: &mut Providers) {
*providers = Providers { check_mod_unstable_api_usage, stability_index, ..*providers };
*providers = Providers {
check_mod_unstable_api_usage,
stability_index,
lookup_stability: |tcx, id| tcx.stability().local_stability(id.expect_local()),
lookup_const_stability: |tcx, id| tcx.stability().local_const_stability(id.expect_local()),
lookup_deprecation_entry: |tcx, id| {
tcx.stability().local_deprecation_entry(id.expect_local())
},
..*providers
};
}

struct Checker<'tcx> {
@@ -886,9 +832,10 @@ impl<'tcx> Visitor<'tcx> for CheckTraitImplStable<'tcx> {
/// were expected to be library features), and the list of features used from
/// libraries, identify activated features that don't exist and error about them.
pub fn check_unused_or_stable_features(tcx: TyCtxt<'_>) {
let access_levels = &tcx.privacy_access_levels(());

if tcx.stability().staged_api[&LOCAL_CRATE] {
let is_staged_api =
tcx.sess.opts.debugging_opts.force_unstable_if_unmarked || tcx.features().staged_api;
if is_staged_api {
let access_levels = &tcx.privacy_access_levels(());
let mut missing = MissingStabilityAnnotations { tcx, access_levels };
missing.check_missing_stability(CRATE_DEF_ID, tcx.hir().span(CRATE_HIR_ID));
tcx.hir().walk_toplevel_module(&mut missing);
3 changes: 2 additions & 1 deletion library/core/src/future/future.rs
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ use crate::ops;
use crate::pin::Pin;
use crate::task::{Context, Poll};

/// A future represents an asynchronous computation.
/// A future represents an asynchronous computation obtained by use of [`async`].
///
/// A future is a value that might not have finished computing yet. This kind of
/// "asynchronous value" makes it possible for a thread to continue doing useful
@@ -23,6 +23,7 @@ use crate::task::{Context, Poll};
/// When using a future, you generally won't call `poll` directly, but instead
/// `.await` the value.
///
/// [`async`]: ../../std/keyword.async.html
/// [`Waker`]: crate::task::Waker
#[doc(notable_trait)]
#[must_use = "futures do nothing unless you `.await` or poll them"]
9 changes: 8 additions & 1 deletion library/core/src/future/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
#![stable(feature = "futures_api", since = "1.36.0")]

//! Asynchronous values.
//! Asynchronous basic functionality.
//!
//! Please see the fundamental [`async`] and [`await`] keywords and the [async book]
//! for more information on asynchronous programming in Rust.
//!
//! [`async`]: ../../std/keyword.async.html
//! [`await`]: ../../std/keyword.await.html
//! [async book]: https://rust-lang.github.io/async-book/
use crate::{
ops::{Generator, GeneratorState},
14 changes: 8 additions & 6 deletions library/std/src/keyword_docs.rs
Original file line number Diff line number Diff line change
@@ -2203,37 +2203,39 @@ mod where_keyword {}
///
/// Use `async` in front of `fn`, `closure`, or a `block` to turn the marked code into a `Future`.
/// As such the code will not be run immediately, but will only be evaluated when the returned
/// future is `.await`ed.
/// future is [`.await`]ed.
///
/// We have written an [async book] detailing async/await and trade-offs compared to using threads.
/// We have written an [async book] detailing `async`/`await` and trade-offs compared to using threads.
///
/// ## Editions
///
/// `async` is a keyword from the 2018 edition onwards.
///
/// It is available for use in stable rust from version 1.39 onwards.
/// It is available for use in stable Rust from version 1.39 onwards.
///
/// [`Future`]: future::Future
/// [`.await`]: ../std/keyword.await.html
/// [async book]: https://rust-lang.github.io/async-book/
mod async_keyword {}

#[doc(keyword = "await")]
//
/// Suspend execution until the result of a [`Future`] is ready.
///
/// `.await`ing a future will suspend the current function's execution until the `executor`
/// `.await`ing a future will suspend the current function's execution until the executor
/// has run the future to completion.
///
/// Read the [async book] for details on how async/await and executors work.
/// Read the [async book] for details on how [`async`]/`await` and executors work.
///
/// ## Editions
///
/// `await` is a keyword from the 2018 edition onwards.
///
/// It is available for use in stable rust from version 1.39 onwards.
/// It is available for use in stable Rust from version 1.39 onwards.
///
/// [`Future`]: future::Future
/// [async book]: https://rust-lang.github.io/async-book/
/// [`async`]: ../std/keyword.async.html
mod await_keyword {}

#[doc(keyword = "dyn")]
6 changes: 3 additions & 3 deletions src/bootstrap/compile.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,6 @@ use std::process::{exit, Command, Stdio};
use std::str;

use build_helper::{output, t, up_to_date};
use filetime::FileTime;
use serde::Deserialize;

use crate::builder::Cargo;
@@ -1334,8 +1333,9 @@ pub fn run_cargo(
.map(|s| s.starts_with('-') && s.ends_with(&extension[..]))
.unwrap_or(false)
});
let max = candidates
.max_by_key(|&&(_, _, ref metadata)| FileTime::from_last_modification_time(metadata));
let max = candidates.max_by_key(|&&(_, _, ref metadata)| {
metadata.modified().expect("mtime should be available on all relevant OSes")
});
let path_to_add = match max {
Some(triple) => triple.0.to_str().unwrap(),
None => panic!("no output generated for {:?} {:?}", prefix, extension),
6 changes: 1 addition & 5 deletions src/librustdoc/clean/utils.rs
Original file line number Diff line number Diff line change
@@ -302,11 +302,7 @@ fn print_const_with_custom_print_scalar(tcx: TyCtxt<'_>, ct: ty::Const<'_>) -> S
// For all other types, fallback to the original `pretty_print_const`.
match (ct.val(), ct.ty().kind()) {
(ty::ConstKind::Value(ConstValue::Scalar(int)), ty::Uint(ui)) => {
format!(
"{}{}",
format_integer_with_underscore_sep(&int.rustdoc_display()),
ui.name_str()
)
format!("{}{}", format_integer_with_underscore_sep(&int.to_string()), ui.name_str())
}
(ty::ConstKind::Value(ConstValue::Scalar(int)), ty::Int(i)) => {
let ty = tcx.lift(ct.ty()).unwrap();
70 changes: 38 additions & 32 deletions src/test/mir-opt/const_prop/invalid_constant.main.ConstProp.diff
Original file line number Diff line number Diff line change
@@ -2,63 +2,69 @@
+ // MIR for `main` after ConstProp

fn main() -> () {
let mut _0: (); // return place in scope 0 at $DIR/invalid_constant.rs:13:11: 13:11
let _1: main::InvalidChar; // in scope 0 at $DIR/invalid_constant.rs:19:9: 19:22
let mut _3: main::InvalidTag; // in scope 0 at $DIR/invalid_constant.rs:26:25: 26:46
let mut _5: main::NoVariants; // in scope 0 at $DIR/invalid_constant.rs:33:35: 33:56
let mut _0: (); // return place in scope 0 at $DIR/invalid_constant.rs:15:11: 15:11
let _1: main::InvalidChar; // in scope 0 at $DIR/invalid_constant.rs:21:9: 21:22
let mut _3: main::InvalidTag; // in scope 0 at $DIR/invalid_constant.rs:28:25: 28:46
let mut _5: main::NoVariants; // in scope 0 at $DIR/invalid_constant.rs:35:35: 35:56
scope 1 {
debug _invalid_char => _1; // in scope 1 at $DIR/invalid_constant.rs:19:9: 19:22
let _2: [main::InvalidTag; 1]; // in scope 1 at $DIR/invalid_constant.rs:26:9: 26:21
debug _invalid_char => _1; // in scope 1 at $DIR/invalid_constant.rs:21:9: 21:22
let _2: [main::InvalidTag; 1]; // in scope 1 at $DIR/invalid_constant.rs:28:9: 28:21
scope 2 {
debug _invalid_tag => _2; // in scope 2 at $DIR/invalid_constant.rs:26:9: 26:21
let _4: [main::NoVariants; 1]; // in scope 2 at $DIR/invalid_constant.rs:33:9: 33:31
debug _invalid_tag => _2; // in scope 2 at $DIR/invalid_constant.rs:28:9: 28:21
let _4: [main::NoVariants; 1]; // in scope 2 at $DIR/invalid_constant.rs:35:9: 35:31
scope 3 {
debug _enum_without_variants => _4; // in scope 3 at $DIR/invalid_constant.rs:33:9: 33:31
debug _enum_without_variants => _4; // in scope 3 at $DIR/invalid_constant.rs:35:9: 35:31
let _6: main::Str<"���">; // in scope 3 at $DIR/invalid_constant.rs:39:9: 39:22
scope 4 {
debug _non_utf8_str => _6; // in scope 4 at $DIR/invalid_constant.rs:39:9: 39:22
}
}
}
}

bb0: {
StorageLive(_1); // scope 0 at $DIR/invalid_constant.rs:19:9: 19:22
- _1 = const { InvalidChar { int: 0x110001 } }; // scope 0 at $DIR/invalid_constant.rs:19:25: 19:64
+ _1 = const InvalidChar { int: 1114113_u32, chr: {transmute(0x00110001): char} }; // scope 0 at $DIR/invalid_constant.rs:19:25: 19:64
StorageLive(_1); // scope 0 at $DIR/invalid_constant.rs:21:9: 21:22
- _1 = const { InvalidChar { int: 0x110001 } }; // scope 0 at $DIR/invalid_constant.rs:21:25: 21:64
+ _1 = const InvalidChar { int: 1114113_u32, chr: {transmute(0x00110001): char} }; // scope 0 at $DIR/invalid_constant.rs:21:25: 21:64
// ty::Const
// + ty: main::InvalidChar
- // + val: Unevaluated(main::{constant#0}, [main::InvalidChar], None)
+ // + val: Value(Scalar(0x00110001))
// mir::Constant
// + span: $DIR/invalid_constant.rs:19:25: 19:64
// + span: $DIR/invalid_constant.rs:21:25: 21:64
- // + literal: Const { ty: main::InvalidChar, val: Unevaluated(Unevaluated { def: WithOptConstParam { did: DefId(0:7 ~ invalid_constant[726d]::main::{constant#0}), const_param_did: None }, substs: [main::InvalidChar], promoted: None }) }
+ // + literal: Const { ty: main::InvalidChar, val: Value(Scalar(0x00110001)) }
StorageLive(_2); // scope 1 at $DIR/invalid_constant.rs:26:9: 26:21
StorageLive(_3); // scope 1 at $DIR/invalid_constant.rs:26:25: 26:46
(_3.0: u32) = const 4_u32; // scope 1 at $DIR/invalid_constant.rs:26:25: 26:46
- _2 = [move _3]; // scope 1 at $DIR/invalid_constant.rs:26:24: 26:47
+ _2 = [const InvalidTag { int: 4_u32, e: Scalar(0x00000004): E }]; // scope 1 at $DIR/invalid_constant.rs:26:24: 26:47
StorageLive(_2); // scope 1 at $DIR/invalid_constant.rs:28:9: 28:21
StorageLive(_3); // scope 1 at $DIR/invalid_constant.rs:28:25: 28:46
(_3.0: u32) = const 4_u32; // scope 1 at $DIR/invalid_constant.rs:28:25: 28:46
- _2 = [move _3]; // scope 1 at $DIR/invalid_constant.rs:28:24: 28:47
+ _2 = [const InvalidTag { int: 4_u32, e: Scalar(0x00000004): E }]; // scope 1 at $DIR/invalid_constant.rs:28:24: 28:47
+ // ty::Const
+ // + ty: main::InvalidTag
+ // + val: Value(Scalar(0x00000004))
+ // mir::Constant
+ // + span: $DIR/invalid_constant.rs:26:24: 26:47
+ // + span: $DIR/invalid_constant.rs:28:24: 28:47
+ // + literal: Const { ty: main::InvalidTag, val: Value(Scalar(0x00000004)) }
StorageDead(_3); // scope 1 at $DIR/invalid_constant.rs:26:46: 26:47
StorageLive(_4); // scope 2 at $DIR/invalid_constant.rs:33:9: 33:31
StorageLive(_5); // scope 2 at $DIR/invalid_constant.rs:33:35: 33:56
(_5.0: u32) = const 0_u32; // scope 2 at $DIR/invalid_constant.rs:33:35: 33:56
- _4 = [move _5]; // scope 2 at $DIR/invalid_constant.rs:33:34: 33:57
+ _4 = [const NoVariants { int: 0_u32, empty: Scalar(<ZST>): Empty }]; // scope 2 at $DIR/invalid_constant.rs:33:34: 33:57
StorageDead(_3); // scope 1 at $DIR/invalid_constant.rs:28:46: 28:47
StorageLive(_4); // scope 2 at $DIR/invalid_constant.rs:35:9: 35:31
StorageLive(_5); // scope 2 at $DIR/invalid_constant.rs:35:35: 35:56
(_5.0: u32) = const 0_u32; // scope 2 at $DIR/invalid_constant.rs:35:35: 35:56
- _4 = [move _5]; // scope 2 at $DIR/invalid_constant.rs:35:34: 35:57
+ _4 = [const NoVariants { int: 0_u32, empty: Scalar(<ZST>): Empty }]; // scope 2 at $DIR/invalid_constant.rs:35:34: 35:57
+ // ty::Const
+ // + ty: main::NoVariants
+ // + val: Value(Scalar(0x00000000))
+ // mir::Constant
+ // + span: $DIR/invalid_constant.rs:33:34: 33:57
+ // + span: $DIR/invalid_constant.rs:35:34: 35:57
+ // + literal: Const { ty: main::NoVariants, val: Value(Scalar(0x00000000)) }
StorageDead(_5); // scope 2 at $DIR/invalid_constant.rs:33:56: 33:57
nop; // scope 0 at $DIR/invalid_constant.rs:13:11: 34:2
StorageDead(_4); // scope 2 at $DIR/invalid_constant.rs:34:1: 34:2
StorageDead(_2); // scope 1 at $DIR/invalid_constant.rs:34:1: 34:2
StorageDead(_1); // scope 0 at $DIR/invalid_constant.rs:34:1: 34:2
return; // scope 0 at $DIR/invalid_constant.rs:34:2: 34:2
StorageDead(_5); // scope 2 at $DIR/invalid_constant.rs:35:56: 35:57
StorageLive(_6); // scope 3 at $DIR/invalid_constant.rs:39:9: 39:22
nop; // scope 0 at $DIR/invalid_constant.rs:15:11: 42:2
StorageDead(_6); // scope 3 at $DIR/invalid_constant.rs:42:1: 42:2
StorageDead(_4); // scope 2 at $DIR/invalid_constant.rs:42:1: 42:2
StorageDead(_2); // scope 1 at $DIR/invalid_constant.rs:42:1: 42:2
StorageDead(_1); // scope 0 at $DIR/invalid_constant.rs:42:1: 42:2
return; // scope 0 at $DIR/invalid_constant.rs:42:2: 42:2
}
}

8 changes: 8 additions & 0 deletions src/test/mir-opt/const_prop/invalid_constant.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Verify that we can pretty print invalid constants.

#![feature(adt_const_params)]
#![feature(inline_const)]
#![allow(incomplete_features)]

#[derive(Copy, Clone)]
#[repr(u32)]
@@ -31,4 +33,10 @@ fn main() {
empty: Empty,
}
let _enum_without_variants = [NoVariants { int: 0 }];

// A non-UTF-8 string slice. Regression test for #75763 and #78520.
struct Str<const S: &'static str>;
let _non_utf8_str: Str::<{
unsafe { std::mem::transmute::<&[u8], &str>(&[0xC0, 0xC1, 0xF5]) }
}>;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// compile-flags:-C panic=abort

#![feature(alloc_error_handler, panic_handler)]
#![feature(alloc_error_handler)]
#![no_std]
#![no_main]

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// compile-flags:-C panic=abort

#![feature(alloc_error_handler, panic_handler)]
#![feature(alloc_error_handler)]
#![no_std]
#![no_main]

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// compile-flags:-C panic=abort

#![feature(alloc_error_handler, panic_handler)]
#![feature(alloc_error_handler)]
#![no_std]
#![no_main]

1 change: 0 additions & 1 deletion src/test/ui/asm/naked-functions.rs
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@
// ignore-wasm32

#![feature(naked_functions)]
#![feature(or_patterns)]
#![feature(asm_const, asm_sym, asm_unwind)]
#![crate_type = "lib"]

64 changes: 32 additions & 32 deletions src/test/ui/asm/naked-functions.stderr
Original file line number Diff line number Diff line change
@@ -1,43 +1,43 @@
error: asm with the `pure` option must have at least one output
--> $DIR/naked-functions.rs:111:14
--> $DIR/naked-functions.rs:110:14
|
LL | asm!("", options(readonly, nostack), options(pure));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^

error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:21:5
--> $DIR/naked-functions.rs:20:5
|
LL | mut a: u32,
| ^^^^^

error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:23:5
--> $DIR/naked-functions.rs:22:5
|
LL | &b: &i32,
| ^^

error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:25:6
--> $DIR/naked-functions.rs:24:6
|
LL | (None | Some(_)): Option<std::ptr::NonNull<u8>>,
| ^^^^^^^^^^^^^^

error: patterns not allowed in naked function parameters
--> $DIR/naked-functions.rs:27:5
--> $DIR/naked-functions.rs:26:5
|
LL | P { x, y }: P,
| ^^^^^^^^^^

error: referencing function parameters is not allowed in naked functions
--> $DIR/naked-functions.rs:36:5
--> $DIR/naked-functions.rs:35:5
|
LL | a + 1
| ^
|
= help: follow the calling convention in asm block to use parameters

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:34:1
--> $DIR/naked-functions.rs:33:1
|
LL | / pub unsafe extern "C" fn inc(a: u32) -> u32 {
LL | |
@@ -48,21 +48,21 @@ LL | | }
| |_^

error: referencing function parameters is not allowed in naked functions
--> $DIR/naked-functions.rs:42:31
--> $DIR/naked-functions.rs:41:31
|
LL | asm!("/* {0} */", in(reg) a, options(noreturn));
| ^
|
= help: follow the calling convention in asm block to use parameters

error[E0787]: only `const` and `sym` operands are supported in naked functions
--> $DIR/naked-functions.rs:42:23
--> $DIR/naked-functions.rs:41:23
|
LL | asm!("/* {0} */", in(reg) a, options(noreturn));
| ^^^^^^^^^

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:48:1
--> $DIR/naked-functions.rs:47:1
|
LL | / pub unsafe extern "C" fn inc_closure(a: u32) -> u32 {
LL | |
@@ -72,7 +72,7 @@ LL | | }
| |_^

error[E0787]: only `const` and `sym` operands are supported in naked functions
--> $DIR/naked-functions.rs:65:10
--> $DIR/naked-functions.rs:64:10
|
LL | in(reg) a,
| ^^^^^^^^^
@@ -87,7 +87,7 @@ LL | out(reg) e,
| ^^^^^^^^^^

error[E0787]: asm in naked functions must use `noreturn` option
--> $DIR/naked-functions.rs:63:5
--> $DIR/naked-functions.rs:62:5
|
LL | / asm!("/* {0} {1} {2} {3} {4} {5} {6} */",
LL | |
@@ -99,7 +99,7 @@ LL | | );
| |_____^

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:54:1
--> $DIR/naked-functions.rs:53:1
|
LL | / pub unsafe extern "C" fn unsupported_operands() {
LL | |
@@ -119,33 +119,33 @@ LL | | }
| |_^

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:77:1
--> $DIR/naked-functions.rs:76:1
|
LL | / pub extern "C" fn missing_assembly() {
LL | |
LL | | }
| |_^

error[E0787]: asm in naked functions must use `noreturn` option
--> $DIR/naked-functions.rs:84:5
--> $DIR/naked-functions.rs:83:5
|
LL | asm!("");
| ^^^^^^^^

error[E0787]: asm in naked functions must use `noreturn` option
--> $DIR/naked-functions.rs:86:5
--> $DIR/naked-functions.rs:85:5
|
LL | asm!("");
| ^^^^^^^^

error[E0787]: asm in naked functions must use `noreturn` option
--> $DIR/naked-functions.rs:88:5
--> $DIR/naked-functions.rs:87:5
|
LL | asm!("");
| ^^^^^^^^

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:82:1
--> $DIR/naked-functions.rs:81:1
|
LL | / pub extern "C" fn too_many_asm_blocks() {
LL | |
@@ -163,15 +163,15 @@ LL | | }
| |_^

error: referencing function parameters is not allowed in naked functions
--> $DIR/naked-functions.rs:97:11
--> $DIR/naked-functions.rs:96:11
|
LL | *&y
| ^
|
= help: follow the calling convention in asm block to use parameters

error[E0787]: naked functions must contain a single asm block
--> $DIR/naked-functions.rs:95:5
--> $DIR/naked-functions.rs:94:5
|
LL | / pub extern "C" fn inner(y: usize) -> usize {
LL | |
@@ -182,75 +182,75 @@ LL | | }
| |_____^

error[E0787]: asm options unsupported in naked functions: `nomem`, `preserves_flags`
--> $DIR/naked-functions.rs:105:5
--> $DIR/naked-functions.rs:104:5
|
LL | asm!("", options(nomem, preserves_flags, noreturn));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0787]: asm options unsupported in naked functions: `nostack`, `pure`, `readonly`
--> $DIR/naked-functions.rs:111:5
--> $DIR/naked-functions.rs:110:5
|
LL | asm!("", options(readonly, nostack), options(pure));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0787]: asm in naked functions must use `noreturn` option
--> $DIR/naked-functions.rs:111:5
--> $DIR/naked-functions.rs:110:5
|
LL | asm!("", options(readonly, nostack), options(pure));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0787]: asm options unsupported in naked functions: `may_unwind`
--> $DIR/naked-functions.rs:119:5
--> $DIR/naked-functions.rs:118:5
|
LL | asm!("", options(noreturn, may_unwind));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: Rust ABI is unsupported in naked functions
--> $DIR/naked-functions.rs:124:15
--> $DIR/naked-functions.rs:123:15
|
LL | pub unsafe fn default_abi() {
| ^^^^^^^^^^^
|
= note: `#[warn(undefined_naked_function_abi)]` on by default

warning: Rust ABI is unsupported in naked functions
--> $DIR/naked-functions.rs:130:15
--> $DIR/naked-functions.rs:129:15
|
LL | pub unsafe fn rust_abi() {
| ^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:170:1
--> $DIR/naked-functions.rs:169:1
|
LL | #[inline]
| ^^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:177:1
--> $DIR/naked-functions.rs:176:1
|
LL | #[inline(always)]
| ^^^^^^^^^^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:184:1
--> $DIR/naked-functions.rs:183:1
|
LL | #[inline(never)]
| ^^^^^^^^^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:191:1
--> $DIR/naked-functions.rs:190:1
|
LL | #[inline]
| ^^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:193:1
--> $DIR/naked-functions.rs:192:1
|
LL | #[inline(always)]
| ^^^^^^^^^^^^^^^^^

error: naked functions cannot be inlined
--> $DIR/naked-functions.rs:195:1
--> $DIR/naked-functions.rs:194:1
|
LL | #[inline(never)]
| ^^^^^^^^^^^^^^^^
2 changes: 0 additions & 2 deletions src/test/ui/associated-consts/associated-const-in-trait.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// #29924

#![feature(associated_consts)]

trait Trait {
const N: usize;
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0038]: the trait `Trait` cannot be made into an object
--> $DIR/associated-const-in-trait.rs:9:6
--> $DIR/associated-const-in-trait.rs:7:6
|
LL | impl dyn Trait {
| ^^^^^^^^^ `Trait` cannot be made into an object
|
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
--> $DIR/associated-const-in-trait.rs:6:11
--> $DIR/associated-const-in-trait.rs:4:11
|
LL | trait Trait {
| ----- this trait cannot be made into an object...
2 changes: 1 addition & 1 deletion src/test/ui/async-await/try-on-option-in-async.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![feature(try_trait, async_closure)]
#![feature(async_closure)]
// edition:2018
fn main() {}

3 changes: 3 additions & 0 deletions src/test/ui/attributes/const-stability-on-macro.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#![feature(staged_api)]
#![stable(feature = "rust1", since = "1.0.0")]

#[rustc_const_stable(feature = "foo", since = "0")]
//~^ ERROR macros cannot have const stability attributes
macro_rules! foo {
4 changes: 2 additions & 2 deletions src/test/ui/attributes/const-stability-on-macro.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: macros cannot have const stability attributes
--> $DIR/const-stability-on-macro.rs:1:1
--> $DIR/const-stability-on-macro.rs:4:1
|
LL | #[rustc_const_stable(feature = "foo", since = "0")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid const stability attribute
@@ -8,7 +8,7 @@ LL | macro_rules! foo {
| ---------------- const stability attribute affects this macro

error: macros cannot have const stability attributes
--> $DIR/const-stability-on-macro.rs:7:1
--> $DIR/const-stability-on-macro.rs:10:1
|
LL | #[rustc_const_unstable(feature = "bar", issue="none")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid const stability attribute
1 change: 0 additions & 1 deletion src/test/ui/attributes/extented-attribute-macro-error.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// normalize-stderr-test: "couldn't read.*" -> "couldn't read the file"

#![feature(extended_key_value_attributes)]
#![doc = include_str!("../not_existing_file.md")]
struct Documented {}
//~^^ ERROR couldn't read
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: couldn't read the file
--> $DIR/extented-attribute-macro-error.rs:4:10
--> $DIR/extented-attribute-macro-error.rs:3:10
|
LL | #![doc = include_str!("../not_existing_file.md")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16 changes: 0 additions & 16 deletions src/test/ui/const-generics/issues/issue-75763.rs

This file was deleted.

2 changes: 1 addition & 1 deletion src/test/ui/const-generics/issues/issue-82956.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![feature(generic_const_exprs, array_map)]
#![feature(generic_const_exprs)]
#![allow(incomplete_features)]

pub struct ConstCheck<const CHECK: bool>;
2 changes: 0 additions & 2 deletions src/test/ui/consts/const-array-oob-arith.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(const_indexing)]

const ARR: [i32; 6] = [42, 43, 44, 45, 46, 47];
const IDX: usize = 3;
const VAL: i32 = ARR[IDX];
4 changes: 2 additions & 2 deletions src/test/ui/consts/const-array-oob-arith.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0308]: mismatched types
--> $DIR/const-array-oob-arith.rs:7:45
--> $DIR/const-array-oob-arith.rs:5:45
|
LL | const BLUB: [i32; (ARR[0] - 40) as usize] = [5];
| ^^^ expected an array with a fixed size of 2 elements, found one with 1 element

error[E0308]: mismatched types
--> $DIR/const-array-oob-arith.rs:10:44
--> $DIR/const-array-oob-arith.rs:8:44
|
LL | const BOO: [i32; (ARR[0] - 41) as usize] = [5, 99];
| ^^^^^^^ expected an array with a fixed size of 1 element, found one with 2 elements
2 changes: 0 additions & 2 deletions src/test/ui/consts/const-array-oob.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(const_indexing)]

const FOO: [usize; 3] = [1, 2, 3];
const BAR: usize = FOO[5]; // no error, because the error below occurs before regular const eval

2 changes: 1 addition & 1 deletion src/test/ui/consts/const-array-oob.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0080]: evaluation of constant value failed
--> $DIR/const-array-oob.rs:6:19
--> $DIR/const-array-oob.rs:4:19
|
LL | const BLUB: [u32; FOO[4]] = [5, 6];
| ^^^^^^ index out of bounds: the length is 3 but the index is 4
2 changes: 0 additions & 2 deletions src/test/ui/consts/const-eval/transmute-const-promotion.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(const_transmute)]

use std::mem;

fn main() {
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0716]: temporary value dropped while borrowed
--> $DIR/transmute-const-promotion.rs:6:37
--> $DIR/transmute-const-promotion.rs:4:37
|
LL | let x: &'static u32 = unsafe { &mem::transmute(3.0f32) };
| ------------ ^^^^^^^^^^^^^^^^^^^^^^ creates a temporary which is freed while still in use
1 change: 0 additions & 1 deletion src/test/ui/consts/issue-87046.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

#![crate_type="lib"]
#![allow(unreachable_patterns)]
#![feature(const_fn_union)]

#[derive(PartialEq, Eq)]
#[repr(transparent)]
2 changes: 1 addition & 1 deletion src/test/ui/consts/issue-87046.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: cannot use unsized non-slice type `Username` in constant patterns
--> $DIR/issue-87046.rs:29:13
--> $DIR/issue-87046.rs:28:13
|
LL | ROOT_USER => true,
| ^^^^^^^^^
1 change: 1 addition & 0 deletions src/test/ui/consts/min_const_fn/allow_const_fn_ptr.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#![feature(rustc_attrs, staged_api, rustc_allow_const_fn_unstable)]
#![feature(const_fn_fn_ptr_basics)]
#![stable(feature = "rust1", since = "1.0.0")]

#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(since="1.0.0", feature = "mep")]
2 changes: 1 addition & 1 deletion src/test/ui/consts/min_const_fn/allow_const_fn_ptr.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: const-stable function cannot use `#[feature(const_fn_fn_ptr_basics)]`
--> $DIR/allow_const_fn_ptr.rs:6:16
--> $DIR/allow_const_fn_ptr.rs:7:16
|
LL | const fn error(_: fn()) {}
| ^
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ const fn foo() -> u32 { 42 }
// can't call non-min_const_fn
const fn bar() -> u32 { foo() } //~ ERROR not yet stable as a const fn

#[unstable(feature = "rust1", issue = "none")]
#[unstable(feature = "foo2", issue = "none")]
const fn foo2() -> u32 { 42 }

#[stable(feature = "rust1", since = "1.0.0")]
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ const unsafe fn foo() -> u32 { 42 }
// can't call non-min_const_fn
const unsafe fn bar() -> u32 { unsafe { foo() } } //~ ERROR not yet stable as a const fn

#[unstable(feature = "rust1", issue = "none")]
#[unstable(feature = "foo2", issue = "none")]
const unsafe fn foo2() -> u32 { 42 }

#[stable(feature = "rust1", since = "1.0.0")]
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ const fn foo() -> u32 { 42 }
// can't call non-min_const_fn
const unsafe fn bar() -> u32 { foo() } //~ ERROR not yet stable as a const fn

#[unstable(feature = "rust1", issue = "none")]
#[unstable(feature = "foo2", issue = "none")]
const fn foo2() -> u32 { 42 }

#[stable(feature = "rust1", since = "1.0.0")]
2 changes: 0 additions & 2 deletions src/test/ui/consts/transmute-size-mismatch-before-typeck.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(const_transmute)]

// normalize-stderr-64bit "64 bits" -> "word size"
// normalize-stderr-32bit "32 bits" -> "word size"
// normalize-stderr-64bit "128 bits" -> "2 * word size"
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: any use of this value will cause an error
--> $DIR/transmute-size-mismatch-before-typeck.rs:15:29
--> $DIR/transmute-size-mismatch-before-typeck.rs:13:29
|
LL | const ZST: &[u8] = unsafe { std::mem::transmute(1usize) };
| ----------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^---
@@ -11,13 +11,13 @@ LL | const ZST: &[u8] = unsafe { std::mem::transmute(1usize) };
= note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>

error: could not evaluate constant pattern
--> $DIR/transmute-size-mismatch-before-typeck.rs:10:9
--> $DIR/transmute-size-mismatch-before-typeck.rs:8:9
|
LL | ZST => {}
| ^^^

error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
--> $DIR/transmute-size-mismatch-before-typeck.rs:15:29
--> $DIR/transmute-size-mismatch-before-typeck.rs:13:29
|
LL | const ZST: &[u8] = unsafe { std::mem::transmute(1usize) };
| ^^^^^^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ LL | const ZST: &[u8] = unsafe { std::mem::transmute(1usize) };
= note: target type: `&[u8]` (2 * word size)

error: could not evaluate constant pattern
--> $DIR/transmute-size-mismatch-before-typeck.rs:10:9
--> $DIR/transmute-size-mismatch-before-typeck.rs:8:9
|
LL | ZST => {}
| ^^^
1 change: 0 additions & 1 deletion src/test/ui/consts/unstable-const-fn-in-libcore.rs
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@
// gate was not enabled in libcore.

#![stable(feature = "core", since = "1.6.0")]
#![feature(rustc_const_unstable)]
#![feature(staged_api)]
#![feature(const_fn_trait_bound)]

6 changes: 3 additions & 3 deletions src/test/ui/consts/unstable-const-fn-in-libcore.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0015]: cannot call non-const closure in constant functions
--> $DIR/unstable-const-fn-in-libcore.rs:24:26
--> $DIR/unstable-const-fn-in-libcore.rs:23:26
|
LL | Opt::None => f(),
| ^^^
@@ -11,7 +11,7 @@ LL | const fn unwrap_or_else<F: FnOnce() -> T + ~const std::ops::FnOnce<()>>
| +++++++++++++++++++++++++++++

error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/unstable-const-fn-in-libcore.rs:19:53
--> $DIR/unstable-const-fn-in-libcore.rs:18:53
|
LL | const fn unwrap_or_else<F: FnOnce() -> T>(self, f: F) -> T {
| ^ constant functions cannot evaluate destructors
@@ -20,7 +20,7 @@ LL | }
| - value is dropped here

error[E0493]: destructors cannot be evaluated at compile-time
--> $DIR/unstable-const-fn-in-libcore.rs:19:47
--> $DIR/unstable-const-fn-in-libcore.rs:18:47
|
LL | const fn unwrap_or_else<F: FnOnce() -> T>(self, f: F) -> T {
| ^^^^ constant functions cannot evaluate destructors
2 changes: 0 additions & 2 deletions src/test/ui/deprecation/deprecation-in-staged-api.stderr
Original file line number Diff line number Diff line change
@@ -3,8 +3,6 @@ error: `#[deprecated]` cannot be used in staged API
|
LL | #[deprecated]
| ^^^^^^^^^^^^^ use `#[rustc_deprecated]` instead
LL | fn main() {}
| ------------

error: aborting due to previous error

2 changes: 0 additions & 2 deletions src/test/ui/explore-issue-38412.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// aux-build:pub-and-stability.rs

#![feature(unused_feature)]

// A big point of this test is that we *declare* `unstable_declared`,
// but do *not* declare `unstable_undeclared`. This way we can check
// that the compiler is letting in uses of declared feature-gated
38 changes: 19 additions & 19 deletions src/test/ui/explore-issue-38412.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:21:63
--> $DIR/explore-issue-38412.rs:19:63
|
LL | let Record { a_stable_pub: _, a_unstable_declared_pub: _, a_unstable_undeclared_pub: _, .. } =
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | let Record { a_stable_pub: _, a_unstable_declared_pub: _, a_unstable_un
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:30:5
--> $DIR/explore-issue-38412.rs:28:5
|
LL | r.a_unstable_undeclared_pub;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -17,25 +17,25 @@ LL | r.a_unstable_undeclared_pub;
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0616]: field `b_crate` of struct `Record` is private
--> $DIR/explore-issue-38412.rs:31:7
--> $DIR/explore-issue-38412.rs:29:7
|
LL | r.b_crate;
| ^^^^^^^ private field

error[E0616]: field `c_mod` of struct `Record` is private
--> $DIR/explore-issue-38412.rs:32:7
--> $DIR/explore-issue-38412.rs:30:7
|
LL | r.c_mod;
| ^^^^^ private field

error[E0616]: field `d_priv` of struct `Record` is private
--> $DIR/explore-issue-38412.rs:33:7
--> $DIR/explore-issue-38412.rs:31:7
|
LL | r.d_priv;
| ^^^^^^ private field

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:37:5
--> $DIR/explore-issue-38412.rs:35:5
|
LL | t.2;
| ^^^
@@ -44,25 +44,25 @@ LL | t.2;
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0616]: field `3` of struct `Tuple` is private
--> $DIR/explore-issue-38412.rs:38:7
--> $DIR/explore-issue-38412.rs:36:7
|
LL | t.3;
| ^ private field

error[E0616]: field `4` of struct `Tuple` is private
--> $DIR/explore-issue-38412.rs:39:7
--> $DIR/explore-issue-38412.rs:37:7
|
LL | t.4;
| ^ private field

error[E0616]: field `5` of struct `Tuple` is private
--> $DIR/explore-issue-38412.rs:40:7
--> $DIR/explore-issue-38412.rs:38:7
|
LL | t.5;
| ^ private field

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:44:7
--> $DIR/explore-issue-38412.rs:42:7
|
LL | r.unstable_undeclared_trait_method();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -71,7 +71,7 @@ LL | r.unstable_undeclared_trait_method();
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:48:7
--> $DIR/explore-issue-38412.rs:46:7
|
LL | r.unstable_undeclared();
| ^^^^^^^^^^^^^^^^^^^
@@ -80,7 +80,7 @@ LL | r.unstable_undeclared();
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0624]: associated function `pub_crate` is private
--> $DIR/explore-issue-38412.rs:50:7
--> $DIR/explore-issue-38412.rs:48:7
|
LL | r.pub_crate();
| ^^^^^^^^^ private associated function
@@ -91,7 +91,7 @@ LL | pub(crate) fn pub_crate(&self) -> i32 { self.d_priv }
| ------------------------------------- private associated function defined here

error[E0624]: associated function `pub_mod` is private
--> $DIR/explore-issue-38412.rs:51:7
--> $DIR/explore-issue-38412.rs:49:7
|
LL | r.pub_mod();
| ^^^^^^^ private associated function
@@ -102,7 +102,7 @@ LL | pub(in m) fn pub_mod(&self) -> i32 { self.d_priv }
| ---------------------------------- private associated function defined here

error[E0624]: associated function `private` is private
--> $DIR/explore-issue-38412.rs:52:7
--> $DIR/explore-issue-38412.rs:50:7
|
LL | r.private();
| ^^^^^^^ private associated function
@@ -113,7 +113,7 @@ LL | fn private(&self) -> i32 { self.d_priv }
| ------------------------ private associated function defined here

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:57:7
--> $DIR/explore-issue-38412.rs:55:7
|
LL | t.unstable_undeclared_trait_method();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -122,7 +122,7 @@ LL | t.unstable_undeclared_trait_method();
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0658]: use of unstable library feature 'unstable_undeclared'
--> $DIR/explore-issue-38412.rs:61:7
--> $DIR/explore-issue-38412.rs:59:7
|
LL | t.unstable_undeclared();
| ^^^^^^^^^^^^^^^^^^^
@@ -131,7 +131,7 @@ LL | t.unstable_undeclared();
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0624]: associated function `pub_crate` is private
--> $DIR/explore-issue-38412.rs:63:7
--> $DIR/explore-issue-38412.rs:61:7
|
LL | t.pub_crate();
| ^^^^^^^^^ private associated function
@@ -142,7 +142,7 @@ LL | pub(crate) fn pub_crate(&self) -> i32 { self.0 }
| ------------------------------------- private associated function defined here

error[E0624]: associated function `pub_mod` is private
--> $DIR/explore-issue-38412.rs:64:7
--> $DIR/explore-issue-38412.rs:62:7
|
LL | t.pub_mod();
| ^^^^^^^ private associated function
@@ -153,7 +153,7 @@ LL | pub(in m) fn pub_mod(&self) -> i32 { self.0 }
| ---------------------------------- private associated function defined here

error[E0624]: associated function `private` is private
--> $DIR/explore-issue-38412.rs:65:7
--> $DIR/explore-issue-38412.rs:63:7
|
LL | t.private();
| ^^^^^^^ private associated function
12 changes: 6 additions & 6 deletions src/test/ui/feature-gates/feature-gate-staged_api.stderr
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:1:1
|
LL | #![stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:8:1
|
LL | #[stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/feature-gate-staged_api.rs:1:1
|
LL | #![stable(feature = "a", since = "b")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0734`.
4 changes: 2 additions & 2 deletions src/test/ui/feature-gates/gated-bad-feature.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
//~^ ERROR malformed `feature`
//~| ERROR malformed `feature`

//~| ERROR unknown feature `foo`
//~| ERROR unknown feature `foo_bar_baz`
#![feature] //~ ERROR malformed `feature` attribute
#![feature = "foo"] //~ ERROR malformed `feature` attribute

#![feature(test_removed_feature)] //~ ERROR: feature has been removed

fn main() {}
20 changes: 16 additions & 4 deletions src/test/ui/feature-gates/gated-bad-feature.stderr
Original file line number Diff line number Diff line change
@@ -17,18 +17,30 @@ LL | #![feature(test_removed_feature)]
| ^^^^^^^^^^^^^^^^^^^^ feature has been removed

error: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:5:1
--> $DIR/gated-bad-feature.rs:6:1
|
LL | #![feature]
| ^^^^^^^^^^^ help: must be of the form: `#![feature(name1, name1, ...)]`

error: malformed `feature` attribute input
--> $DIR/gated-bad-feature.rs:6:1
--> $DIR/gated-bad-feature.rs:7:1
|
LL | #![feature = "foo"]
| ^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#![feature(name1, name1, ...)]`

error: aborting due to 5 previous errors
error[E0635]: unknown feature `foo_bar_baz`
--> $DIR/gated-bad-feature.rs:1:12
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^^^^^^^^^

error[E0635]: unknown feature `foo`
--> $DIR/gated-bad-feature.rs:1:48
|
LL | #![feature(foo_bar_baz, foo(bar), foo = "baz", foo)]
| ^^^

error: aborting due to 7 previous errors

Some errors have detailed explanations: E0556, E0557.
Some errors have detailed explanations: E0556, E0557, E0635.
For more information about an error, try `rustc --explain E0556`.
Original file line number Diff line number Diff line change
@@ -6,25 +6,38 @@

#![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]

#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
mod rustc_deprecated {
mod inner { #![rustc_deprecated()] }
//~^ ERROR stability attributes may not be used outside of the standard library
mod inner {
#![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
}

#[rustc_deprecated()] fn f() { }
#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
fn f() {}

#[rustc_deprecated()] struct S;
#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
//~| ERROR missing 'since' [E0542]
struct S;

#[rustc_deprecated()] type T = S;
#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
type T = S;

#[rustc_deprecated()] impl S { }
#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR missing 'since' [E0542]
impl S {}
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -1,51 +1,94 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:9
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:10:1
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:21:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:13:17
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
|
LL | mod inner { #![rustc_deprecated()] }
| ^^^^^^^^^^^^^^^^^^^^^^
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:5
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:32:5
|
LL | #[rustc_deprecated()] fn f() { }
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:37:5
|
LL | #[rustc_deprecated()] struct S;
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:11:1
|
LL | #[rustc_deprecated()] struct S;
| ^^^^^^^^^^^^^^^^^^^^^
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:23:5
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:11:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:9
|
LL | #![rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:21:5
|
LL | #[rustc_deprecated()] type T = S;
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
|
LL | #[rustc_deprecated()] impl S { }
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:26:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:32:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:37:5
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 8 previous errors
error: aborting due to 15 previous errors

For more information about this error, try `rustc --explain E0734`.
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.
19 changes: 12 additions & 7 deletions src/test/ui/feature-gates/issue-43106-gating-of-stable.rs
Original file line number Diff line number Diff line change
@@ -10,21 +10,26 @@
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod stable {
mod inner { #![stable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
mod inner {
#![stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
}

#[stable()] fn f() { }
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
fn f() {}

#[stable()] struct S;
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library
struct S;

#[stable()] type T = S;
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
type T = S;

#[stable()] impl S { }
#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
impl S {}
}

fn main() {}
44 changes: 19 additions & 25 deletions src/test/ui/feature-gates/issue-43106-gating-of-stable.stderr
Original file line number Diff line number Diff line change
@@ -1,51 +1,45 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:7:1
|
LL | #![stable()]
| ^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:10:1
--> $DIR/issue-43106-gating-of-stable.rs:14:9
|
LL | #[stable()]
| ^^^^^^^^^^^
LL | #![stable()]
| ^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:13:17
--> $DIR/issue-43106-gating-of-stable.rs:18:5
|
LL | mod inner { #![stable()] }
| ^^^^^^^^^^^^
LL | #[stable()]
| ^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:16:5
--> $DIR/issue-43106-gating-of-stable.rs:22:5
|
LL | #[stable()] fn f() { }
LL | #[stable()]
| ^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
--> $DIR/issue-43106-gating-of-stable.rs:26:5
|
LL | #[stable()] struct S;
LL | #[stable()]
| ^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
--> $DIR/issue-43106-gating-of-stable.rs:30:5
|
LL | #[stable()] struct S;
LL | #[stable()]
| ^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:23:5
--> $DIR/issue-43106-gating-of-stable.rs:10:1
|
LL | #[stable()] type T = S;
| ^^^^^^^^^^^
LL | #[stable()]
| ^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:26:5
--> $DIR/issue-43106-gating-of-stable.rs:7:1
|
LL | #[stable()] impl S { }
| ^^^^^^^^^^^
LL | #![stable()]
| ^^^^^^^^^^^^

error: aborting due to 8 previous errors
error: aborting due to 7 previous errors

For more information about this error, try `rustc --explain E0734`.
19 changes: 12 additions & 7 deletions src/test/ui/feature-gates/issue-43106-gating-of-unstable.rs
Original file line number Diff line number Diff line change
@@ -10,21 +10,26 @@
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod unstable {
mod inner { #![unstable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
mod inner {
#![unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
}

#[unstable()] fn f() { }
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
fn f() {}

#[unstable()] struct S;
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
//~| ERROR stability attributes may not be used outside of the standard library
struct S;

#[unstable()] type T = S;
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
type T = S;

#[unstable()] impl S { }
#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
impl S {}
}

fn main() {}
44 changes: 19 additions & 25 deletions src/test/ui/feature-gates/issue-43106-gating-of-unstable.stderr
Original file line number Diff line number Diff line change
@@ -1,51 +1,45 @@
error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:7:1
|
LL | #![unstable()]
| ^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:10:1
--> $DIR/issue-43106-gating-of-unstable.rs:14:9
|
LL | #[unstable()]
| ^^^^^^^^^^^^^
LL | #![unstable()]
| ^^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:13:17
--> $DIR/issue-43106-gating-of-unstable.rs:18:5
|
LL | mod inner { #![unstable()] }
| ^^^^^^^^^^^^^^
LL | #[unstable()]
| ^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:16:5
--> $DIR/issue-43106-gating-of-unstable.rs:22:5
|
LL | #[unstable()] fn f() { }
LL | #[unstable()]
| ^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
--> $DIR/issue-43106-gating-of-unstable.rs:26:5
|
LL | #[unstable()] struct S;
LL | #[unstable()]
| ^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
--> $DIR/issue-43106-gating-of-unstable.rs:30:5
|
LL | #[unstable()] struct S;
LL | #[unstable()]
| ^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:23:5
--> $DIR/issue-43106-gating-of-unstable.rs:10:1
|
LL | #[unstable()] type T = S;
| ^^^^^^^^^^^^^
LL | #[unstable()]
| ^^^^^^^^^^^^^

error[E0734]: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:26:5
--> $DIR/issue-43106-gating-of-unstable.rs:7:1
|
LL | #[unstable()] impl S { }
| ^^^^^^^^^^^^^
LL | #![unstable()]
| ^^^^^^^^^^^^^^

error: aborting due to 8 previous errors
error: aborting due to 7 previous errors

For more information about this error, try `rustc --explain E0734`.
2 changes: 1 addition & 1 deletion src/test/ui/generator/dropck.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![feature(generators, generator_trait, box_leak)]
#![feature(generators, generator_trait)]

use std::cell::RefCell;
use std::ops::Generator;
2 changes: 0 additions & 2 deletions src/test/ui/impl-trait/issues/universal-issue-48703.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(universal_impl_trait)]

use std::fmt::Debug;

fn foo<T>(x: impl Debug) { }
2 changes: 1 addition & 1 deletion src/test/ui/impl-trait/issues/universal-issue-48703.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
--> $DIR/universal-issue-48703.rs:8:11
--> $DIR/universal-issue-48703.rs:6:11
|
LL | foo::<String>('a');
| ^^^^^^ explicit generic argument not allowed
2 changes: 0 additions & 2 deletions src/test/ui/inference/question-mark-type-infer.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(question_mark, question_mark_carrier)]

// Test that type inference fails where there are multiple possible return types
// for the `?` operator.

2 changes: 1 addition & 1 deletion src/test/ui/inference/question-mark-type-infer.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0284]: type annotations needed
--> $DIR/question-mark-type-infer.rs:12:21
--> $DIR/question-mark-type-infer.rs:10:21
|
LL | l.iter().map(f).collect()?
| ^^^^^^^ cannot infer type
6 changes: 3 additions & 3 deletions src/test/ui/issues/issue-16538.mir.stderr
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
error[E0015]: cannot call non-const fn `Y::foo` in statics
--> $DIR/issue-16538.rs:15:23
--> $DIR/issue-16538.rs:14:23
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: calls in statics are limited to constant functions, tuple structs and tuple variants

error[E0133]: use of extern static is unsafe and requires unsafe function or block
--> $DIR/issue-16538.rs:15:30
--> $DIR/issue-16538.rs:14:30
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^ use of extern static
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior

error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
--> $DIR/issue-16538.rs:15:21
--> $DIR/issue-16538.rs:14:21
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
1 change: 0 additions & 1 deletion src/test/ui/issues/issue-16538.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// revisions: mir thir
// [thir]compile-flags: -Z thir-unsafeck

#![feature(const_raw_ptr_deref)]
mod Y {
pub type X = usize;
extern "C" {
6 changes: 3 additions & 3 deletions src/test/ui/issues/issue-16538.thir.stderr
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
--> $DIR/issue-16538.rs:15:22
--> $DIR/issue-16538.rs:14:22
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dereference of raw pointer
|
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior

error[E0133]: use of extern static is unsafe and requires unsafe function or block
--> $DIR/issue-16538.rs:15:30
--> $DIR/issue-16538.rs:14:30
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^ use of extern static
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior

error[E0015]: cannot call non-const fn `Y::foo` in statics
--> $DIR/issue-16538.rs:15:23
--> $DIR/issue-16538.rs:14:23
|
LL | static foo: &Y::X = &*Y::foo(Y::x as *const Y::X);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 changes: 0 additions & 2 deletions src/test/ui/issues/issue-27078.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(associated_consts)]

trait Foo {
const BAR: i32;
fn foo(self) -> &'static i32 {
2 changes: 1 addition & 1 deletion src/test/ui/issues/issue-27078.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0277]: the size for values of type `Self` cannot be known at compilation time
--> $DIR/issue-27078.rs:5:12
--> $DIR/issue-27078.rs:3:12
|
LL | fn foo(self) -> &'static i32 {
| ^^^^ doesn't have a size known at compile-time
2 changes: 0 additions & 2 deletions src/test/ui/issues/issue-39211.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(associated_consts)]

trait VecN {
const DIM: usize;
}
2 changes: 1 addition & 1 deletion src/test/ui/issues/issue-39211.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: constant expression depends on a generic parameter
--> $DIR/issue-39211.rs:11:17
--> $DIR/issue-39211.rs:9:17
|
LL | let a = [3; M::Row::DIM];
| ^^^^^^^^^^^
1 change: 0 additions & 1 deletion src/test/ui/issues/issue-46101.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#![feature(use_extern_macros)]
trait Foo {}
#[derive(Foo::Anything)] //~ ERROR failed to resolve: partially resolved path in a derive macro
//~| ERROR failed to resolve: partially resolved path in a derive macro
4 changes: 2 additions & 2 deletions src/test/ui/issues/issue-46101.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0433]: failed to resolve: partially resolved path in a derive macro
--> $DIR/issue-46101.rs:3:10
--> $DIR/issue-46101.rs:2:10
|
LL | #[derive(Foo::Anything)]
| ^^^^^^^^^^^^^ partially resolved path in a derive macro

error[E0433]: failed to resolve: partially resolved path in a derive macro
--> $DIR/issue-46101.rs:3:10
--> $DIR/issue-46101.rs:2:10
|
LL | #[derive(Foo::Anything)]
| ^^^^^^^^^^^^^ partially resolved path in a derive macro
2 changes: 0 additions & 2 deletions src/test/ui/issues/issue-6596-2.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(macro_rules)]

macro_rules! g {
($inp:ident) => (
{ $inp $nonexistent }
2 changes: 1 addition & 1 deletion src/test/ui/issues/issue-6596-2.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `$`
--> $DIR/issue-6596-2.rs:5:16
--> $DIR/issue-6596-2.rs:3:16
|
LL | { $inp $nonexistent }
| ^^^^^^^^^^^^ expected one of 8 possible tokens
2 changes: 0 additions & 2 deletions src/test/ui/issues/issue-75777.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Regression test for #75777.
// Checks that a boxed future can be properly constructed.

#![feature(future_readiness_fns)]

use std::future::{self, Future};
use std::pin::Pin;

8 changes: 4 additions & 4 deletions src/test/ui/issues/issue-75777.stderr
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
--> $DIR/issue-75777.rs:13:14
--> $DIR/issue-75777.rs:11:14
|
LL | Box::new(move |_| fut)
| ^^^^^^^^^^^^
|
note: first, the lifetime cannot outlive the lifetime `'a` as defined here...
--> $DIR/issue-75777.rs:11:11
--> $DIR/issue-75777.rs:9:11
|
LL | fn inject<'a, Env: 'a, A: 'a + Send>(v: A) -> Box<dyn FnOnce(&'a Env) -> BoxFuture<'a, A>> {
| ^^
note: ...so that the types are compatible
--> $DIR/issue-75777.rs:13:14
--> $DIR/issue-75777.rs:11:14
|
LL | Box::new(move |_| fut)
| ^^^^^^^^^^^^
= note: expected `(Pin<Box<dyn Future<Output = A> + Send>>,)`
found `(Pin<Box<(dyn Future<Output = A> + Send + 'a)>>,)`
= note: but, the lifetime must be valid for the static lifetime...
note: ...so that the types are compatible
--> $DIR/issue-75777.rs:13:5
--> $DIR/issue-75777.rs:11:5
|
LL | Box::new(move |_| fut)
| ^^^^^^^^^^^^^^^^^^^^^^
1 change: 0 additions & 1 deletion src/test/ui/issues/issue-78957.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#![deny(unused_attributes)]
#![feature(min_const_generics)]

use std::marker::PhantomData;

18 changes: 9 additions & 9 deletions src/test/ui/issues/issue-78957.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-78957.rs:6:16
--> $DIR/issue-78957.rs:5:16
|
LL | pub struct Foo<#[inline] const N: usize>;
| ^^^^^^^^^ - not a function or closure

error: attribute should be applied to a function
--> $DIR/issue-78957.rs:8:16
--> $DIR/issue-78957.rs:7:16
|
LL | pub struct Bar<#[cold] const N: usize>;
| ^^^^^^^ - not a function
@@ -18,47 +18,47 @@ LL | #![deny(unused_attributes)]
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!

error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/issue-78957.rs:11:23
--> $DIR/issue-78957.rs:10:23
|
LL | pub struct Baz<#[repr(C)] const N: usize>;
| ^ - not a struct, enum, or union

error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-78957.rs:14:17
--> $DIR/issue-78957.rs:13:17
|
LL | pub struct Foo2<#[inline] 'a>(PhantomData<&'a ()>);
| ^^^^^^^^^ -- not a function or closure

error: attribute should be applied to a function
--> $DIR/issue-78957.rs:16:17
--> $DIR/issue-78957.rs:15:17
|
LL | pub struct Bar2<#[cold] 'a>(PhantomData<&'a ()>);
| ^^^^^^^ -- not a function
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!

error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/issue-78957.rs:19:24
--> $DIR/issue-78957.rs:18:24
|
LL | pub struct Baz2<#[repr(C)] 'a>(PhantomData<&'a ()>);
| ^ -- not a struct, enum, or union

error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-78957.rs:22:17
--> $DIR/issue-78957.rs:21:17
|
LL | pub struct Foo3<#[inline] T>(PhantomData<T>);
| ^^^^^^^^^ - not a function or closure

error: attribute should be applied to a function
--> $DIR/issue-78957.rs:24:17
--> $DIR/issue-78957.rs:23:17
|
LL | pub struct Bar3<#[cold] T>(PhantomData<T>);
| ^^^^^^^ - not a function
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!

error[E0517]: attribute should be applied to a struct, enum, or union
--> $DIR/issue-78957.rs:27:24
--> $DIR/issue-78957.rs:26:24
|
LL | pub struct Baz3<#[repr(C)] T>(PhantomData<T>);
| ^ - not a struct, enum, or union
2 changes: 0 additions & 2 deletions src/test/ui/macros/macro-non-lifetime.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// Test for issue #50381: non-lifetime passed to :lifetime.

#![feature(macro_lifetime_matcher)]

macro_rules! m { ($x:lifetime) => { } }

fn main() {
2 changes: 1 addition & 1 deletion src/test/ui/macros/macro-non-lifetime.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: no rules expected the token `a`
--> $DIR/macro-non-lifetime.rs:8:8
--> $DIR/macro-non-lifetime.rs:6:8
|
LL | macro_rules! m { ($x:lifetime) => { } }
| -------------- when calling this macro
2 changes: 0 additions & 2 deletions src/test/ui/macros/macro-path-prelude-fail-1.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(extern_prelude)]

mod m {
fn check() {
Vec::clone!(); //~ ERROR failed to resolve: `Vec` is a struct, not a module
4 changes: 2 additions & 2 deletions src/test/ui/macros/macro-path-prelude-fail-1.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0433]: failed to resolve: `Vec` is a struct, not a module
--> $DIR/macro-path-prelude-fail-1.rs:5:9
--> $DIR/macro-path-prelude-fail-1.rs:3:9
|
LL | Vec::clone!();
| ^^^ `Vec` is a struct, not a module

error[E0433]: failed to resolve: `u8` is a builtin type, not a module
--> $DIR/macro-path-prelude-fail-1.rs:6:9
--> $DIR/macro-path-prelude-fail-1.rs:4:9
|
LL | u8::clone!();
| ^^ `u8` is a builtin type, not a module
2 changes: 1 addition & 1 deletion src/test/ui/macros/macro-path-prelude-shadowing.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// aux-build:macro-in-other-crate.rs

#![feature(decl_macro, extern_prelude)]
#![feature(decl_macro)]

macro_rules! add_macro_expanded_things_to_macro_prelude {() => {
#[macro_use]
5 changes: 4 additions & 1 deletion src/test/ui/macros/macro-stability.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,10 @@

#![feature(decl_macro)]
#![feature(staged_api)]
#[macro_use] extern crate unstable_macros;
#![stable(feature = "rust1", since = "1.0.0")]

#[macro_use]
extern crate unstable_macros;

#[unstable(feature = "local_unstable", issue = "none")]
macro_rules! local_unstable { () => () }
10 changes: 5 additions & 5 deletions src/test/ui/macros/macro-stability.stderr
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
error[E0658]: use of unstable library feature 'local_unstable'
--> $DIR/macro-stability.rs:19:5
--> $DIR/macro-stability.rs:22:5
|
LL | local_unstable!();
| ^^^^^^^^^^^^^^
|
= help: add `#![feature(local_unstable)]` to the crate attributes to enable

error[E0658]: use of unstable library feature 'local_unstable'
--> $DIR/macro-stability.rs:20:5
--> $DIR/macro-stability.rs:23:5
|
LL | local_unstable_modern!();
| ^^^^^^^^^^^^^^^^^^^^^
|
= help: add `#![feature(local_unstable)]` to the crate attributes to enable

error[E0658]: use of unstable library feature 'unstable_macros'
--> $DIR/macro-stability.rs:21:5
--> $DIR/macro-stability.rs:24:5
|
LL | unstable_macro!();
| ^^^^^^^^^^^^^^
|
= help: add `#![feature(unstable_macros)]` to the crate attributes to enable

warning: use of deprecated macro `deprecated_macro`: deprecation reason
--> $DIR/macro-stability.rs:24:5
--> $DIR/macro-stability.rs:27:5
|
LL | deprecated_macro!();
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(deprecated)]` on by default

warning: use of deprecated macro `local_deprecated`: local deprecation reason
--> $DIR/macro-stability.rs:26:5
--> $DIR/macro-stability.rs:29:5
|
LL | local_deprecated!();
| ^^^^^^^^^^^^^^^^
2 changes: 1 addition & 1 deletion src/test/ui/missing/missing-alloc_error_handler.rs
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@

#![no_std]
#![crate_type = "staticlib"]
#![feature(panic_handler, alloc_error_handler)]
#![feature(alloc_error_handler)]

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
2 changes: 1 addition & 1 deletion src/test/ui/missing/missing-allocator.rs
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@

#![no_std]
#![crate_type = "staticlib"]
#![feature(panic_handler, alloc_error_handler)]
#![feature(alloc_error_handler)]

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> ! {
1 change: 0 additions & 1 deletion src/test/ui/not-panic/not-panic-safe.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#![allow(dead_code)]
#![feature(recover)]

use std::panic::UnwindSafe;

4 changes: 2 additions & 2 deletions src/test/ui/not-panic/not-panic-safe.stderr
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
error[E0277]: the type `&mut i32` may not be safely transferred across an unwind boundary
--> $DIR/not-panic-safe.rs:9:5
--> $DIR/not-panic-safe.rs:8:5
|
LL | assert::<&mut i32>();
| ^^^^^^^^^^^^^^^^^^ `&mut i32` may not be safely transferred across an unwind boundary
|
= help: the trait `UnwindSafe` is not implemented for `&mut i32`
= note: `UnwindSafe` is implemented for `&i32`, but not for `&mut i32`
note: required by a bound in `assert`
--> $DIR/not-panic-safe.rs:6:14
--> $DIR/not-panic-safe.rs:5:14
|
LL | fn assert<T: UnwindSafe + ?Sized>() {}
| ^^^^^^^^^^ required by this bound in `assert`
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@
// through the `MyBox` struct.

#![allow(dead_code)]
#![feature(rustc_error)]

trait Test {
fn foo(&self) { }
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
error[E0308]: mismatched types
--> $DIR/object-lifetime-default-from-rptr-struct-error.rs:21:12
--> $DIR/object-lifetime-default-from-rptr-struct-error.rs:20:12
|
LL | ss.t = t;
| ^ lifetime mismatch
|
= note: expected reference `&'a MyBox<(dyn Test + 'static)>`
found reference `&'a MyBox<(dyn Test + 'a)>`
note: the lifetime `'a` as defined here...
--> $DIR/object-lifetime-default-from-rptr-struct-error.rs:20:6
--> $DIR/object-lifetime-default-from-rptr-struct-error.rs:19:6
|
LL | fn c<'a>(t: &'a MyBox<dyn Test+'a>, mut ss: SomeStruct<'a>) {
| ^^
1 change: 0 additions & 1 deletion src/test/ui/once-cant-call-twice-on-heap.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Testing guarantees provided by once functions.
// This program would segfault if it were legal.

#![feature(once_fns)]
use std::sync::Arc;

fn foo<F:FnOnce()>(blk: F) {
4 changes: 2 additions & 2 deletions src/test/ui/once-cant-call-twice-on-heap.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0382]: use of moved value: `blk`
--> $DIR/once-cant-call-twice-on-heap.rs:9:5
--> $DIR/once-cant-call-twice-on-heap.rs:8:5
|
LL | fn foo<F:FnOnce()>(blk: F) {
| --- move occurs because `blk` has type `F`, which does not implement the `Copy` trait
@@ -9,7 +9,7 @@ LL | blk();
| ^^^ value used here after move
|
note: this value implements `FnOnce`, which causes it to be moved when called
--> $DIR/once-cant-call-twice-on-heap.rs:8:5
--> $DIR/once-cant-call-twice-on-heap.rs:7:5
|
LL | blk();
| ^^^
2 changes: 0 additions & 2 deletions src/test/ui/or-patterns/nested-undelimited-precedence.rs
Original file line number Diff line number Diff line change
@@ -5,8 +5,6 @@
// types of patterns that allow undelimited subpatterns that could cause the same ambiguity.
// Currently, those should be impossible due to precedence rule. This test enforces that.

#![feature(or_patterns)]

enum E {
A,
B,
20 changes: 10 additions & 10 deletions src/test/ui/or-patterns/nested-undelimited-precedence.stderr
Original file line number Diff line number Diff line change
@@ -1,43 +1,43 @@
error: top-level or-patterns are not allowed in `let` bindings
--> $DIR/nested-undelimited-precedence.rs:21:9
--> $DIR/nested-undelimited-precedence.rs:19:9
|
LL | let b @ A | B: E = A;
| ^^^^^^^^^ help: wrap the pattern in parentheses: `(b @ A | B)`

error: top-level or-patterns are not allowed in `let` bindings
--> $DIR/nested-undelimited-precedence.rs:36:9
--> $DIR/nested-undelimited-precedence.rs:34:9
|
LL | let &A(_) | B(_): F = A(3);
| ^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(&A(_) | B(_))`

error: top-level or-patterns are not allowed in `let` bindings
--> $DIR/nested-undelimited-precedence.rs:38:9
--> $DIR/nested-undelimited-precedence.rs:36:9
|
LL | let &&A(_) | B(_): F = A(3);
| ^^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(&&A(_) | B(_))`

error: top-level or-patterns are not allowed in `let` bindings
--> $DIR/nested-undelimited-precedence.rs:40:9
--> $DIR/nested-undelimited-precedence.rs:38:9
|
LL | let &mut A(_) | B(_): F = A(3);
| ^^^^^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(&mut A(_) | B(_))`

error: top-level or-patterns are not allowed in `let` bindings
--> $DIR/nested-undelimited-precedence.rs:42:9
--> $DIR/nested-undelimited-precedence.rs:40:9
|
LL | let &&mut A(_) | B(_): F = A(3);
| ^^^^^^^^^^^^^^^^^ help: wrap the pattern in parentheses: `(&&mut A(_) | B(_))`

error[E0408]: variable `b` is not bound in all patterns
--> $DIR/nested-undelimited-precedence.rs:21:17
--> $DIR/nested-undelimited-precedence.rs:19:17
|
LL | let b @ A | B: E = A;
| - ^ pattern doesn't bind `b`
| |
| variable not in all patterns

error[E0308]: mismatched types
--> $DIR/nested-undelimited-precedence.rs:36:9
--> $DIR/nested-undelimited-precedence.rs:34:9
|
LL | let &A(_) | B(_): F = A(3);
| ^^^^^ - expected due to this
@@ -48,7 +48,7 @@ LL | let &A(_) | B(_): F = A(3);
found reference `&_`

error[E0308]: mismatched types
--> $DIR/nested-undelimited-precedence.rs:38:9
--> $DIR/nested-undelimited-precedence.rs:36:9
|
LL | let &&A(_) | B(_): F = A(3);
| ^^^^^^ - expected due to this
@@ -59,7 +59,7 @@ LL | let &&A(_) | B(_): F = A(3);
found reference `&_`

error[E0308]: mismatched types
--> $DIR/nested-undelimited-precedence.rs:40:9
--> $DIR/nested-undelimited-precedence.rs:38:9
|
LL | let &mut A(_) | B(_): F = A(3);
| ^^^^^^^^^ - expected due to this
@@ -70,7 +70,7 @@ LL | let &mut A(_) | B(_): F = A(3);
found mutable reference `&mut _`

error[E0308]: mismatched types
--> $DIR/nested-undelimited-precedence.rs:42:9
--> $DIR/nested-undelimited-precedence.rs:40:9
|
LL | let &&mut A(_) | B(_): F = A(3);
| ^^^^^^^^^^ - expected due to this
2 changes: 0 additions & 2 deletions src/test/ui/or-patterns/or-patterns-syntactic-fail-2018.rs
Original file line number Diff line number Diff line change
@@ -2,8 +2,6 @@

// edition:2018

#![feature(or_patterns)]

fn main() {}

// Test the `pat` macro fragment parser:
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: no rules expected the token `|`
--> $DIR/or-patterns-syntactic-fail-2018.rs:14:15
--> $DIR/or-patterns-syntactic-fail-2018.rs:12:15
|
LL | macro_rules! accept_pat {
| ----------------------- when calling this macro
@@ -8,7 +8,7 @@ LL | accept_pat!(p | q);
| ^ no rules expected this token in macro call

error: no rules expected the token `|`
--> $DIR/or-patterns-syntactic-fail-2018.rs:15:13
--> $DIR/or-patterns-syntactic-fail-2018.rs:13:13
|
LL | macro_rules! accept_pat {
| ----------------------- when calling this macro
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#![feature(exclusive_range_pattern)]
#![feature(assoc_char_consts)]
#![allow(overlapping_range_endpoints)]
#![deny(unreachable_patterns)]

24 changes: 12 additions & 12 deletions src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0004]: non-exhaustive patterns: `u8::MAX` not covered
--> $DIR/exhaustiveness.rs:48:8
--> $DIR/exhaustiveness.rs:47:8
|
LL | m!(0u8, 0..255);
| ^^^ pattern `u8::MAX` not covered
@@ -8,7 +8,7 @@ LL | m!(0u8, 0..255);
= note: the matched value is of type `u8`

error[E0004]: non-exhaustive patterns: `u8::MAX` not covered
--> $DIR/exhaustiveness.rs:49:8
--> $DIR/exhaustiveness.rs:48:8
|
LL | m!(0u8, 0..=254);
| ^^^ pattern `u8::MAX` not covered
@@ -17,7 +17,7 @@ LL | m!(0u8, 0..=254);
= note: the matched value is of type `u8`

error[E0004]: non-exhaustive patterns: `0_u8` not covered
--> $DIR/exhaustiveness.rs:50:8
--> $DIR/exhaustiveness.rs:49:8
|
LL | m!(0u8, 1..=255);
| ^^^ pattern `0_u8` not covered
@@ -26,7 +26,7 @@ LL | m!(0u8, 1..=255);
= note: the matched value is of type `u8`

error[E0004]: non-exhaustive patterns: `42_u8` not covered
--> $DIR/exhaustiveness.rs:51:8
--> $DIR/exhaustiveness.rs:50:8
|
LL | m!(0u8, 0..42 | 43..=255);
| ^^^ pattern `42_u8` not covered
@@ -35,7 +35,7 @@ LL | m!(0u8, 0..42 | 43..=255);
= note: the matched value is of type `u8`

error[E0004]: non-exhaustive patterns: `i8::MAX` not covered
--> $DIR/exhaustiveness.rs:52:8
--> $DIR/exhaustiveness.rs:51:8
|
LL | m!(0i8, -128..127);
| ^^^ pattern `i8::MAX` not covered
@@ -44,7 +44,7 @@ LL | m!(0i8, -128..127);
= note: the matched value is of type `i8`

error[E0004]: non-exhaustive patterns: `i8::MAX` not covered
--> $DIR/exhaustiveness.rs:53:8
--> $DIR/exhaustiveness.rs:52:8
|
LL | m!(0i8, -128..=126);
| ^^^ pattern `i8::MAX` not covered
@@ -53,7 +53,7 @@ LL | m!(0i8, -128..=126);
= note: the matched value is of type `i8`

error[E0004]: non-exhaustive patterns: `i8::MIN` not covered
--> $DIR/exhaustiveness.rs:54:8
--> $DIR/exhaustiveness.rs:53:8
|
LL | m!(0i8, -127..=127);
| ^^^ pattern `i8::MIN` not covered
@@ -62,7 +62,7 @@ LL | m!(0i8, -127..=127);
= note: the matched value is of type `i8`

error[E0004]: non-exhaustive patterns: `0_i8` not covered
--> $DIR/exhaustiveness.rs:55:11
--> $DIR/exhaustiveness.rs:54:11
|
LL | match 0i8 {
| ^^^ pattern `0_i8` not covered
@@ -71,7 +71,7 @@ LL | match 0i8 {
= note: the matched value is of type `i8`

error[E0004]: non-exhaustive patterns: `u128::MAX` not covered
--> $DIR/exhaustiveness.rs:60:8
--> $DIR/exhaustiveness.rs:59:8
|
LL | m!(0u128, 0..=ALMOST_MAX);
| ^^^^^ pattern `u128::MAX` not covered
@@ -80,7 +80,7 @@ LL | m!(0u128, 0..=ALMOST_MAX);
= note: the matched value is of type `u128`

error[E0004]: non-exhaustive patterns: `5_u128..=u128::MAX` not covered
--> $DIR/exhaustiveness.rs:61:8
--> $DIR/exhaustiveness.rs:60:8
|
LL | m!(0u128, 0..=4);
| ^^^^^ pattern `5_u128..=u128::MAX` not covered
@@ -89,7 +89,7 @@ LL | m!(0u128, 0..=4);
= note: the matched value is of type `u128`

error[E0004]: non-exhaustive patterns: `0_u128` not covered
--> $DIR/exhaustiveness.rs:62:8
--> $DIR/exhaustiveness.rs:61:8
|
LL | m!(0u128, 1..=u128::MAX);
| ^^^^^ pattern `0_u128` not covered
@@ -98,7 +98,7 @@ LL | m!(0u128, 1..=u128::MAX);
= note: the matched value is of type `u128`

error[E0004]: non-exhaustive patterns: `(126_u8..=127_u8, false)` not covered
--> $DIR/exhaustiveness.rs:70:11
--> $DIR/exhaustiveness.rs:69:11
|
LL | match (0u8, true) {
| ^^^^^^^^^^^ pattern `(126_u8..=127_u8, false)` not covered
2 changes: 0 additions & 2 deletions src/test/ui/pub/pub-restricted-error.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(pub_restricted)]

struct Bar(pub(()));

struct Foo {
2 changes: 1 addition & 1 deletion src/test/ui/pub/pub-restricted-error.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: expected identifier, found `(`
--> $DIR/pub-restricted-error.rs:6:16
--> $DIR/pub-restricted-error.rs:4:16
|
LL | pub(crate) () foo: usize,
| ^ expected identifier
2 changes: 0 additions & 2 deletions src/test/ui/pub/pub-restricted.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(pub_restricted)]

mod a {}

pub (a) fn afn() {} //~ incorrect visibility restriction
12 changes: 6 additions & 6 deletions src/test/ui/pub/pub-restricted.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0704]: incorrect visibility restriction
--> $DIR/pub-restricted.rs:5:6
--> $DIR/pub-restricted.rs:3:6
|
LL | pub (a) fn afn() {}
| ^ help: make this visible only to module `a` with `in`: `in a`
@@ -10,7 +10,7 @@ LL | pub (a) fn afn() {}
`pub(in path::to::module)`: visible only on the specified path

error[E0704]: incorrect visibility restriction
--> $DIR/pub-restricted.rs:6:6
--> $DIR/pub-restricted.rs:4:6
|
LL | pub (b) fn bfn() {}
| ^ help: make this visible only to module `b` with `in`: `in b`
@@ -21,7 +21,7 @@ LL | pub (b) fn bfn() {}
`pub(in path::to::module)`: visible only on the specified path

error[E0704]: incorrect visibility restriction
--> $DIR/pub-restricted.rs:7:6
--> $DIR/pub-restricted.rs:5:6
|
LL | pub (crate::a) fn cfn() {}
| ^^^^^^^^ help: make this visible only to module `crate::a` with `in`: `in crate::a`
@@ -32,7 +32,7 @@ LL | pub (crate::a) fn cfn() {}
`pub(in path::to::module)`: visible only on the specified path

error[E0704]: incorrect visibility restriction
--> $DIR/pub-restricted.rs:24:14
--> $DIR/pub-restricted.rs:22:14
|
LL | pub (a) invalid: usize,
| ^ help: make this visible only to module `a` with `in`: `in a`
@@ -43,7 +43,7 @@ LL | pub (a) invalid: usize,
`pub(in path::to::module)`: visible only on the specified path

error[E0704]: incorrect visibility restriction
--> $DIR/pub-restricted.rs:33:6
--> $DIR/pub-restricted.rs:31:6
|
LL | pub (xyz) fn xyz() {}
| ^^^ help: make this visible only to module `xyz` with `in`: `in xyz`
@@ -54,7 +54,7 @@ LL | pub (xyz) fn xyz() {}
`pub(in path::to::module)`: visible only on the specified path

error[E0742]: visibilities can only be restricted to ancestor modules
--> $DIR/pub-restricted.rs:25:17
--> $DIR/pub-restricted.rs:23:17
|
LL | pub (in x) non_parent_invalid: usize,
| ^
2 changes: 0 additions & 2 deletions src/test/ui/repr/repr-transparent-other-reprs.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(repr_align)]

// See also repr-transparent.rs

#[repr(transparent, C)] //~ ERROR cannot have other repr
8 changes: 4 additions & 4 deletions src/test/ui/repr/repr-transparent-other-reprs.stderr
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
error[E0692]: transparent struct cannot have other repr hints
--> $DIR/repr-transparent-other-reprs.rs:5:8
--> $DIR/repr-transparent-other-reprs.rs:3:8
|
LL | #[repr(transparent, C)]
| ^^^^^^^^^^^ ^

error[E0692]: transparent struct cannot have other repr hints
--> $DIR/repr-transparent-other-reprs.rs:10:8
--> $DIR/repr-transparent-other-reprs.rs:8:8
|
LL | #[repr(transparent, packed)]
| ^^^^^^^^^^^ ^^^^^^

error[E0692]: transparent struct cannot have other repr hints
--> $DIR/repr-transparent-other-reprs.rs:13:8
--> $DIR/repr-transparent-other-reprs.rs:11:8
|
LL | #[repr(transparent, align(2))]
| ^^^^^^^^^^^ ^^^^^^^^

error[E0692]: transparent struct cannot have other repr hints
--> $DIR/repr-transparent-other-reprs.rs:16:8
--> $DIR/repr-transparent-other-reprs.rs:14:8
|
LL | #[repr(transparent)]
| ^^^^^^^^^^^
1 change: 0 additions & 1 deletion src/test/ui/rfc-2093-infer-outlives/explicit-dyn.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#![feature(dyn_trait)]
#![feature(rustc_attrs)]

trait Trait<'x, T> where T: 'x {
2 changes: 1 addition & 1 deletion src/test/ui/rfc-2093-infer-outlives/explicit-dyn.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: rustc_outlives
--> $DIR/explicit-dyn.rs:8:1
--> $DIR/explicit-dyn.rs:7:1
|
LL | / struct Foo<'a, A>
LL | | {
1 change: 0 additions & 1 deletion src/test/ui/rfc-2093-infer-outlives/self-dyn.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#![feature(dyn_trait)]
#![feature(rustc_attrs)]

trait Trait<'x, 's, T> where T: 'x,
2 changes: 1 addition & 1 deletion src/test/ui/rfc-2093-infer-outlives/self-dyn.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: rustc_outlives
--> $DIR/self-dyn.rs:9:1
--> $DIR/self-dyn.rs:8:1
|
LL | / struct Foo<'a, 'b, A>
LL | | {
2 changes: 0 additions & 2 deletions src/test/ui/rfc-2126-crate-paths/crate-path-non-absolute.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(crate_in_paths)]

struct S;

pub mod m {
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0433]: failed to resolve: `crate` in paths can only be used in start position
--> $DIR/crate-path-non-absolute.rs:7:22
--> $DIR/crate-path-non-absolute.rs:5:22
|
LL | let s = ::m::crate::S;
| ^^^^^ `crate` in paths can only be used in start position

error[E0433]: failed to resolve: global paths cannot start with `crate`
--> $DIR/crate-path-non-absolute.rs:8:20
--> $DIR/crate-path-non-absolute.rs:6:20
|
LL | let s1 = ::crate::S;
| ^^^^^ global paths cannot start with `crate`
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(crate_in_paths)]

fn main() {
let crate = 0;
//~^ ERROR expected unit struct, unit variant or constant, found module `crate`
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0532]: expected unit struct, unit variant or constant, found module `crate`
--> $DIR/keyword-crate-as-identifier.rs:4:9
--> $DIR/keyword-crate-as-identifier.rs:2:9
|
LL | let crate = 0;
| ^^^^^ not a unit struct, unit variant or constant
3 changes: 3 additions & 0 deletions src/test/ui/rfc-2632-const-trait-impl/stability.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,9 @@
#![feature(const_add)]
#![feature(const_trait_impl)]
#![feature(staged_api)]
#![stable(feature = "rust1", since = "1.0.0")]

#[stable(feature = "rust1", since = "1.0.0")]
pub struct Int(i32);

#[stable(feature = "rust1", since = "1.0.0")]
@@ -16,6 +18,7 @@ impl const std::ops::Sub for Int {
}
}

#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_unstable(feature = "const_add", issue = "none")]
impl const std::ops::Add for Int {
type Output = Self;
4 changes: 2 additions & 2 deletions src/test/ui/rfc-2632-const-trait-impl/stability.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: trait methods cannot be stable const fn
--> $DIR/stability.rs:13:5
--> $DIR/stability.rs:15:5
|
LL | / fn sub(self, rhs: Self) -> Self {
LL | |
@@ -8,7 +8,7 @@ LL | | }
| |_____^

error: `<Int as Add>::add` is not yet stable as a const fn
--> $DIR/stability.rs:31:5
--> $DIR/stability.rs:34:5
|
LL | Int(1i32) + Int(2i32)
| ^^^^^^^^^^^^^^^^^^^^^
2 changes: 0 additions & 2 deletions src/test/ui/rust-2018/uniform-paths/issue-56596.rs
Original file line number Diff line number Diff line change
@@ -2,8 +2,6 @@
// compile-flags: --extern issue_56596
// aux-build:issue-56596.rs

#![feature(uniform_paths)]

mod m {
pub mod issue_56596 {}
}
4 changes: 2 additions & 2 deletions src/test/ui/rust-2018/uniform-paths/issue-56596.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0659]: `issue_56596` is ambiguous
--> $DIR/issue-56596.rs:12:5
--> $DIR/issue-56596.rs:10:5
|
LL | use issue_56596;
| ^^^^^^^^^^^ ambiguous name
@@ -8,7 +8,7 @@ LL | use issue_56596;
= note: `issue_56596` could refer to a crate passed with `--extern`
= help: use `::issue_56596` to refer to this crate unambiguously
note: `issue_56596` could also refer to the module imported here
--> $DIR/issue-56596.rs:11:5
--> $DIR/issue-56596.rs:9:5
|
LL | use m::*;
| ^^^^
2 changes: 1 addition & 1 deletion src/test/ui/span/issue-23827.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Regression test for #23827

#![feature(core, fn_traits, unboxed_closures)]
#![feature(fn_traits, unboxed_closures)]

pub struct Prototype {
pub target: u32
Original file line number Diff line number Diff line change
@@ -3,4 +3,5 @@
#[unstable()] //~ ERROR: stability attributes may not be used
#[stable()] //~ ERROR: stability attributes may not be used
#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
//~^ ERROR missing 'since'
fn main() {}
Original file line number Diff line number Diff line change
@@ -16,6 +16,13 @@ error[E0734]: stability attributes may not be used outside of the standard libra
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors
error[E0542]: missing 'since'
--> $DIR/stability-attribute-non-staged-force-unstable.rs:5:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0734`.
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#[unstable()] //~ ERROR: stability attributes may not be used
#[stable()] //~ ERROR: stability attributes may not be used
#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
//~^ ERROR missing 'since'
fn main() {}
Original file line number Diff line number Diff line change
@@ -16,6 +16,13 @@ error[E0734]: stability attributes may not be used outside of the standard libra
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 3 previous errors
error[E0542]: missing 'since'
--> $DIR/stability-attribute-non-staged.rs:3:1
|
LL | #[rustc_deprecated()]
| ^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0734`.
Some errors have detailed explanations: E0542, E0734.
For more information about an error, try `rustc --explain E0542`.
Original file line number Diff line number Diff line change
@@ -19,10 +19,12 @@ mod bogus_attribute_types_2 {

#[stable(feature = "a", since = "b")]
#[rustc_deprecated] //~ ERROR malformed `rustc_deprecated` attribute
//~^ ERROR missing 'since'
fn f5() { }

#[stable(feature = "a", since = "b")]
#[rustc_deprecated = "a"] //~ ERROR malformed `rustc_deprecated` attribute
//~^ ERROR missing 'since'
fn f6() { }
}

Original file line number Diff line number Diff line change
@@ -29,10 +29,23 @@ LL | #[rustc_deprecated]
| ^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[rustc_deprecated(since = "version", reason = "...")]`

error: malformed `rustc_deprecated` attribute input
--> $DIR/stability-attribute-sanity-4.rs:25:5
--> $DIR/stability-attribute-sanity-4.rs:26:5
|
LL | #[rustc_deprecated = "a"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[rustc_deprecated(since = "version", reason = "...")]`

error: aborting due to 6 previous errors
error[E0542]: missing 'since'
--> $DIR/stability-attribute-sanity-4.rs:21:5
|
LL | #[rustc_deprecated]
| ^^^^^^^^^^^^^^^^^^^

error[E0542]: missing 'since'
--> $DIR/stability-attribute-sanity-4.rs:26:5
|
LL | #[rustc_deprecated = "a"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 8 previous errors

For more information about this error, try `rustc --explain E0542`.
Original file line number Diff line number Diff line change
@@ -65,6 +65,7 @@ fn multiple3() { }
pub const fn multiple4() { }

#[stable(feature = "a", since = "1.0.0")] //~ ERROR invalid deprecation version found
//~^ ERROR feature `a` is declared stable since 1.0.0
#[rustc_deprecated(since = "invalid", reason = "text")]
fn invalid_deprecation_version() {}

Original file line number Diff line number Diff line change
@@ -110,17 +110,23 @@ error: invalid deprecation version found
|
LL | #[stable(feature = "a", since = "1.0.0")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid deprecation version
LL | #[rustc_deprecated(since = "invalid", reason = "text")]
...
LL | fn invalid_deprecation_version() {}
| ----------------------------------- the stability attribute annotates this item

error[E0549]: rustc_deprecated attribute must be paired with either stable or unstable attribute
--> $DIR/stability-attribute-sanity.rs:71:1
--> $DIR/stability-attribute-sanity.rs:72:1
|
LL | #[rustc_deprecated(since = "a", reason = "text")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 19 previous errors
error[E0711]: feature `a` is declared stable since 1.0.0, but was previously declared stable since b
--> $DIR/stability-attribute-sanity.rs:67:1
|
LL | #[stable(feature = "a", since = "1.0.0")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 20 previous errors

Some errors have detailed explanations: E0539, E0541, E0542, E0543, E0544, E0546, E0547, E0549, E0550.
For more information about an error, try `rustc --explain E0539`.
1 change: 0 additions & 1 deletion src/test/ui/target-feature/invalid-attribute.rs
Original file line number Diff line number Diff line change
@@ -12,7 +12,6 @@
// ignore-sparc
// ignore-sparc64

#![feature(target_feature)]
#![warn(unused_attributes)]

#[target_feature = "+sse2"]
30 changes: 15 additions & 15 deletions src/test/ui/target-feature/invalid-attribute.stderr
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
error: malformed `target_feature` attribute input
--> $DIR/invalid-attribute.rs:18:1
--> $DIR/invalid-attribute.rs:17:1
|
LL | #[target_feature = "+sse2"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: must be of the form: `#[target_feature(enable = "name")]`

error: the feature named `foo` is not valid for this target
--> $DIR/invalid-attribute.rs:20:18
--> $DIR/invalid-attribute.rs:19:18
|
LL | #[target_feature(enable = "foo")]
| ^^^^^^^^^^^^^^ `foo` is not valid for this target

error: malformed `target_feature` attribute input
--> $DIR/invalid-attribute.rs:23:18
--> $DIR/invalid-attribute.rs:22:18
|
LL | #[target_feature(bar)]
| ^^^ help: must be of the form: `enable = ".."`

error: malformed `target_feature` attribute input
--> $DIR/invalid-attribute.rs:25:18
--> $DIR/invalid-attribute.rs:24:18
|
LL | #[target_feature(disable = "baz")]
| ^^^^^^^^^^^^^^^ help: must be of the form: `enable = ".."`

error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions
--> $DIR/invalid-attribute.rs:29:1
--> $DIR/invalid-attribute.rs:28:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL | fn bar() {}
= help: add `#![feature(target_feature_11)]` to the crate attributes to enable

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:35:1
--> $DIR/invalid-attribute.rs:34:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -44,7 +44,7 @@ LL | mod another {}
| -------------- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:40:1
--> $DIR/invalid-attribute.rs:39:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -53,7 +53,7 @@ LL | const FOO: usize = 7;
| --------------------- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:45:1
--> $DIR/invalid-attribute.rs:44:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -62,7 +62,7 @@ LL | struct Foo;
| ----------- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:50:1
--> $DIR/invalid-attribute.rs:49:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -71,7 +71,7 @@ LL | enum Bar {}
| ----------- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:55:1
--> $DIR/invalid-attribute.rs:54:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -84,7 +84,7 @@ LL | | }
| |_- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:63:1
--> $DIR/invalid-attribute.rs:62:1
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -93,13 +93,13 @@ LL | trait Baz {}
| ------------ not a function

error: cannot use `#[inline(always)]` with `#[target_feature]`
--> $DIR/invalid-attribute.rs:68:1
--> $DIR/invalid-attribute.rs:67:1
|
LL | #[inline(always)]
| ^^^^^^^^^^^^^^^^^

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:86:5
--> $DIR/invalid-attribute.rs:85:5
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -111,7 +111,7 @@ LL | | }
| |_____- not a function

error: attribute should be applied to a function
--> $DIR/invalid-attribute.rs:94:5
--> $DIR/invalid-attribute.rs:93:5
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -120,7 +120,7 @@ LL | || {};
| ----- not a function

error[E0658]: `#[target_feature(..)]` can only be applied to `unsafe` functions
--> $DIR/invalid-attribute.rs:78:5
--> $DIR/invalid-attribute.rs:77:5
|
LL | #[target_feature(enable = "sse2")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 changes: 1 addition & 1 deletion src/test/ui/try-trait/try-on-option-diagnostics.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#![feature(try_trait)]
// edition:2018

fn main() {}

fn a_function() -> u32 {
2 changes: 0 additions & 2 deletions src/test/ui/try-trait/try-on-option.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(try_trait)]

fn main() {}

fn foo() -> Result<u32, ()> {
4 changes: 2 additions & 2 deletions src/test/ui/try-trait/try-on-option.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`
--> $DIR/try-on-option.rs:7:6
--> $DIR/try-on-option.rs:5:6
|
LL | / fn foo() -> Result<u32, ()> {
LL | | let x: Option<u32> = None;
@@ -12,7 +12,7 @@ LL | | }
= help: the trait `FromResidual<Option<Infallible>>` is not implemented for `Result<u32, ()>`

error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
--> $DIR/try-on-option.rs:13:6
--> $DIR/try-on-option.rs:11:6
|
LL | / fn bar() -> u32 {
LL | | let x: Option<u32> = None;
1 change: 0 additions & 1 deletion src/test/ui/type-alias-impl-trait/issue-63355.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#![feature(type_alias_impl_trait)]
#![feature(type_alias_impl_trait)]
#![allow(incomplete_features)]

pub trait Foo {}
4 changes: 2 additions & 2 deletions src/test/ui/type-alias-impl-trait/issue-63355.stderr
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
error[E0271]: type mismatch resolving `<() as Bar>::Foo == ()`
--> $DIR/issue-63355.rs:34:20
--> $DIR/issue-63355.rs:33:20
|
LL | pub type FooImpl = impl Foo;
| -------- the found opaque type
LL | pub type BarImpl = impl Bar<Foo = FooImpl>;
| ^^^^^^^^^^^^^^^^^^^^^^^ type mismatch resolving `<() as Bar>::Foo == ()`
|
note: expected this to be `()`
--> $DIR/issue-63355.rs:24:16
--> $DIR/issue-63355.rs:23:16
|
LL | type Foo = FooImpl;
| ^^^^^^^
1 change: 0 additions & 1 deletion src/test/ui/type-alias-impl-trait/issue-65384.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#![feature(type_alias_impl_trait)]
#![feature(type_alias_impl_trait)]
#![allow(incomplete_features)]

trait MyTrait {}
4 changes: 2 additions & 2 deletions src/test/ui/type-alias-impl-trait/issue-65384.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error: cannot implement trait on type alias impl trait
--> $DIR/issue-65384.rs:11:1
--> $DIR/issue-65384.rs:10:1
|
LL | impl MyTrait for Bar {}
| ^^^^^^^^^^^^^^^^^^^^
|
note: type alias impl trait defined here
--> $DIR/issue-65384.rs:9:12
--> $DIR/issue-65384.rs:8:12
|
LL | type Bar = impl MyTrait;
| ^^^^^^^^^^^^
2 changes: 0 additions & 2 deletions src/test/ui/type/type-parameter-defaults-referencing-Self.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Test a default that references `Self` which is then used in an object type.
// Issue #18956.

#![feature(default_type_params)]

trait Foo<T=Self> {
fn method(&self);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0393]: the type parameter `T` must be explicitly specified
--> $DIR/type-parameter-defaults-referencing-Self.rs:10:16
--> $DIR/type-parameter-defaults-referencing-Self.rs:8:16
|
LL | / trait Foo<T=Self> {
LL | | fn method(&self);
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@
// Fn to be used where FnMut is implemented.

#![feature(fn_traits, unboxed_closures)]
#![feature(overloaded_calls)]

use std::ops::{Fn,FnMut,FnOnce};

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0277]: expected a `Fn<(isize,)>` closure, found `S`
--> $DIR/unboxed-closures-fnmut-as-fn.rs:28:21
--> $DIR/unboxed-closures-fnmut-as-fn.rs:27:21
|
LL | let x = call_it(&S, 22);
| ------- ^^ expected an `Fn<(isize,)>` closure, found `S`
@@ -8,7 +8,7 @@ LL | let x = call_it(&S, 22);
|
= help: the trait `Fn<(isize,)>` is not implemented for `S`
note: required by a bound in `call_it`
--> $DIR/unboxed-closures-fnmut-as-fn.rs:23:14
--> $DIR/unboxed-closures-fnmut-as-fn.rs:22:14
|
LL | fn call_it<F:Fn(isize)->isize>(f: &F, x: isize) -> isize {
| ^^^^^^^^^^^^^^^^ required by this bound in `call_it`
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![feature(core, fn_traits, unboxed_closures)]
#![feature(fn_traits, unboxed_closures)]

use std::marker::PhantomData;