mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
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
@ -507,12 +507,7 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> {
|
||||
|
||||
// Unify the original value for each variable with the value
|
||||
// taken from `query_response` (after applying `result_subst`).
|
||||
Ok(self.unify_canonical_vars(
|
||||
cause,
|
||||
param_env,
|
||||
original_values,
|
||||
substituted_query_response,
|
||||
)?)
|
||||
self.unify_canonical_vars(cause, param_env, original_values, substituted_query_response)
|
||||
}
|
||||
|
||||
/// 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> {
|
||||
let len = decoder.read_usize()?;
|
||||
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>> {
|
||||
fn decode(decoder: &mut D) -> Result<&'tcx Self, D::Error> {
|
||||
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> {
|
||||
let len = decoder.read_usize()?;
|
||||
Ok(decoder
|
||||
.tcx()
|
||||
.mk_poly_existential_predicates((0..len).map(|_| Decodable::decode(decoder)))?)
|
||||
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(with_no_queries(|| {
|
||||
return with_no_queries(|| {
|
||||
let def_key = self.tcx().def_key(def_id);
|
||||
if let Some(name) = def_key.disambiguated_data.data.get_opt_name() {
|
||||
p!(write("{}", name));
|
||||
@ -649,7 +649,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
p!(" Sized");
|
||||
}
|
||||
Ok(self)
|
||||
})?);
|
||||
});
|
||||
}
|
||||
ty::Str => p!("str"),
|
||||
ty::Generator(did, substs, movability) => {
|
||||
|
@ -154,7 +154,7 @@ pub fn relate_substs<R: TypeRelation<'tcx>>(
|
||||
relation.relate_with_variance(variance, a, b)
|
||||
});
|
||||
|
||||
Ok(tcx.mk_substs(params)?)
|
||||
tcx.mk_substs(params)
|
||||
}
|
||||
|
||||
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))),
|
||||
}
|
||||
});
|
||||
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)?
|
||||
.read_ptr_sized(self, vtable_slot)?
|
||||
.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.
|
||||
|
@ -6,8 +6,8 @@ use std::io::{self, Write};
|
||||
pub struct GraphvizWriter<
|
||||
'a,
|
||||
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
||||
NodeContentFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
EdgeLabelsFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
NodeContentFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
EdgeLabelsFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
> {
|
||||
graph: &'a G,
|
||||
is_subgraph: bool,
|
||||
@ -20,8 +20,8 @@ pub struct GraphvizWriter<
|
||||
impl<
|
||||
'a,
|
||||
G: graph::DirectedGraph + graph::WithSuccessors + graph::WithStartNode + graph::WithNumNodes,
|
||||
NodeContentFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
EdgeLabelsFn: Fn(<G as rustc_data_structures::graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
NodeContentFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
EdgeLabelsFn: Fn(<G as graph::DirectedGraph>::Node) -> Vec<String>,
|
||||
> GraphvizWriter<'a, G, NodeContentFn, EdgeLabelsFn>
|
||||
{
|
||||
pub fn new(
|
||||
|
@ -289,7 +289,6 @@ use super::{PatternFoldable, PatternFolder};
|
||||
|
||||
use rustc_data_structures::captures::Captures;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::sync::OnceCell;
|
||||
|
||||
use rustc_arena::TypedArena;
|
||||
use rustc_hir::def_id::DefId;
|
||||
@ -300,6 +299,7 @@ use rustc_span::Span;
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use std::fmt;
|
||||
use std::iter::{FromIterator, IntoIterator};
|
||||
use std::lazy::OnceCell;
|
||||
|
||||
crate struct MatchCheckCtxt<'a, 'tcx> {
|
||||
crate tcx: TyCtxt<'tcx>,
|
||||
|
@ -783,9 +783,11 @@ supported_targets! {
|
||||
("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf),
|
||||
("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf),
|
||||
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
|
||||
("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl),
|
||||
("riscv64imac-unknown-none-elf", riscv64imac_unknown_none_elf),
|
||||
("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf),
|
||||
("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-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);
|
||||
}
|
||||
|
||||
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::structured_errors::{StructuredDiagnostic, WrongNumberOfGenericArgs};
|
||||
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::def::{DefKind, Res};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::GenericArg;
|
||||
use rustc_middle::ty::{
|
||||
@ -43,23 +44,57 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
}
|
||||
}
|
||||
|
||||
// Specific suggestion set for diagnostics
|
||||
match (arg, ¶m.kind) {
|
||||
(
|
||||
GenericArg::Type(hir::Ty { kind: hir::TyKind::Path { .. }, .. }),
|
||||
GenericParamDefKind::Const { .. },
|
||||
) => {
|
||||
let add_braces_suggestion = |arg: &GenericArg<'_>, err: &mut DiagnosticBuilder<'_>| {
|
||||
let suggestions = vec![
|
||||
(arg.span().shrink_to_lo(), String::from("{ ")),
|
||||
(arg.span().shrink_to_hi(), String::from(" }")),
|
||||
];
|
||||
err.multipart_suggestion(
|
||||
"if this generic argument was intended as a const parameter, \
|
||||
try surrounding it with braces:",
|
||||
surround it with braces",
|
||||
suggestions,
|
||||
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), .. }),
|
||||
GenericParamDefKind::Const { .. },
|
||||
|
@ -1141,7 +1141,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
let trait_def_ids: FxHashSet<DefId> = param
|
||||
.bounds
|
||||
.iter()
|
||||
.filter_map(|bound| Some(bound.trait_ref()?.trait_def_id()?))
|
||||
.filter_map(|bound| bound.trait_ref()?.trait_def_id())
|
||||
.collect();
|
||||
if !candidates.iter().any(|t| trait_def_ids.contains(&t.def_id)) {
|
||||
err.span_suggestions(
|
||||
|
@ -231,7 +231,7 @@ pub struct Stdin {
|
||||
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
|
||||
/// is constructed via the [`Stdin::lock`] method.
|
||||
@ -494,7 +494,7 @@ pub struct Stdout {
|
||||
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
|
||||
/// the [`Stdout::lock`] method.
|
||||
@ -708,9 +708,9 @@ pub struct Stderr {
|
||||
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.
|
||||
///
|
||||
/// ### Note: Windows Portability Consideration
|
||||
|
@ -22,7 +22,10 @@ fn main() {
|
||||
let suggest_setup = !config.config.exists() && !matches!(config.cmd, Subcommand::Setup { .. });
|
||||
if suggest_setup {
|
||||
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 {
|
||||
println!("{}", suggestion);
|
||||
}
|
||||
@ -31,7 +34,10 @@ fn main() {
|
||||
|
||||
if suggest_setup {
|
||||
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 {
|
||||
println!("{}", suggestion);
|
||||
}
|
||||
|
@ -204,7 +204,9 @@ target | std | host | notes
|
||||
`powerpc64-unknown-linux-musl` | ? | |
|
||||
`powerpc64-wrs-vxworks` | ? | |
|
||||
`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-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
|
||||
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
|
||||
`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
|
||||
`sparc64-unknown-openbsd` | ? | |
|
||||
|
@ -4,7 +4,7 @@ error[E0747]: type provided when a constant was expected
|
||||
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 }> {
|
||||
| ^ ^
|
||||
|
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() {
|
||||
test_1::<CompileFlag::A>();
|
||||
//~^ 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);
|
||||
//~^ 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 };
|
||||
//~^ 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 };
|
||||
//~^ ERROR: type provided when a constant was expected
|
||||
|
@ -25,13 +25,13 @@ LL | let _: Example<CompileFlag::A, _> = Example { x: 0 };
|
||||
| not a type
|
||||
| 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
|
||||
|
|
||||
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 };
|
||||
| ^ ^
|
||||
@ -42,29 +42,29 @@ error[E0747]: type provided when a constant was expected
|
||||
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 };
|
||||
| ^ ^
|
||||
|
||||
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
|
||||
|
|
||||
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 }>();
|
||||
| ^ ^
|
||||
|
||||
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
|
||||
|
|
||||
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);
|
||||
| ^ ^
|
||||
|
@ -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;
|
||||
// FIXME: The following limits should be reduced eventually.
|
||||
const ROOT_ENTRY_LIMIT: usize = 1459;
|
||||
const ISSUES_ENTRY_LIMIT: usize = 2615;
|
||||
const ROOT_ENTRY_LIMIT: usize = 1418;
|
||||
const ISSUES_ENTRY_LIMIT: usize = 2582;
|
||||
|
||||
fn check_entries(path: &Path, bad: &mut bool) {
|
||||
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
||||
|
Loading…
Reference in New Issue
Block a user