Auto merge of #82249 - JohnTitor:rollup-3jbqija, r=JohnTitor
Rollup of 8 pull requests Successful merges: - #82055 (Add diagnostics for specific cases for const/type mismatch err) - #82155 (Use !Sync std::lazy::OnceCell in usefulness checking) - #82202 (add specs for riscv32/riscv64 musl targets) - #82203 (Move some tests to more reasonable directories - 4) - #82211 (make `suggest_setup` help messages better) - #82212 (Remove redundant rustc_data_structures path component) - #82240 (remove useless ?s (clippy::needless_question_marks)) - #82243 (Add more intra-doc links to std::io) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
25a2c13e9d
76 changed files with 209 additions and 77 deletions
|
@ -507,12 +507,7 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> {
|
||||||
|
|
||||||
// Unify the original value for each variable with the value
|
// Unify the original value for each variable with the value
|
||||||
// taken from `query_response` (after applying `result_subst`).
|
// taken from `query_response` (after applying `result_subst`).
|
||||||
Ok(self.unify_canonical_vars(
|
self.unify_canonical_vars(cause, param_env, original_values, substituted_query_response)
|
||||||
cause,
|
|
||||||
param_env,
|
|
||||||
original_values,
|
|
||||||
substituted_query_response,
|
|
||||||
)?)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts the region constraints resulting from a query into an
|
/// Converts the region constraints resulting from a query into an
|
||||||
|
|
|
@ -253,7 +253,7 @@ impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for SubstsRef<'tcx> {
|
||||||
fn decode(decoder: &mut D) -> Result<Self, D::Error> {
|
fn decode(decoder: &mut D) -> Result<Self, D::Error> {
|
||||||
let len = decoder.read_usize()?;
|
let len = decoder.read_usize()?;
|
||||||
let tcx = decoder.tcx();
|
let tcx = decoder.tcx();
|
||||||
Ok(tcx.mk_substs((0..len).map(|_| Decodable::decode(decoder)))?)
|
tcx.mk_substs((0..len).map(|_| Decodable::decode(decoder)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ impl<'tcx, D: TyDecoder<'tcx>> RefDecodable<'tcx, D> for ty::AdtDef {
|
||||||
impl<'tcx, D: TyDecoder<'tcx>> RefDecodable<'tcx, D> for ty::List<Ty<'tcx>> {
|
impl<'tcx, D: TyDecoder<'tcx>> RefDecodable<'tcx, D> for ty::List<Ty<'tcx>> {
|
||||||
fn decode(decoder: &mut D) -> Result<&'tcx Self, D::Error> {
|
fn decode(decoder: &mut D) -> Result<&'tcx Self, D::Error> {
|
||||||
let len = decoder.read_usize()?;
|
let len = decoder.read_usize()?;
|
||||||
Ok(decoder.tcx().mk_type_list((0..len).map(|_| Decodable::decode(decoder)))?)
|
decoder.tcx().mk_type_list((0..len).map(|_| Decodable::decode(decoder)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,9 +323,7 @@ impl<'tcx, D: TyDecoder<'tcx>> RefDecodable<'tcx, D>
|
||||||
{
|
{
|
||||||
fn decode(decoder: &mut D) -> Result<&'tcx Self, D::Error> {
|
fn decode(decoder: &mut D) -> Result<&'tcx Self, D::Error> {
|
||||||
let len = decoder.read_usize()?;
|
let len = decoder.read_usize()?;
|
||||||
Ok(decoder
|
decoder.tcx().mk_poly_existential_predicates((0..len).map(|_| Decodable::decode(decoder)))
|
||||||
.tcx()
|
|
||||||
.mk_poly_existential_predicates((0..len).map(|_| Decodable::decode(decoder)))?)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -607,7 +607,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
return Ok(self);
|
return Ok(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(with_no_queries(|| {
|
return with_no_queries(|| {
|
||||||
let def_key = self.tcx().def_key(def_id);
|
let def_key = self.tcx().def_key(def_id);
|
||||||
if let Some(name) = def_key.disambiguated_data.data.get_opt_name() {
|
if let Some(name) = def_key.disambiguated_data.data.get_opt_name() {
|
||||||
p!(write("{}", name));
|
p!(write("{}", name));
|
||||||
|
@ -649,7 +649,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
p!(" Sized");
|
p!(" Sized");
|
||||||
}
|
}
|
||||||
Ok(self)
|
Ok(self)
|
||||||
})?);
|
});
|
||||||
}
|
}
|
||||||
ty::Str => p!("str"),
|
ty::Str => p!("str"),
|
||||||
ty::Generator(did, substs, movability) => {
|
ty::Generator(did, substs, movability) => {
|
||||||
|
|
|
@ -154,7 +154,7 @@ pub fn relate_substs<R: TypeRelation<'tcx>>(
|
||||||
relation.relate_with_variance(variance, a, b)
|
relation.relate_with_variance(variance, a, b)
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(tcx.mk_substs(params)?)
|
tcx.mk_substs(params)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> Relate<'tcx> for ty::FnSig<'tcx> {
|
impl<'tcx> Relate<'tcx> for ty::FnSig<'tcx> {
|
||||||
|
@ -647,7 +647,7 @@ impl<'tcx> Relate<'tcx> for &'tcx ty::List<ty::Binder<ty::ExistentialPredicate<'
|
||||||
_ => Err(TypeError::ExistentialMismatch(expected_found(relation, a, b))),
|
_ => Err(TypeError::ExistentialMismatch(expected_found(relation, a, b))),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Ok(tcx.mk_poly_existential_predicates(v)?)
|
tcx.mk_poly_existential_predicates(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
.get_raw(vtable_slot.alloc_id)?
|
.get_raw(vtable_slot.alloc_id)?
|
||||||
.read_ptr_sized(self, vtable_slot)?
|
.read_ptr_sized(self, vtable_slot)?
|
||||||
.check_init()?;
|
.check_init()?;
|
||||||
Ok(self.memory.get_fn(fn_ptr)?)
|
self.memory.get_fn(fn_ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the drop fn instance as well as the actual dynamic type.
|
/// Returns the drop fn instance as well as the actual dynamic type.
|
||||||
|
|
|
@ -6,8 +6,8 @@ use std::io::{self, Write};
|
||||||
pub struct GraphvizWriter<
|
pub struct GraphvizWriter<
|
||||||
'a,
|
'a,
|
||||||
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
||||||
NodeContentFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
NodeContentFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||||
EdgeLabelsFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
EdgeLabelsFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||||
> {
|
> {
|
||||||
graph: &'a G,
|
graph: &'a G,
|
||||||
is_subgraph: bool,
|
is_subgraph: bool,
|
||||||
|
@ -20,8 +20,8 @@ pub struct GraphvizWriter<
|
||||||
impl<
|
impl<
|
||||||
'a,
|
'a,
|
||||||
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
||||||
NodeContentFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
NodeContentFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||||
EdgeLabelsFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
EdgeLabelsFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||||
> GraphvizWriter<'a, G, NodeContentFn, EdgeLabelsFn>
|
> GraphvizWriter<'a, G, NodeContentFn, EdgeLabelsFn>
|
||||||
{
|
{
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
|
|
@ -289,7 +289,6 @@ use super::{PatternFoldable, PatternFolder};
|
||||||
|
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_data_structures::sync::OnceCell;
|
|
||||||
|
|
||||||
use rustc_arena::TypedArena;
|
use rustc_arena::TypedArena;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
|
@ -300,6 +299,7 @@ use rustc_span::Span;
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::iter::{FromIterator, IntoIterator};
|
use std::iter::{FromIterator, IntoIterator};
|
||||||
|
use std::lazy::OnceCell;
|
||||||
|
|
||||||
crate struct MatchCheckCtxt<'a, 'tcx> {
|
crate struct MatchCheckCtxt<'a, 'tcx> {
|
||||||
crate tcx: TyCtxt<'tcx>,
|
crate tcx: TyCtxt<'tcx>,
|
||||||
|
|
|
@ -783,9 +783,11 @@ supported_targets! {
|
||||||
("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf),
|
("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf),
|
||||||
("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf),
|
("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf),
|
||||||
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
|
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
|
||||||
|
("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl),
|
||||||
("riscv64imac-unknown-none-elf", riscv64imac_unknown_none_elf),
|
("riscv64imac-unknown-none-elf", riscv64imac_unknown_none_elf),
|
||||||
("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf),
|
("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf),
|
||||||
("riscv64gc-unknown-linux-gnu", riscv64gc_unknown_linux_gnu),
|
("riscv64gc-unknown-linux-gnu", riscv64gc_unknown_linux_gnu),
|
||||||
|
("riscv64gc-unknown-linux-musl", riscv64gc_unknown_linux_musl),
|
||||||
|
|
||||||
("aarch64-unknown-none", aarch64_unknown_none),
|
("aarch64-unknown-none", aarch64_unknown_none),
|
||||||
("aarch64-unknown-none-softfloat", aarch64_unknown_none_softfloat),
|
("aarch64-unknown-none-softfloat", aarch64_unknown_none_softfloat),
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
use crate::spec::{CodeModel, Target, TargetOptions};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
Target {
|
||||||
|
llvm_target: "riscv32-unknown-linux-musl".to_string(),
|
||||||
|
pointer_width: 32,
|
||||||
|
data_layout: "e-m:e-p:32:32-i64:64-n32-S128".to_string(),
|
||||||
|
arch: "riscv32".to_string(),
|
||||||
|
options: TargetOptions {
|
||||||
|
unsupported_abis: super::riscv_base::unsupported_abis(),
|
||||||
|
code_model: Some(CodeModel::Medium),
|
||||||
|
cpu: "generic-rv32".to_string(),
|
||||||
|
features: "+m,+a,+f,+d,+c".to_string(),
|
||||||
|
llvm_abiname: "ilp32d".to_string(),
|
||||||
|
max_atomic_width: Some(32),
|
||||||
|
..super::linux_musl_base::opts()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
use crate::spec::{CodeModel, Target, TargetOptions};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
Target {
|
||||||
|
llvm_target: "riscv64-unknown-linux-musl".to_string(),
|
||||||
|
pointer_width: 64,
|
||||||
|
data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".to_string(),
|
||||||
|
arch: "riscv64".to_string(),
|
||||||
|
options: TargetOptions {
|
||||||
|
unsupported_abis: super::riscv_base::unsupported_abis(),
|
||||||
|
code_model: Some(CodeModel::Medium),
|
||||||
|
cpu: "generic-rv64".to_string(),
|
||||||
|
features: "+m,+a,+f,+d,+c".to_string(),
|
||||||
|
llvm_abiname: "lp64d".to_string(),
|
||||||
|
max_atomic_width: Some(64),
|
||||||
|
..super::linux_musl_base::opts()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -43,7 +43,7 @@ where
|
||||||
info!("fully_perform({:?})", self);
|
info!("fully_perform({:?})", self);
|
||||||
}
|
}
|
||||||
|
|
||||||
scrape_region_constraints(infcx, || Ok((self.closure)(infcx)?))
|
scrape_region_constraints(infcx, || (self.closure)(infcx))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,9 @@ use crate::astconv::{
|
||||||
use crate::errors::AssocTypeBindingNotAllowed;
|
use crate::errors::AssocTypeBindingNotAllowed;
|
||||||
use crate::structured_errors::{StructuredDiagnostic, WrongNumberOfGenericArgs};
|
use crate::structured_errors::{StructuredDiagnostic, WrongNumberOfGenericArgs};
|
||||||
use rustc_ast::ast::ParamKindOrd;
|
use rustc_ast::ast::ParamKindOrd;
|
||||||
use rustc_errors::{struct_span_err, Applicability, ErrorReported};
|
use rustc_errors::{struct_span_err, Applicability, DiagnosticBuilder, ErrorReported};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_hir::GenericArg;
|
use rustc_hir::GenericArg;
|
||||||
use rustc_middle::ty::{
|
use rustc_middle::ty::{
|
||||||
|
@ -43,23 +44,57 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specific suggestion set for diagnostics
|
let add_braces_suggestion = |arg: &GenericArg<'_>, err: &mut DiagnosticBuilder<'_>| {
|
||||||
match (arg, ¶m.kind) {
|
|
||||||
(
|
|
||||||
GenericArg::Type(hir::Ty { kind: hir::TyKind::Path { .. }, .. }),
|
|
||||||
GenericParamDefKind::Const { .. },
|
|
||||||
) => {
|
|
||||||
let suggestions = vec![
|
let suggestions = vec![
|
||||||
(arg.span().shrink_to_lo(), String::from("{ ")),
|
(arg.span().shrink_to_lo(), String::from("{ ")),
|
||||||
(arg.span().shrink_to_hi(), String::from(" }")),
|
(arg.span().shrink_to_hi(), String::from(" }")),
|
||||||
];
|
];
|
||||||
err.multipart_suggestion(
|
err.multipart_suggestion(
|
||||||
"if this generic argument was intended as a const parameter, \
|
"if this generic argument was intended as a const parameter, \
|
||||||
try surrounding it with braces:",
|
surround it with braces",
|
||||||
suggestions,
|
suggestions,
|
||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Specific suggestion set for diagnostics
|
||||||
|
match (arg, ¶m.kind) {
|
||||||
|
(
|
||||||
|
GenericArg::Type(hir::Ty {
|
||||||
|
kind: hir::TyKind::Path(rustc_hir::QPath::Resolved(_, path)),
|
||||||
|
..
|
||||||
|
}),
|
||||||
|
GenericParamDefKind::Const,
|
||||||
|
) => match path.res {
|
||||||
|
Res::Err => {
|
||||||
|
add_braces_suggestion(arg, &mut err);
|
||||||
|
err.set_primary_message(
|
||||||
|
"unresolved item provided when a constant was expected",
|
||||||
|
)
|
||||||
|
.emit();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
Res::Def(DefKind::TyParam, src_def_id) => {
|
||||||
|
if let Some(param_local_id) = param.def_id.as_local() {
|
||||||
|
let param_hir_id = tcx.hir().local_def_id_to_hir_id(param_local_id);
|
||||||
|
let param_name = tcx.hir().ty_param_name(param_hir_id);
|
||||||
|
let param_type = tcx.type_of(param.def_id);
|
||||||
|
if param_type.is_suggestable() {
|
||||||
|
err.span_suggestion(
|
||||||
|
tcx.def_span(src_def_id),
|
||||||
|
"consider changing this type paramater to a `const`-generic",
|
||||||
|
format!("const {}: {}", param_name, param_type),
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => add_braces_suggestion(arg, &mut err),
|
||||||
|
},
|
||||||
|
(
|
||||||
|
GenericArg::Type(hir::Ty { kind: hir::TyKind::Path(_), .. }),
|
||||||
|
GenericParamDefKind::Const,
|
||||||
|
) => add_braces_suggestion(arg, &mut err),
|
||||||
(
|
(
|
||||||
GenericArg::Type(hir::Ty { kind: hir::TyKind::Array(_, len), .. }),
|
GenericArg::Type(hir::Ty { kind: hir::TyKind::Array(_, len), .. }),
|
||||||
GenericParamDefKind::Const { .. },
|
GenericParamDefKind::Const { .. },
|
||||||
|
|
|
@ -1141,7 +1141,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
let trait_def_ids: FxHashSet<DefId> = param
|
let trait_def_ids: FxHashSet<DefId> = param
|
||||||
.bounds
|
.bounds
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|bound| Some(bound.trait_ref()?.trait_def_id()?))
|
.filter_map(|bound| bound.trait_ref()?.trait_def_id())
|
||||||
.collect();
|
.collect();
|
||||||
if !candidates.iter().any(|t| trait_def_ids.contains(&t.def_id)) {
|
if !candidates.iter().any(|t| trait_def_ids.contains(&t.def_id)) {
|
||||||
err.span_suggestions(
|
err.span_suggestions(
|
||||||
|
|
|
@ -231,7 +231,7 @@ pub struct Stdin {
|
||||||
inner: &'static Mutex<BufReader<StdinRaw>>,
|
inner: &'static Mutex<BufReader<StdinRaw>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A locked reference to the `Stdin` handle.
|
/// A locked reference to the [`Stdin`] handle.
|
||||||
///
|
///
|
||||||
/// This handle implements both the [`Read`] and [`BufRead`] traits, and
|
/// This handle implements both the [`Read`] and [`BufRead`] traits, and
|
||||||
/// is constructed via the [`Stdin::lock`] method.
|
/// is constructed via the [`Stdin::lock`] method.
|
||||||
|
@ -494,7 +494,7 @@ pub struct Stdout {
|
||||||
inner: Pin<&'static ReentrantMutex<RefCell<LineWriter<StdoutRaw>>>>,
|
inner: Pin<&'static ReentrantMutex<RefCell<LineWriter<StdoutRaw>>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A locked reference to the `Stdout` handle.
|
/// A locked reference to the [`Stdout`] handle.
|
||||||
///
|
///
|
||||||
/// This handle implements the [`Write`] trait, and is constructed via
|
/// This handle implements the [`Write`] trait, and is constructed via
|
||||||
/// the [`Stdout::lock`] method.
|
/// the [`Stdout::lock`] method.
|
||||||
|
@ -708,9 +708,9 @@ pub struct Stderr {
|
||||||
inner: Pin<&'static ReentrantMutex<RefCell<StderrRaw>>>,
|
inner: Pin<&'static ReentrantMutex<RefCell<StderrRaw>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A locked reference to the `Stderr` handle.
|
/// A locked reference to the [`Stderr`] handle.
|
||||||
///
|
///
|
||||||
/// This handle implements the `Write` trait and is constructed via
|
/// This handle implements the [`Write`] trait and is constructed via
|
||||||
/// the [`Stderr::lock`] method.
|
/// the [`Stderr::lock`] method.
|
||||||
///
|
///
|
||||||
/// ### Note: Windows Portability Consideration
|
/// ### Note: Windows Portability Consideration
|
||||||
|
|
|
@ -22,7 +22,10 @@ fn main() {
|
||||||
let suggest_setup = !config.config.exists() && !matches!(config.cmd, Subcommand::Setup { .. });
|
let suggest_setup = !config.config.exists() && !matches!(config.cmd, Subcommand::Setup { .. });
|
||||||
if suggest_setup {
|
if suggest_setup {
|
||||||
println!("warning: you have not made a `config.toml`");
|
println!("warning: you have not made a `config.toml`");
|
||||||
println!("help: consider running `x.py setup` or copying `config.toml.example`");
|
println!(
|
||||||
|
"help: consider running `./x.py setup` or copying `config.toml.example` by running \
|
||||||
|
`cp config.toml.example config.toml`"
|
||||||
|
);
|
||||||
} else if let Some(suggestion) = &changelog_suggestion {
|
} else if let Some(suggestion) = &changelog_suggestion {
|
||||||
println!("{}", suggestion);
|
println!("{}", suggestion);
|
||||||
}
|
}
|
||||||
|
@ -31,7 +34,10 @@ fn main() {
|
||||||
|
|
||||||
if suggest_setup {
|
if suggest_setup {
|
||||||
println!("warning: you have not made a `config.toml`");
|
println!("warning: you have not made a `config.toml`");
|
||||||
println!("help: consider running `x.py setup` or copying `config.toml.example`");
|
println!(
|
||||||
|
"help: consider running `./x.py setup` or copying `config.toml.example` by running \
|
||||||
|
`cp config.toml.example config.toml`"
|
||||||
|
);
|
||||||
} else if let Some(suggestion) = &changelog_suggestion {
|
} else if let Some(suggestion) = &changelog_suggestion {
|
||||||
println!("{}", suggestion);
|
println!("{}", suggestion);
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,7 +204,9 @@ target | std | host | notes
|
||||||
`powerpc64-unknown-linux-musl` | ? | |
|
`powerpc64-unknown-linux-musl` | ? | |
|
||||||
`powerpc64-wrs-vxworks` | ? | |
|
`powerpc64-wrs-vxworks` | ? | |
|
||||||
`powerpc64le-unknown-linux-musl` | ? | |
|
`powerpc64le-unknown-linux-musl` | ? | |
|
||||||
|
`riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0)
|
||||||
`riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33)
|
`riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33)
|
||||||
|
`riscv32gc-unknown-linux-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
|
||||||
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||||
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
||||||
`sparc64-unknown-openbsd` | ? | |
|
`sparc64-unknown-openbsd` | ? | |
|
||||||
|
|
|
@ -4,7 +4,7 @@ error[E0747]: type provided when a constant was expected
|
||||||
LL | fn test<const N: usize>() -> Foo<N> {
|
LL | fn test<const N: usize>() -> Foo<N> {
|
||||||
| ^
|
| ^
|
||||||
|
|
|
|
||||||
help: if this generic argument was intended as a const parameter, try surrounding it with braces:
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
|
||||||
LL | fn test<const N: usize>() -> Foo<{ N }> {
|
LL | fn test<const N: usize>() -> Foo<{ N }> {
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
|
18
src/test/ui/const-generics/diagnostics.rs
Normal file
18
src/test/ui/const-generics/diagnostics.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#![crate_type="lib"]
|
||||||
|
#![feature(min_const_generics)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
struct A<const N: u8>;
|
||||||
|
trait Foo {}
|
||||||
|
impl Foo for A<N> {}
|
||||||
|
//~^ ERROR cannot find type
|
||||||
|
//~| unresolved item provided when a constant
|
||||||
|
|
||||||
|
struct B<const N: u8>;
|
||||||
|
impl<N> Foo for B<N> {}
|
||||||
|
//~^ ERROR type provided when a constant
|
||||||
|
|
||||||
|
struct C<const C: u8, const N: u8>;
|
||||||
|
impl<const N: u8> Foo for C<N, T> {}
|
||||||
|
//~^ ERROR cannot find type
|
||||||
|
//~| unresolved item provided when a constant
|
52
src/test/ui/const-generics/diagnostics.stderr
Normal file
52
src/test/ui/const-generics/diagnostics.stderr
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
error[E0412]: cannot find type `N` in this scope
|
||||||
|
--> $DIR/diagnostics.rs:7:16
|
||||||
|
|
|
||||||
|
LL | struct A<const N: u8>;
|
||||||
|
| ---------------------- similarly named struct `A` defined here
|
||||||
|
LL | trait Foo {}
|
||||||
|
LL | impl Foo for A<N> {}
|
||||||
|
| ^ help: a struct with a similar name exists: `A`
|
||||||
|
|
||||||
|
error[E0412]: cannot find type `T` in this scope
|
||||||
|
--> $DIR/diagnostics.rs:16:32
|
||||||
|
|
|
||||||
|
LL | struct A<const N: u8>;
|
||||||
|
| ---------------------- similarly named struct `A` defined here
|
||||||
|
...
|
||||||
|
LL | impl<const N: u8> Foo for C<N, T> {}
|
||||||
|
| ^ help: a struct with a similar name exists: `A`
|
||||||
|
|
||||||
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
|
--> $DIR/diagnostics.rs:7:16
|
||||||
|
|
|
||||||
|
LL | impl Foo for A<N> {}
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
||||||
|
LL | impl Foo for A<{ N }> {}
|
||||||
|
| ^ ^
|
||||||
|
|
||||||
|
error[E0747]: type provided when a constant was expected
|
||||||
|
--> $DIR/diagnostics.rs:12:19
|
||||||
|
|
|
||||||
|
LL | impl<N> Foo for B<N> {}
|
||||||
|
| - ^
|
||||||
|
| |
|
||||||
|
| help: consider changing this type paramater to a `const`-generic: `const N: u8`
|
||||||
|
|
||||||
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
|
--> $DIR/diagnostics.rs:16:32
|
||||||
|
|
|
||||||
|
LL | impl<const N: u8> Foo for C<N, T> {}
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
||||||
|
LL | impl<const N: u8> Foo for C<N, { T }> {}
|
||||||
|
| ^ ^
|
||||||
|
|
||||||
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0412, E0747.
|
||||||
|
For more information about an error, try `rustc --explain E0412`.
|
|
@ -20,15 +20,15 @@ impl<const CF: CompileFlag, T> Example<CF, T> {
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
test_1::<CompileFlag::A>();
|
test_1::<CompileFlag::A>();
|
||||||
//~^ ERROR: expected type, found variant
|
//~^ ERROR: expected type, found variant
|
||||||
//~| ERROR: type provided when a constant was expected
|
//~| ERROR: unresolved item provided when a constant was expected
|
||||||
|
|
||||||
test_2::<_, CompileFlag::A>(0);
|
test_2::<_, CompileFlag::A>(0);
|
||||||
//~^ ERROR: expected type, found variant
|
//~^ ERROR: expected type, found variant
|
||||||
//~| ERROR: type provided when a constant was expected
|
//~| ERROR: unresolved item provided when a constant was expected
|
||||||
|
|
||||||
let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
||||||
//~^ ERROR: expected type, found variant
|
//~^ ERROR: expected type, found variant
|
||||||
//~| ERROR: type provided when a constant was expected
|
//~| ERROR: unresolved item provided when a constant was expected
|
||||||
|
|
||||||
let _: Example<Example::ASSOC_FLAG, _> = Example { x: 0 };
|
let _: Example<Example::ASSOC_FLAG, _> = Example { x: 0 };
|
||||||
//~^ ERROR: type provided when a constant was expected
|
//~^ ERROR: type provided when a constant was expected
|
||||||
|
|
|
@ -25,13 +25,13 @@ LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
||||||
| not a type
|
| not a type
|
||||||
| help: try using the variant's enum: `CompileFlag`
|
| help: try using the variant's enum: `CompileFlag`
|
||||||
|
|
||||||
error[E0747]: type provided when a constant was expected
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
--> $DIR/invalid-enum.rs:29:18
|
--> $DIR/invalid-enum.rs:29:18
|
||||||
|
|
|
|
||||||
LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: if this generic argument was intended as a const parameter, try surrounding it with braces:
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
|
||||||
LL | let _: Example<{ CompileFlag::A }, _> = Example { x: 0 };
|
LL | let _: Example<{ CompileFlag::A }, _> = Example { x: 0 };
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -42,29 +42,29 @@ error[E0747]: type provided when a constant was expected
|
||||||
LL | let _: Example<Example::ASSOC_FLAG, _> = Example { x: 0 };
|
LL | let _: Example<Example::ASSOC_FLAG, _> = Example { x: 0 };
|
||||||
| ^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: if this generic argument was intended as a const parameter, try surrounding it with braces:
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
|
||||||
LL | let _: Example<{ Example::ASSOC_FLAG }, _> = Example { x: 0 };
|
LL | let _: Example<{ Example::ASSOC_FLAG }, _> = Example { x: 0 };
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
|
||||||
error[E0747]: type provided when a constant was expected
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
--> $DIR/invalid-enum.rs:21:12
|
--> $DIR/invalid-enum.rs:21:12
|
||||||
|
|
|
|
||||||
LL | test_1::<CompileFlag::A>();
|
LL | test_1::<CompileFlag::A>();
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: if this generic argument was intended as a const parameter, try surrounding it with braces:
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
|
||||||
LL | test_1::<{ CompileFlag::A }>();
|
LL | test_1::<{ CompileFlag::A }>();
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
|
||||||
error[E0747]: type provided when a constant was expected
|
error[E0747]: unresolved item provided when a constant was expected
|
||||||
--> $DIR/invalid-enum.rs:25:15
|
--> $DIR/invalid-enum.rs:25:15
|
||||||
|
|
|
|
||||||
LL | test_2::<_, CompileFlag::A>(0);
|
LL | test_2::<_, CompileFlag::A>(0);
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
help: if this generic argument was intended as a const parameter, try surrounding it with braces:
|
help: if this generic argument was intended as a const parameter, surround it with braces
|
||||||
|
|
|
|
||||||
LL | test_2::<_, { CompileFlag::A }>(0);
|
LL | test_2::<_, { CompileFlag::A }>(0);
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications.nll/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
|
|
@ -1 +0,0 @@
|
||||||
{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications.polonius/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
|
|
@ -1 +0,0 @@
|
||||||
{"artifact":"$TEST_BUILD_DIR/emit-artifact-notifications/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
|
|
@ -1,14 +0,0 @@
|
||||||
// run-pass
|
|
||||||
|
|
||||||
#![allow(unused_comparisons)]
|
|
||||||
// Test that you only need the syntax gate if you don't mention the structs.
|
|
||||||
// (Obsoleted since both features are stabilized)
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let mut count = 0;
|
|
||||||
for i in 0_usize..=10 {
|
|
||||||
assert!(i >= 0 && i <= 10);
|
|
||||||
count += i;
|
|
||||||
}
|
|
||||||
assert_eq!(count, 55);
|
|
||||||
}
|
|
1
src/test/ui/rmeta/emit-artifact-notifications.nll.stderr
Normal file
1
src/test/ui/rmeta/emit-artifact-notifications.nll.stderr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"artifact":"$TEST_BUILD_DIR/rmeta/emit-artifact-notifications.nll/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
|
@ -0,0 +1 @@
|
||||||
|
{"artifact":"$TEST_BUILD_DIR/rmeta/emit-artifact-notifications.polonius/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
1
src/test/ui/rmeta/emit-artifact-notifications.stderr
Normal file
1
src/test/ui/rmeta/emit-artifact-notifications.stderr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"artifact":"$TEST_BUILD_DIR/rmeta/emit-artifact-notifications/libemit_artifact_notifications.rmeta","emit":"metadata"}
|
|
@ -7,8 +7,8 @@ use std::path::Path;
|
||||||
|
|
||||||
const ENTRY_LIMIT: usize = 1000;
|
const ENTRY_LIMIT: usize = 1000;
|
||||||
// FIXME: The following limits should be reduced eventually.
|
// FIXME: The following limits should be reduced eventually.
|
||||||
const ROOT_ENTRY_LIMIT: usize = 1459;
|
const ROOT_ENTRY_LIMIT: usize = 1418;
|
||||||
const ISSUES_ENTRY_LIMIT: usize = 2615;
|
const ISSUES_ENTRY_LIMIT: usize = 2582;
|
||||||
|
|
||||||
fn check_entries(path: &Path, bad: &mut bool) {
|
fn check_entries(path: &Path, bad: &mut bool) {
|
||||||
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue