提交 21185265 编写于 作者: B bors

Auto merge of #83986 - Dylan-DPC:rollup-51vygcj, r=Dylan-DPC

Rollup of 5 pull requests

Successful merges:

 - #82497 (Fix handling of `--output-format json` flag)
 - #83689 (Add more info for common trait resolution and async/await errors)
 - #83952 (Account for `ExprKind::Block` when suggesting .into() and deref)
 - #83965 (Add Debug implementation for hir::intravisit::FnKind)
 - #83974 (Fix outdated crate names in `rustc_interface::callbacks`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
......@@ -98,7 +98,7 @@ fn visit_foreign_item(&self, foreign_item: &'hir ForeignItem<'hir>) {
}
}
#[derive(Copy, Clone)]
#[derive(Copy, Clone, Debug)]
pub enum FnKind<'a> {
/// `#[xxx] pub async/const/extern "Abi" fn foo()`
ItemFn(Ident, &'a Generics<'a>, FnHeader, &'a Visibility<'a>),
......
//! Throughout the compiler tree, there are several places which want to have
//! access to state or queries while being inside crates that are dependencies
//! of librustc_middle. To facilitate this, we have the
//! of `rustc_middle`. To facilitate this, we have the
//! `rustc_data_structures::AtomicRef` type, which allows us to setup a global
//! static which can then be set in this file at program startup.
//!
......@@ -13,8 +13,8 @@
use rustc_middle::ty::tls;
use std::fmt;
/// This is a callback from librustc_ast as it cannot access the implicit state
/// in librustc_middle otherwise.
/// This is a callback from `rustc_ast` as it cannot access the implicit state
/// in `rustc_middle` otherwise.
fn span_debug(span: rustc_span::Span, f: &mut fmt::Formatter<'_>) -> fmt::Result {
tls::with_opt(|tcx| {
if let Some(tcx) = tcx {
......@@ -25,8 +25,8 @@ fn span_debug(span: rustc_span::Span, f: &mut fmt::Formatter<'_>) -> fmt::Result
})
}
/// This is a callback from librustc_ast as it cannot access the implicit state
/// in librustc_middle otherwise. It is used to when diagnostic messages are
/// This is a callback from `rustc_ast` as it cannot access the implicit state
/// in `rustc_middle` otherwise. It is used to when diagnostic messages are
/// emitted and stores them in the current query, if there is one.
fn track_diagnostic(diagnostic: &Diagnostic) {
tls::with_context_opt(|icx| {
......@@ -39,8 +39,8 @@ fn track_diagnostic(diagnostic: &Diagnostic) {
})
}
/// This is a callback from librustc_hir as it cannot access the implicit state
/// in librustc_middle otherwise.
/// This is a callback from `rustc_hir` as it cannot access the implicit state
/// in `rustc_middle` otherwise.
fn def_id_debug(def_id: rustc_hir::def_id::DefId, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "DefId({}:{}", def_id.krate, def_id.index.index())?;
tls::with_opt(|opt_tcx| {
......
......@@ -2070,7 +2070,14 @@ fn note_obligation_cause_code<T>(
// Don't print the tuple of capture types
if !is_upvar_tys_infer_tuple {
err.note(&format!("required because it appears within the type `{}`", ty));
let msg = format!("required because it appears within the type `{}`", ty);
match ty.kind() {
ty::Adt(def, _) => match self.tcx.opt_item_name(def.did) {
Some(ident) => err.span_note(ident.span, &msg),
None => err.note(&msg),
},
_ => err.note(&msg),
};
}
obligated_types.push(ty);
......@@ -2092,11 +2099,36 @@ fn note_obligation_cause_code<T>(
ObligationCauseCode::ImplDerivedObligation(ref data) => {
let mut parent_trait_ref = self.resolve_vars_if_possible(data.parent_trait_ref);
let parent_def_id = parent_trait_ref.def_id();
err.note(&format!(
let msg = format!(
"required because of the requirements on the impl of `{}` for `{}`",
parent_trait_ref.print_only_trait_path(),
parent_trait_ref.skip_binder().self_ty()
));
);
let mut candidates = vec![];
self.tcx.for_each_relevant_impl(
parent_def_id,
parent_trait_ref.self_ty().skip_binder(),
|impl_def_id| {
candidates.push(impl_def_id);
},
);
match &candidates[..] {
[def_id] => match self.tcx.hir().get_if_local(*def_id) {
Some(Node::Item(hir::Item {
kind: hir::ItemKind::Impl(hir::Impl { of_trait, self_ty, .. }),
..
})) => {
let mut spans = Vec::with_capacity(2);
if let Some(trait_ref) = of_trait {
spans.push(trait_ref.path.span);
}
spans.push(self_ty.span);
err.span_note(spans, &msg)
}
_ => err.note(&msg),
},
_ => err.note(&msg),
};
let mut parent_predicate = parent_trait_ref.without_const().to_predicate(tcx);
let mut data = data;
......@@ -2147,19 +2179,60 @@ fn note_obligation_cause_code<T>(
)
});
}
ObligationCauseCode::CompareImplMethodObligation { .. } => {
err.note(&format!(
"the requirement `{}` appears on the impl method but not on the corresponding \
trait method",
predicate
));
ObligationCauseCode::CompareImplMethodObligation {
item_name,
trait_item_def_id,
..
} => {
let msg = format!(
"the requirement `{}` appears on the impl method `{}` but not on the \
corresponding trait method",
predicate, item_name,
);
let sp = self
.tcx
.opt_item_name(trait_item_def_id)
.map(|i| i.span)
.unwrap_or_else(|| self.tcx.def_span(trait_item_def_id));
let mut assoc_span: MultiSpan = sp.into();
assoc_span.push_span_label(
sp,
format!("this trait method doesn't have the requirement `{}`", predicate),
);
if let Some(ident) = self
.tcx
.opt_associated_item(trait_item_def_id)
.and_then(|i| self.tcx.opt_item_name(i.container.id()))
{
assoc_span.push_span_label(ident.span, "in this trait".into());
}
err.span_note(assoc_span, &msg);
}
ObligationCauseCode::CompareImplTypeObligation { .. } => {
err.note(&format!(
"the requirement `{}` appears on the associated impl type but not on the \
ObligationCauseCode::CompareImplTypeObligation {
item_name, trait_item_def_id, ..
} => {
let msg = format!(
"the requirement `{}` appears on the associated impl type `{}` but not on the \
corresponding associated trait type",
predicate
));
predicate, item_name,
);
let sp = self.tcx.def_span(trait_item_def_id);
let mut assoc_span: MultiSpan = sp.into();
assoc_span.push_span_label(
sp,
format!(
"this trait associated type doesn't have the requirement `{}`",
predicate,
),
);
if let Some(ident) = self
.tcx
.opt_associated_item(trait_item_def_id)
.and_then(|i| self.tcx.opt_item_name(i.container.id()))
{
assoc_span.push_span_label(ident.span, "in this trait".into());
}
err.span_note(assoc_span, &msg);
}
ObligationCauseCode::CompareImplConstObligation => {
err.note(&format!(
......
......@@ -205,6 +205,7 @@ pub fn suggest_deref_ref_or_into(
found: Ty<'tcx>,
expected_ty_expr: Option<&'tcx hir::Expr<'tcx>>,
) {
let expr = expr.peel_blocks();
if let Some((sp, msg, suggestion, applicability)) = self.check_ref(expr, found, expected) {
err.span_suggestion(sp, msg, suggestion, applicability);
} else if let (ty::FnDef(def_id, ..), true) =
......
......@@ -987,59 +987,60 @@ fn suggest_traits_to_import(
) {
let mut alt_rcvr_sugg = false;
if let SelfSource::MethodCall(rcvr) = source {
info!(?span, ?item_name, ?rcvr_ty, ?rcvr);
if let ty::Adt(..) = rcvr_ty.kind() {
// Try alternative arbitrary self types that could fulfill this call.
// FIXME: probe for all types that *could* be arbitrary self-types, not
// just this list.
for (rcvr_ty, post) in &[
(rcvr_ty, ""),
(self.tcx.mk_mut_ref(&ty::ReErased, rcvr_ty), "&mut "),
(self.tcx.mk_imm_ref(&ty::ReErased, rcvr_ty), "&"),
debug!(?span, ?item_name, ?rcvr_ty, ?rcvr);
// Try alternative arbitrary self types that could fulfill this call.
// FIXME: probe for all types that *could* be arbitrary self-types, not
// just this list.
for (rcvr_ty, post) in &[
(rcvr_ty, ""),
(self.tcx.mk_mut_ref(&ty::ReErased, rcvr_ty), "&mut "),
(self.tcx.mk_imm_ref(&ty::ReErased, rcvr_ty), "&"),
] {
for (rcvr_ty, pre) in &[
(self.tcx.mk_lang_item(rcvr_ty, LangItem::OwnedBox), "Box::new"),
(self.tcx.mk_lang_item(rcvr_ty, LangItem::Pin), "Pin::new"),
(self.tcx.mk_diagnostic_item(rcvr_ty, sym::Arc), "Arc::new"),
(self.tcx.mk_diagnostic_item(rcvr_ty, sym::Rc), "Rc::new"),
] {
for (rcvr_ty, pre) in &[
(self.tcx.mk_lang_item(rcvr_ty, LangItem::OwnedBox), "Box::new"),
(self.tcx.mk_lang_item(rcvr_ty, LangItem::Pin), "Pin::new"),
(self.tcx.mk_diagnostic_item(rcvr_ty, sym::Arc), "Arc::new"),
(self.tcx.mk_diagnostic_item(rcvr_ty, sym::Rc), "Rc::new"),
] {
if let Some(new_rcvr_t) = *rcvr_ty {
if let Ok(pick) = self.lookup_probe(
span,
item_name,
new_rcvr_t,
rcvr,
crate::check::method::probe::ProbeScope::AllTraits,
) {
debug!("try_alt_rcvr: pick candidate {:?}", pick);
// Make sure the method is defined for the *actual* receiver:
// we don't want to treat `Box<Self>` as a receiver if
// it only works because of an autoderef to `&self`
if pick.autoderefs == 0
// We don't want to suggest a container type when the missing method is
// `.clone()`, otherwise we'd suggest `Arc::new(foo).clone()`, which is
// far from what the user really wants.
&& Some(pick.item.container.id()) != self.tcx.lang_items().clone_trait()
{
err.span_label(
pick.item.ident.span,
&format!(
"the method is available for `{}` here",
new_rcvr_t
),
);
err.multipart_suggestion(
"consider wrapping the receiver expression with the \
appropriate type",
vec![
(rcvr.span.shrink_to_lo(), format!("{}({}", pre, post)),
(rcvr.span.shrink_to_hi(), ")".to_string()),
],
Applicability::MaybeIncorrect,
);
// We don't care about the other suggestions.
alt_rcvr_sugg = true;
}
if let Some(new_rcvr_t) = *rcvr_ty {
if let Ok(pick) = self.lookup_probe(
span,
item_name,
new_rcvr_t,
rcvr,
crate::check::method::probe::ProbeScope::AllTraits,
) {
debug!("try_alt_rcvr: pick candidate {:?}", pick);
let did = Some(pick.item.container.id());
// We don't want to suggest a container type when the missing
// method is `.clone()` or `.deref()` otherwise we'd suggest
// `Arc::new(foo).clone()`, which is far from what the user wants.
let skip = [
self.tcx.lang_items().clone_trait(),
self.tcx.lang_items().deref_trait(),
self.tcx.lang_items().deref_mut_trait(),
self.tcx.lang_items().drop_trait(),
]
.contains(&did);
// Make sure the method is defined for the *actual* receiver: we don't
// want to treat `Box<Self>` as a receiver if it only works because of
// an autoderef to `&self`
if pick.autoderefs == 0 && !skip {
err.span_label(
pick.item.ident.span,
&format!("the method is available for `{}` here", new_rcvr_t),
);
err.multipart_suggestion(
"consider wrapping the receiver expression with the \
appropriate type",
vec![
(rcvr.span.shrink_to_lo(), format!("{}({}", pre, post)),
(rcvr.span.shrink_to_hi(), ")".to_string()),
],
Applicability::MaybeIncorrect,
);
// We don't care about the other suggestions.
alt_rcvr_sugg = true;
}
}
}
......
......@@ -765,7 +765,7 @@ unsafe impl<T: ?Sized> Freeze for &mut T {}
/// [`pin` module]: crate::pin
#[stable(feature = "pin", since = "1.33.0")]
#[rustc_on_unimplemented(
on(_Self = "std::future::Future", note = "consider using `Box::pin`",),
note = "consider using `Box::pin`",
message = "`{Self}` cannot be unpinned"
)]
#[lang = "unpin"]
......
......@@ -378,6 +378,17 @@ fn println_condition(condition: Condition) {
}
}
// check for `--output-format=json`
if !matches!(matches.opt_str("output-format").as_deref(), None | Some("html"))
&& !matches.opt_present("show-coverage")
&& !nightly_options::is_unstable_enabled(matches)
{
rustc_session::early_error(
error_format,
"the -Z unstable-options flag must be passed to enable --output-format for documentation generation (see https://github.com/rust-lang/rust/issues/76578)",
);
}
let to_check = matches.opt_strs("check-theme");
if !to_check.is_empty() {
let paths = theme::load_css_paths(static_files::themes::LIGHT.as_bytes());
......@@ -574,13 +585,7 @@ fn println_condition(condition: Condition) {
let output_format = match matches.opt_str("output-format") {
Some(s) => match OutputFormat::try_from(s.as_str()) {
Ok(out_fmt) => {
if out_fmt.is_json()
&& !(show_coverage || nightly_options::match_is_nightly_build(matches))
{
diag.struct_err("json output format isn't supported for doc generation")
.emit();
return Err(1);
} else if !out_fmt.is_json() && show_coverage {
if !out_fmt.is_json() && show_coverage {
diag.struct_err(
"html output format isn't supported for the --show-coverage option",
)
......@@ -702,16 +707,10 @@ fn println_condition(condition: Condition) {
/// Prints deprecation warnings for deprecated options
fn check_deprecated_options(matches: &getopts::Matches, diag: &rustc_errors::Handler) {
let deprecated_flags = ["input-format", "output-format", "no-defaults", "passes"];
let deprecated_flags = ["input-format", "no-defaults", "passes"];
for flag in deprecated_flags.iter() {
if matches.opt_present(flag) {
if *flag == "output-format"
&& (matches.opt_present("show-coverage")
|| nightly_options::match_is_nightly_build(matches))
{
continue;
}
let mut err = diag.struct_warn(&format!("the `{}` flag is deprecated", flag));
err.note(
"see issue #44136 <https://github.com/rust-lang/rust/issues/44136> \
......
-include ../../run-make-fulldeps/tools.mk
all:
$(RUSTDOC) --output-format=json x.html 2>&1 | diff - output-format-json.stderr
This is a collection of tests that verify `--unstable-options` is required.
It should eventually be removed in favor of UI tests once compiletest stops
passing --unstable-options by default (#82639).
error: the -Z unstable-options flag must be passed to enable --output-format for documentation generation (see https://github.com/rust-lang/rust/issues/76578)
// compile-flags: --output-format html
// check-pass
// This tests that `--output-format html` is accepted without `-Z unstable-options`,
// since it has been stable since 1.0.
......@@ -10,7 +10,11 @@ LL | |
LL | | }
| |_^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`
......@@ -20,7 +24,11 @@ error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
LL | type A = ();
| ^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`
......@@ -30,7 +38,11 @@ error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
LL | type B = bool;
| ^^^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-1.rs:15:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
= note: 1 redundant requirements hidden
= note: required because of the requirements on the impl of `Grault` for `(T,)`
......
......@@ -10,7 +10,11 @@ LL | |
LL | | }
| |_^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-2.rs:7:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
--> $DIR/impl-wf-cycle-2.rs:11:5
......@@ -18,7 +22,11 @@ error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
LL | type A = ();
| ^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `Grault` for `(T,)`
note: required because of the requirements on the impl of `Grault` for `(T,)`
--> $DIR/impl-wf-cycle-2.rs:7:17
|
LL | impl<T: Grault> Grault for (T,)
| ^^^^^^ ^^^^
error: aborting due to 2 previous errors
......
......@@ -7,7 +7,11 @@ LL | fn visit() {}
LL | <() as Visit>::visit();
| ^^^^^^^^^^^^^^^^^^^^ expected `&()`, found `()`
|
= note: required because of the requirements on the impl of `Visit` for `()`
note: required because of the requirements on the impl of `Visit` for `()`
--> $DIR/issue-44153.rs:13:10
|
LL | impl<'a> Visit for () where
| ^^^^^ ^^
error: aborting due to previous error
......
......@@ -13,7 +13,11 @@ error[E0277]: the trait bound `T: MyDisplay` is not satisfied
LL | let closure = |config: &mut <S as MPU>::MpuConfig| writer.my_write(&config);
| ^^^^^^^ the trait `MyDisplay` is not implemented for `T`
|
= note: required because of the requirements on the impl of `MyDisplay` for `&mut T`
note: required because of the requirements on the impl of `MyDisplay` for `&mut T`
--> $DIR/issue-65774-1.rs:5:24
|
LL | impl<'a, T: MyDisplay> MyDisplay for &'a mut T { }
| ^^^^^^^^^ ^^^^^^^^^
= note: required for the cast to the object type `dyn MyDisplay`
error: aborting due to 2 previous errors
......
......@@ -17,7 +17,11 @@ LL | async fn frob(self) {}
| ^^^^ doesn't have a size known at compile-time
|
= help: within `Foo`, the trait `Sized` is not implemented for `str`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-72590-type-error-sized.rs:5:8
|
LL | struct Foo {
| ^^^
= help: unsized fn params are gated as an unstable feature
help: function arguments must have a statically known size, borrowed types always have a known size
|
......
use std::{
future::Future,
pin::Pin,
marker::Unpin,
task::{Context, Poll},
};
struct Sleep(std::marker::PhantomPinned);
impl Future for Sleep {
type Output = ();
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
Poll::Ready(())
}
}
impl Drop for Sleep {
fn drop(&mut self) {}
}
fn sleep() -> Sleep {
Sleep(std::marker::PhantomPinned)
}
struct MyFuture {
sleep: Sleep,
}
impl MyFuture {
fn new() -> Self {
Self {
sleep: sleep(),
}
}
}
impl Future for MyFuture {
type Output = ();
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
Pin::new(&mut self.sleep).poll(cx)
//~^ ERROR `PhantomPinned` cannot be unpinned
}
}
fn main() {}
error[E0277]: `PhantomPinned` cannot be unpinned
--> $DIR/pin-needed-to-poll-2.rs:43:9
|
LL | Pin::new(&mut self.sleep).poll(cx)
| ^^^^^^^^ within `Sleep`, the trait `Unpin` is not implemented for `PhantomPinned`
|
= note: consider using `Box::pin`
note: required because it appears within the type `Sleep`
--> $DIR/pin-needed-to-poll-2.rs:8:8
|
LL | struct Sleep(std::marker::PhantomPinned);
| ^^^^^
= note: required by `Pin::<P>::new`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
......@@ -6,7 +6,11 @@ LL | b + 3
|
= help: the following implementations were found:
<f64 as Scalar>
= note: required because of the requirements on the impl of `Add<{integer}>` for `Bob`
note: required because of the requirements on the impl of `Add<{integer}>` for `Bob`
--> $DIR/issue-22645.rs:8:19
|
LL | impl<RHS: Scalar> Add <RHS> for Bob {
| ^^^^^^^^^ ^^^
error[E0308]: mismatched types
--> $DIR/issue-22645.rs:15:3
......
......@@ -9,7 +9,11 @@ LL | impl <T:Sync+'static> RequiresRequiresShareAndSend for X<T> { }
LL | pub trait RequiresRequiresShareAndSend : RequiresShare + Send { }
| ---- required by this bound in `RequiresRequiresShareAndSend`
|
= note: required because it appears within the type `X<T>`
note: required because it appears within the type `X<T>`
--> $DIR/builtin-superkinds-in-metadata.rs:9:8
|
LL | struct X<T>(T);
| ^
help: consider further restricting this bound
|
LL | impl <T:Sync+'static + std::marker::Send> RequiresRequiresShareAndSend for X<T> { }
......
......@@ -8,16 +8,56 @@ LL | is_send::<A>();
| ^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="20"]` attribute to your crate (`recursion_limit`)
= note: required because it appears within the type `J`
= note: required because it appears within the type `I`
= note: required because it appears within the type `H`
= note: required because it appears within the type `G`
= note: required because it appears within the type `F`
= note: required because it appears within the type `E`
= note: required because it appears within the type `D`
= note: required because it appears within the type `C`
= note: required because it appears within the type `B`
= note: required because it appears within the type `A`
note: required because it appears within the type `J`
--> $DIR/recursion_limit.rs:24:9
|
LL | link! { J, K }
| ^
note: required because it appears within the type `I`
--> $DIR/recursion_limit.rs:23:9
|
LL | link! { I, J }
| ^
note: required because it appears within the type `H`
--> $DIR/recursion_limit.rs:22:9
|
LL | link! { H, I }
| ^
note: required because it appears within the type `G`
--> $DIR/recursion_limit.rs:21:9
|
LL | link! { G, H }
| ^
note: required because it appears within the type `F`
--> $DIR/recursion_limit.rs:20:9
|
LL | link! { F, G }
| ^
note: required because it appears within the type `E`
--> $DIR/recursion_limit.rs:19:9
|
LL | link! { E, F }
| ^
note: required because it appears within the type `D`
--> $DIR/recursion_limit.rs:18:9
|
LL | link! { D, E }
| ^
note: required because it appears within the type `C`
--> $DIR/recursion_limit.rs:17:9
|
LL | link! { C, D }
| ^
note: required because it appears within the type `B`
--> $DIR/recursion_limit.rs:16:9
|
LL | link! { B, C }
| ^
note: required because it appears within the type `A`
--> $DIR/recursion_limit.rs:15:9
|
LL | link! { A, B }
| ^
error: aborting due to previous error
......
......@@ -5,8 +5,16 @@ LL | let h: &Fat<Fat<[isize]>> = &Fat { ptr: *g };
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Fat<Fat<[isize]>>`, the trait `Sized` is not implemented for `[isize]`
= note: required because it appears within the type `Fat<[isize]>`
= note: required because it appears within the type `Fat<Fat<[isize]>>`
note: required because it appears within the type `Fat<[isize]>`
--> $DIR/dst-bad-deep.rs:6:8
|
LL | struct Fat<T: ?Sized> {
| ^^^
note: required because it appears within the type `Fat<Fat<[isize]>>`
--> $DIR/dst-bad-deep.rs:6:8
|
LL | struct Fat<T: ?Sized> {
| ^^^
= note: structs must have a statically known size to be initialized
error: aborting due to previous error
......
......@@ -8,7 +8,11 @@ LL | impl<T> Foo for T where Bar<T>: Foo {}
| ^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`E0275`)
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
--> $DIR/E0275.rs:5:9
|
LL | impl<T> Foo for T where Bar<T>: Foo {}
| ^^^ ^
= note: 127 redundant requirements hidden
= note: required because of the requirements on the impl of `Foo` for `Bar<T>`
......
......@@ -8,9 +8,21 @@ LL | is_send::<Foo>();
| ^^^^^^^^^^^^^^ `*const u8` cannot be sent between threads safely
|
= help: within `Foo`, the trait `Send` is not implemented for `*const u8`
= note: required because it appears within the type `Baz`
= note: required because it appears within the type `Bar`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Baz`
--> $DIR/E0277-2.rs:9:8
|
LL | struct Baz {
| ^^^
note: required because it appears within the type `Bar`
--> $DIR/E0277-2.rs:5:8
|
LL | struct Bar {
| ^^^
note: required because it appears within the type `Foo`
--> $DIR/E0277-2.rs:1:8
|
LL | struct Foo {
| ^^^
error: aborting due to previous error
......
......@@ -23,7 +23,11 @@ LL | assert_sized::<Foo>();
| ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Foo`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/extern-types-unsized.rs:9:8
|
LL | struct Foo {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
......@@ -39,7 +43,11 @@ LL | assert_sized::<Bar<A>>();
| ^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Bar<A>`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Bar<A>`
note: required because it appears within the type `Bar<A>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
......@@ -55,8 +63,16 @@ LL | assert_sized::<Bar<Bar<A>>>();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `Bar<Bar<A>>`, the trait `Sized` is not implemented for `A`
= note: required because it appears within the type `Bar<A>`
= note: required because it appears within the type `Bar<Bar<A>>`
note: required because it appears within the type `Bar<A>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
note: required because it appears within the type `Bar<Bar<A>>`
--> $DIR/extern-types-unsized.rs:14:8
|
LL | struct Bar<T: ?Sized> {
| ^^^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn assert_sized<T: ?Sized>() {}
......
......@@ -107,7 +107,11 @@ LL | | }
| |_^ doesn't have a size known at compile-time
|
= help: within `Dst<(dyn A + 'static)>`, the trait `Sized` is not implemented for `(dyn A + 'static)`
= note: required because it appears within the type `Dst<(dyn A + 'static)>`
note: required because it appears within the type `Dst<(dyn A + 'static)>`
--> $DIR/feature-gate-trivial_bounds.rs:48:8
|
LL | struct Dst<X: ?Sized> {
| ^^^
= help: see issue #48214
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
......
......@@ -6,6 +6,8 @@ LL | fn assert_unpin<T: Unpin>(_: T) {
...
LL | assert_unpin(generator);
| ^^^^^^^^^ the trait `Unpin` is not implemented for `[static generator@$DIR/static-not-unpin.rs:11:25: 13:6]`
|
= note: consider using `Box::pin`
error: aborting due to previous error
......
......@@ -6,6 +6,7 @@ trait Foo {
type A<'a> where Self: 'a;
type B<'a, 'b> where 'a: 'b;
type C where Self: Clone;
fn d() where Self: Clone;
}
#[derive(Copy, Clone)]
......@@ -19,6 +20,8 @@ impl<T> Foo for Fooy<T> {
//~| ERROR lifetime bound not satisfied
type C where Self: Copy = String;
//~^ ERROR the trait bound `T: Copy` is not satisfied
fn d() where Self: Copy {}
//~^ ERROR the trait bound `T: Copy` is not satisfied
}
fn main() {}
error[E0310]: the parameter type `T` may not live long enough
--> $DIR/impl_bounds.rs:15:5
--> $DIR/impl_bounds.rs:16:5
|
LL | type A<'a> where Self: 'static = (&'a ());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
......@@ -8,53 +8,80 @@ LL | type A<'a> where Self: 'static = (&'a ());
= note: ...so that the type `Fooy<T>` will meet its required lifetime bounds
error[E0478]: lifetime bound not satisfied
--> $DIR/impl_bounds.rs:17:5
--> $DIR/impl_bounds.rs:18:5
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: lifetime parameter instantiated with the lifetime `'b` as defined on the associated item at 17:16
--> $DIR/impl_bounds.rs:17:16
note: lifetime parameter instantiated with the lifetime `'b` as defined on the associated item at 18:16
--> $DIR/impl_bounds.rs:18:16
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^
note: but lifetime parameter must outlive the lifetime `'a` as defined on the associated item at 17:12
--> $DIR/impl_bounds.rs:17:12
note: but lifetime parameter must outlive the lifetime `'a` as defined on the associated item at 18:12
--> $DIR/impl_bounds.rs:18:12
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^
error[E0478]: lifetime bound not satisfied
--> $DIR/impl_bounds.rs:17:5
--> $DIR/impl_bounds.rs:18:5
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: lifetime parameter instantiated with the lifetime `'a` as defined on the associated item at 17:12
--> $DIR/impl_bounds.rs:17:12
note: lifetime parameter instantiated with the lifetime `'a` as defined on the associated item at 18:12
--> $DIR/impl_bounds.rs:18:12
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^
note: but lifetime parameter must outlive the lifetime `'b` as defined on the associated item at 17:16
--> $DIR/impl_bounds.rs:17:16
note: but lifetime parameter must outlive the lifetime `'b` as defined on the associated item at 18:16
--> $DIR/impl_bounds.rs:18:16
|
LL | type B<'a, 'b> where 'b: 'a = (&'a(), &'b ());
| ^^
error[E0277]: the trait bound `T: Copy` is not satisfied
--> $DIR/impl_bounds.rs:20:5
--> $DIR/impl_bounds.rs:21:5
|
LL | type C where Self: Copy = String;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Copy` for `Fooy<T>`
= note: the requirement `Fooy<T>: Copy` appears on the associated impl type but not on the corresponding associated trait type
note: the requirement `Fooy<T>: Copy` appears on the associated impl type `C` but not on the corresponding associated trait type
--> $DIR/impl_bounds.rs:8:5
|
LL | trait Foo {
| --- in this trait
...
LL | type C where Self: Clone;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ this trait associated type doesn't have the requirement `Fooy<T>: Copy`
help: consider restricting type parameter `T`
|
LL | impl<T: std::marker::Copy> Foo for Fooy<T> {
| ^^^^^^^^^^^^^^^^^^^
error[E0277]: the trait bound `T: Copy` is not satisfied
--> $DIR/impl_bounds.rs:23:5
|
LL | fn d() where Self: Copy {}
| ^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Copy` for `Fooy<T>`
note: the requirement `Fooy<T>: Copy` appears on the impl method `d` but not on the corresponding trait method
--> $DIR/impl_bounds.rs:9:8
|
LL | trait Foo {
| --- in this trait
...
LL | fn d() where Self: Clone;
| ^ this trait method doesn't have the requirement `Fooy<T>: Copy`
help: consider restricting type parameter `T`
|
LL | impl<T: std::marker::Copy> Foo for Fooy<T> {
| ^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors
error: aborting due to 5 previous errors
Some errors have detailed explanations: E0277, E0310, E0478.
For more information about an error, try `rustc --explain E0277`.
......@@ -15,7 +15,11 @@ error[E0271]: type mismatch resolving `<[closure@$DIR/issue-62203-hrtb-ice.rs:42
LL | let v = Unit2.m(
| ^ expected struct `Unit4`, found struct `Unit3`
|
= note: required because of the requirements on the impl of `for<'r> T0<'r, (<Unit2 as Ty<'r>>::V,)>` for `L<[closure@$DIR/issue-62203-hrtb-ice.rs:42:17: 42:39]>`
note: required because of the requirements on the impl of `for<'r> T0<'r, (<Unit2 as Ty<'r>>::V,)>` for `L<[closure@$DIR/issue-62203-hrtb-ice.rs:42:17: 42:39]>`
--> $DIR/issue-62203-hrtb-ice.rs:17:16
|
LL | impl<'a, A, T> T0<'a, A> for L<T>
| ^^^^^^^^^ ^^^^
error: aborting due to 2 previous errors
......
......@@ -4,7 +4,11 @@ error[E0271]: type mismatch resolving `<() as Super>::Assoc == ()`
LL | fn test() -> impl Test {
| ^^^^^^^^^ expected `()`, found `u8`
|
= note: required because of the requirements on the impl of `Test` for `()`
note: required because of the requirements on the impl of `Test` for `()`
--> $DIR/projection-mismatch-in-impl-where-clause.rs:11:9
|
LL | impl<T> Test for T where T: Super<Assoc = ()> {}
| ^^^^ ^
error: aborting due to previous error
......
......@@ -5,7 +5,11 @@ LL | 0.contains(bits);
| ^^^^^^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`issue_18400`)
= note: required because of the requirements on the impl of `Set<&[_]>` for `{integer}`
note: required because of the requirements on the impl of `Set<&[_]>` for `{integer}`
--> $DIR/issue-18400.rs:6:16
|
LL | impl<'a, T, S> Set<&'a [T]> for S where
| ^^^^^^^^^^^^ ^
= note: 128 redundant requirements hidden
= note: required because of the requirements on the impl of `Set<&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[_]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]>` for `{integer}`
......
......@@ -5,7 +5,11 @@ LL | let _: Box<dyn for<'b> Wrap<'b>> = Box::new(Wrapper(process));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ `<P as Process<'_>>::Item` is not an iterator
|
= help: the trait `Iterator` is not implemented for `<P as Process<'_>>::Item`
= note: required because of the requirements on the impl of `for<'b> Wrap<'b>` for `Wrapper<P>`
note: required because of the requirements on the impl of `for<'b> Wrap<'b>` for `Wrapper<P>`
--> $DIR/issue-22872.rs:7:13
|
LL | impl<'b, P> Wrap<'b> for Wrapper<P>
| ^^^^^^^^ ^^^^^^^^^^
= note: required for the cast to the object type `dyn for<'b> Wrap<'b>`
help: consider further restricting the associated type
|
......
......@@ -5,7 +5,11 @@ LL | type Next = <GetNext<T::Next> as Next>::Next;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="256"]` attribute to your crate (`issue_23122_2`)
= note: required because of the requirements on the impl of `Next` for `GetNext<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<T as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next>`
note: required because of the requirements on the impl of `Next` for `GetNext<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<T as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next as Next>::Next>`
--> $DIR/issue-23122-2.rs:8:15
|
LL | impl<T: Next> Next for GetNext<T> {
| ^^^^ ^^^^^^^^^^
error: aborting due to previous error
......
......@@ -4,7 +4,11 @@ error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not sat
LL | #[derive(Debug, Copy, Clone)]
| ^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
= note: required because of the requirements on the impl of `IntoNullable` for `<Col as Expression>::SqlType`
note: required because of the requirements on the impl of `IntoNullable` for `<Col as Expression>::SqlType`
--> $DIR/issue-38821.rs:9:18
|
LL | impl<T: NotNull> IntoNullable for T {
| ^^^^^^^^^^^^ ^
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error
......
......@@ -7,7 +7,11 @@ LL | fn visit() {}
LL | <() as Visit>::visit();
| ^^^^^^^^^^^^^^^^^^^^ expected `()`, found `&()`
|
= note: required because of the requirements on the impl of `Visit` for `()`
note: required because of the requirements on the impl of `Visit` for `()`
--> $DIR/issue-39970.rs:13:6
|
LL | impl Visit for () where
| ^^^^^ ^^
error: aborting due to previous error
......
......@@ -8,9 +8,17 @@ LL | f(Foo(Arc::new(Bar::B(None))));
| ^ `Rc<Foo>` cannot be shared between threads safely
|
= help: within `Bar`, the trait `Sync` is not implemented for `Rc<Foo>`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required because of the requirements on the impl of `Send` for `Arc<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^
error[E0277]: `Rc<Foo>` cannot be sent between threads safely
--> $DIR/issue-40827.rs:14:5
......@@ -22,9 +30,17 @@ LL | f(Foo(Arc::new(Bar::B(None))));
| ^ `Rc<Foo>` cannot be sent between threads safely
|
= help: within `Bar`, the trait `Send` is not implemented for `Rc<Foo>`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required because of the requirements on the impl of `Send` for `Arc<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^
error: aborting due to 2 previous errors
......
......@@ -21,7 +21,11 @@ LL | Struct { r: r }
| --------------- this returned value is of type `Struct`
|
= help: within `Struct`, the trait `Sized` is not implemented for `(dyn A + 'static)`
= note: required because it appears within the type `Struct`
note: required because it appears within the type `Struct`
--> $DIR/issue-5883.rs:3:8
|
LL | struct Struct {
| ^^^^^^
= note: the return type of a function must have a statically known size
error: aborting due to 2 previous errors
......
......@@ -6,7 +6,11 @@ LL | let a = A {v: box B{v: None} as Box<dyn Foo + Send>};
|
= help: within `B`, the trait `Send` is not implemented for `Rc<RefCell<A>>`
= note: required because it appears within the type `Option<Rc<RefCell<A>>>`
= note: required because it appears within the type `B`
note: required because it appears within the type `B`
--> $DIR/issue-7013.rs:10:8
|
LL | struct B {
| ^
= note: required for the cast to the object type `dyn Foo + Send`
error: aborting due to previous error
......
......@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-impl-type-params-2.rs:6:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^
error: aborting due to previous error
......
......@@ -4,7 +4,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a = &t as &dyn Gettable<T>;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -17,7 +21,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a = &t as &dyn Gettable<T>;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -30,7 +38,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a: &dyn Gettable<T> = &t;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -43,7 +55,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a: &dyn Gettable<T> = &t;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -56,7 +72,11 @@ error[E0277]: the trait bound `String: Copy` is not satisfied
LL | let a = t as Box<dyn Gettable<String>>;
| ^ the trait `Copy` is not implemented for `String`
|
= note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<String>`
error[E0277]: the trait bound `Foo: Copy` is not satisfied
......@@ -65,7 +85,11 @@ error[E0277]: the trait bound `Foo: Copy` is not satisfied
LL | let a: Box<dyn Gettable<Foo>> = t;
| ^ the trait `Copy` is not implemented for `Foo`
|
= note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<Foo>`
error: aborting due to 6 previous errors
......
......@@ -4,7 +4,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a = &t as &dyn Gettable<T>;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -17,7 +21,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a = &t as &dyn Gettable<T>;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -30,7 +38,11 @@ error[E0277]: `T` cannot be sent between threads safely
LL | let a: &dyn Gettable<T> = &t;
| ^^ `T` cannot be sent between threads safely
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -43,7 +55,11 @@ error[E0277]: the trait bound `T: Copy` is not satisfied
LL | let a: &dyn Gettable<T> = &t;
| ^^ the trait `Copy` is not implemented for `T`
|
= note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
note: required because of the requirements on the impl of `Gettable<T>` for `S<T>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<T>`
help: consider restricting type parameter `T`
|
......@@ -64,7 +80,11 @@ error[E0277]: the trait bound `String: Copy` is not satisfied
LL | let a = t as Box<dyn Gettable<String>>;
| ^ the trait `Copy` is not implemented for `String`
|
= note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
note: required because of the requirements on the impl of `Gettable<String>` for `S<String>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<String>`
error[E0277]: the trait bound `Foo: Copy` is not satisfied
......@@ -73,7 +93,11 @@ error[E0277]: the trait bound `Foo: Copy` is not satisfied
LL | let a: Box<dyn Gettable<Foo>> = t;
| ^ the trait `Copy` is not implemented for `Foo`
|
= note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
note: required because of the requirements on the impl of `Gettable<Foo>` for `S<Foo>`
--> $DIR/kindck-impl-type-params.rs:14:32
|
LL | impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
| ^^^^^^^^^^^ ^^^^
= note: required for the cast to the object type `dyn Gettable<Foo>`
error: aborting due to 7 previous errors
......
......@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-inherited-copy-bound.rs:14:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^
error[E0038]: the trait `Foo` cannot be made into an object
--> $DIR/kindck-inherited-copy-bound.rs:28:19
......
......@@ -7,7 +7,11 @@ LL | fn take_param<T:Foo>(foo: &T) { }
LL | take_param(&x);
| ^^ the trait `Copy` is not implemented for `Box<{integer}>`
|
= note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
note: required because of the requirements on the impl of `Foo` for `Box<{integer}>`
--> $DIR/kindck-inherited-copy-bound.rs:14:14
|
LL | impl<T:Copy> Foo for T {
| ^^^ ^
error[E0038]: the trait `Foo` cannot be made into an object
--> $DIR/kindck-inherited-copy-bound.rs:28:13
......
......@@ -8,7 +8,11 @@ LL | bar(&x);
| ^^^ `NoSync` cannot be shared between threads safely
|
= help: within `&Foo`, the trait `Sync` is not implemented for `NoSync`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/mutable-enum-indirect.rs:11:6
|
LL | enum Foo { A(NoSync) }
| ^^^
= note: required because it appears within the type `&Foo`
error: aborting due to previous error
......
......@@ -17,8 +17,16 @@ LL | F: Send + 'static,
| ---- required by this bound in `spawn`
|
= help: within `[closure@$DIR/no-send-res-ports.rs:25:19: 29:6]`, the trait `Send` is not implemented for `Rc<()>`
= note: required because it appears within the type `Port<()>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Port<()>`
--> $DIR/no-send-res-ports.rs:5:8
|
LL | struct Port<T>(Rc<T>);
| ^^^^
note: required because it appears within the type `Foo`
--> $DIR/no-send-res-ports.rs:9:12
|
LL | struct Foo {
| ^^^
= note: required because it appears within the type `[closure@$DIR/no-send-res-ports.rs:25:19: 29:6]`
error: aborting due to previous error
......
......@@ -8,7 +8,11 @@ LL | bar(x);
| ^^^ `NoSend` cannot be sent between threads safely
|
= help: within `Foo`, the trait `Send` is not implemented for `NoSend`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/no_send-enum.rs:8:6
|
LL | enum Foo {
| ^^^
error: aborting due to previous error
......
......@@ -8,7 +8,11 @@ LL | bar(x);
| ^^^ `NoSync` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `NoSync`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/no_share-enum.rs:8:6
|
LL | enum Foo { A(NoSync) }
| ^^^
error: aborting due to previous error
......
......@@ -7,9 +7,17 @@ LL | fn is_zen<T: Zen>(_: T) {}
LL | is_zen(x)
| ^ `T` cannot be shared between threads safely
|
= note: required because of the requirements on the impl of `Zen` for `&T`
note: required because of the requirements on the impl of `Zen` for `&T`
--> $DIR/phantom-auto-trait.rs:10:24
|
LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {}
| ^^^ ^^^^^
= note: required because it appears within the type `PhantomData<&T>`
= note: required because it appears within the type `Guard<'_, T>`
note: required because it appears within the type `Guard<'_, T>`
--> $DIR/phantom-auto-trait.rs:12:8
|
LL | struct Guard<'a, T: 'a> {
| ^^^^^
help: consider restricting type parameter `T`
|
LL | fn not_sync<T: std::marker::Sync>(x: Guard<T>) {
......@@ -24,10 +32,22 @@ LL | fn is_zen<T: Zen>(_: T) {}
LL | is_zen(x)
| ^ `T` cannot be shared between threads safely
|
= note: required because of the requirements on the impl of `Zen` for `&T`
note: required because of the requirements on the impl of `Zen` for `&T`
--> $DIR/phantom-auto-trait.rs:10:24
|
LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {}
| ^^^ ^^^^^
= note: required because it appears within the type `PhantomData<&T>`
= note: required because it appears within the type `Guard<'_, T>`
= note: required because it appears within the type `Nested<Guard<'_, T>>`
note: required because it appears within the type `Guard<'_, T>`
--> $DIR/phantom-auto-trait.rs:12:8
|
LL | struct Guard<'a, T: 'a> {
| ^^^^^
note: required because it appears within the type `Nested<Guard<'_, T>>`
--> $DIR/phantom-auto-trait.rs:16:8
|
LL | struct Nested<T>(T);
| ^^^^^^
help: consider restricting type parameter `T`
|
LL | fn nested_not_sync<T: std::marker::Sync>(x: Nested<Guard<T>>) {
......
......@@ -8,7 +8,11 @@ LL | let _: AssertSync<Foo> = unimplemented!();
| ^^^^^^^^^^^^^^^ `*const Bar` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `*const Bar`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/recursive-requirements.rs:5:12
|
LL | pub struct Foo {
| ^^^
error[E0277]: `*const Foo` cannot be shared between threads safely
--> $DIR/recursive-requirements.rs:16:12
......@@ -20,9 +24,17 @@ LL | let _: AssertSync<Foo> = unimplemented!();
| ^^^^^^^^^^^^^^^ `*const Foo` cannot be shared between threads safely
|
= help: within `Foo`, the trait `Sync` is not implemented for `*const Foo`
= note: required because it appears within the type `Bar`
note: required because it appears within the type `Bar`
--> $DIR/recursive-requirements.rs:10:12
|
LL | pub struct Bar {
| ^^^
= note: required because it appears within the type `PhantomData<Bar>`
= note: required because it appears within the type `Foo`
note: required because it appears within the type `Foo`
--> $DIR/recursive-requirements.rs:5:12
|
LL | pub struct Foo {
| ^^^
error: aborting due to 2 previous errors
......
......@@ -11,7 +11,11 @@ LL | | };
|
= help: within `&SomeStruct`, the trait `Sync` is not implemented for `dyn for<'a, 'b> Fn(&'a Foo<'b>) -> &'a Foo<'b>`
= note: required because it appears within the type `&dyn for<'a, 'b> Fn(&'a Foo<'b>) -> &'a Foo<'b>`
= note: required because it appears within the type `SomeStruct`
note: required because it appears within the type `SomeStruct`
--> $DIR/rfc1623.rs:11:8
|
LL | struct SomeStruct<'x, 'y, 'z: 'x> {
| ^^^^^^^^^^
= note: required because it appears within the type `&SomeStruct`
= note: shared static variables must have a type that implements `Sync`
......
......@@ -10,7 +10,11 @@ LL | #![feature(specialization)]
error[E0275]: overflow evaluating the requirement `i32: Check`
|
= note: required because of the requirements on the impl of `Iterate` for `i32`
note: required because of the requirements on the impl of `Iterate` for `i32`
--> $DIR/issue-38091-2.rs:11:13
|
LL | impl<'a, T> Iterate<'a> for T
| ^^^^^^^^^^^ ^
error: aborting due to previous error; 1 warning emitted
......
......@@ -14,8 +14,16 @@ error[E0275]: overflow evaluating the requirement `T: FromA<U>`
LL | x.foo(y.to()).to()
| ^^
|
= note: required because of the requirements on the impl of `FromA<U>` for `T`
= note: required because of the requirements on the impl of `ToA<T>` for `U`
note: required because of the requirements on the impl of `FromA<U>` for `T`
--> $DIR/issue-39448.rs:24:29
|
LL | impl<T: A, U: A + FromA<T>> FromA<T> for U {
| ^^^^^^^^ ^
note: required because of the requirements on the impl of `ToA<T>` for `U`
--> $DIR/issue-39448.rs:34:12
|
LL | impl<T, U> ToA<U> for T
| ^^^^^^ ^
error: aborting due to previous error; 1 warning emitted
......
......@@ -80,7 +80,11 @@ LL | <str as Foo<u8>>::bar;
| ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `str`
= note: required because of the requirements on the impl of `Foo<'_, '_, u8>` for `str`
note: required because of the requirements on the impl of `Foo<'_, '_, u8>` for `str`
--> $DIR/substs-ppaux.rs:11:17
|
LL | impl<'a,'b,T,S> Foo<'a, 'b, S> for T {}
| ^^^^^^^^^^^^^^ ^
error: aborting due to 5 previous errors
......
......@@ -80,7 +80,11 @@ LL | <str as Foo<u8>>::bar;
| ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `str`
= note: required because of the requirements on the impl of `Foo<'_#0r, '_#1r, u8>` for `str`
note: required because of the requirements on the impl of `Foo<'_#0r, '_#1r, u8>` for `str`
--> $DIR/substs-ppaux.rs:11:17
|
LL | impl<'a,'b,T,S> Foo<'a, 'b, S> for T {}
| ^^^^^^^^^^^^^^ ^
error: aborting due to 5 previous errors
......
......@@ -21,10 +21,10 @@ LL | | 1
| | - expected because of this
LL | | } else {
LL | | &1
| | -^
| | ^^
| | |
| | expected integer, found `&{integer}`
| | help: consider removing the `&`
| | help: consider removing the borrow: `1`
LL | | };
| |_____- `if` and `else` have incompatible types
......@@ -36,10 +36,10 @@ LL | | 1
| | - expected because of this
LL | | } else {
LL | | &mut 1
| | -----^
| | ^^^^^^
| | |
| | expected integer, found `&mut {integer}`
| | help: consider removing the `&mut`
| | help: consider removing the borrow: `1`
LL | | };
| |_____- `if` and `else` have incompatible types
......
// run-rustfix
fn main() {
if true {
"A".to_string()
} else {
"B".to_string() //~ ERROR `if` and `else` have incompatible types
};
}
// run-rustfix
fn main() {
if true {
"A".to_string()
} else {
"B" //~ ERROR `if` and `else` have incompatible types
};
}
error[E0308]: `if` and `else` have incompatible types
--> $DIR/issue-83943.rs:7:9
|
LL | / if true {
LL | | "A".to_string()
| | --------------- expected because of this
LL | | } else {
LL | | "B"
| | ^^^
| | |
| | expected struct `String`, found `&str`
| | help: try using a conversion method: `"B".to_string()`
LL | | };
| |_____- `if` and `else` have incompatible types
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
......@@ -10,9 +10,21 @@ LL | SourceDatabase::parse(db);
= note: required because it appears within the type `*const SalsaStorage`
= note: required because it appears within the type `Unique<SalsaStorage>`
= note: required because it appears within the type `Box<SalsaStorage>`
= note: required because it appears within the type `Runtime<RootDatabase>`
= note: required because it appears within the type `RootDatabase`
= note: required because of the requirements on the impl of `SourceDatabase` for `RootDatabase`
note: required because it appears within the type `Runtime<RootDatabase>`
--> $DIR/cycle-cache-err-60010.rs:23:8
|
LL | struct Runtime<DB: Database> {
| ^^^^^^^
note: required because it appears within the type `RootDatabase`
--> $DIR/cycle-cache-err-60010.rs:20:8
|
LL | struct RootDatabase {
| ^^^^^^^^^^^^
note: required because of the requirements on the impl of `SourceDatabase` for `RootDatabase`
--> $DIR/cycle-cache-err-60010.rs:43:9
|
LL | impl<T> SourceDatabase for T
| ^^^^^^^^^^^^^^ ^
error: aborting due to previous error
......
......@@ -16,7 +16,7 @@ impl<'a> Y for C<'a> {
struct X<T: Y>(T::P);
impl<T: NotAuto> NotAuto for Box<T> {}
impl<T: Y> NotAuto for X<T> where T::P: NotAuto {}
impl<T: Y> NotAuto for X<T> where T::P: NotAuto {} //~ NOTE: required
impl<'a> NotAuto for C<'a> {}
fn is_send<S: NotAuto>() {}
......@@ -26,5 +26,4 @@ fn main() {
// Should only be a few notes.
is_send::<X<C<'static>>>();
//~^ ERROR overflow evaluating
//~| NOTE: required
}
......@@ -7,7 +7,11 @@ LL | fn is_send<S: NotAuto>() {}
LL | is_send::<X<C<'static>>>();
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: required because of the requirements on the impl of `NotAuto` for `X<C<'static>>`
note: required because of the requirements on the impl of `NotAuto` for `X<C<'static>>`
--> $DIR/lifetime.rs:19:12
|
LL | impl<T: Y> NotAuto for X<T> where T::P: NotAuto {}
| ^^^^^^^ ^^^^
error: aborting due to previous error
......
......@@ -7,7 +7,11 @@ LL | fn is_ee<T: Combo>(t: T) {
LL | is_ee(4);
| ^^^^^
|
= note: required because of the requirements on the impl of `Combo` for `{integer}`
note: required because of the requirements on the impl of `Combo` for `{integer}`
--> $DIR/simultaneous.rs:11:34
|
LL | impl<T: Tweedledee + Tweedledum> Combo for T {}
| ^^^^^ ^
error: aborting due to previous error
......
......@@ -7,7 +7,11 @@ LL | fn copy<T: Magic>(x: T) -> (T, T) { (x, x) }
LL | let (a, b) = copy(NoClone);
| ^^^^
|
= note: required because of the requirements on the impl of `Magic` for `NoClone`
note: required because of the requirements on the impl of `Magic` for `NoClone`
--> $DIR/supertrait.rs:5:16
|
LL | impl<T: Magic> Magic for T {}
| ^^^^^ ^
error: aborting due to previous error
......
......@@ -69,7 +69,11 @@ LL | is_send(Box::new(Outer2(TestType)));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ `dummy3::TestType` cannot be sent between threads safely
|
= help: within `Outer2<dummy3::TestType>`, the trait `Send` is not implemented for `dummy3::TestType`
= note: required because it appears within the type `Outer2<dummy3::TestType>`
note: required because it appears within the type `Outer2<dummy3::TestType>`
--> $DIR/negated-auto-traits-error.rs:12:8
|
LL | struct Outer2<T>(T);
| ^^^^^^
= note: required because of the requirements on the impl of `Send` for `Unique<Outer2<dummy3::TestType>>`
= note: required because it appears within the type `Box<Outer2<dummy3::TestType>>`
......@@ -86,7 +90,11 @@ LL | is_sync(Outer2(TestType));
| help: consider borrowing here: `&Outer2(TestType)`
|
= note: the trait bound `main::TestType: Sync` is not satisfied
= note: required because of the requirements on the impl of `Sync` for `Outer2<main::TestType>`
note: required because of the requirements on the impl of `Sync` for `Outer2<main::TestType>`
--> $DIR/negated-auto-traits-error.rs:14:22
|
LL | unsafe impl<T: Send> Sync for Outer2<T> {}
| ^^^^ ^^^^^^^^^
error: aborting due to 7 previous errors
......
......@@ -26,7 +26,11 @@ LL | mem::size_of::<Misc<U>>();
LL | pub const fn size_of<T>() -> usize {
| - required by this bound in `std::mem::size_of`
|
= note: required because it appears within the type `Misc<U>`
note: required because it appears within the type `Misc<U>`
--> $DIR/suggest-where-clause.rs:3:8
|
LL | struct Misc<T:?Sized>(T);
| ^^^^
error[E0277]: the trait bound `u64: From<T>` is not satisfied
--> $DIR/suggest-where-clause.rs:15:5
......
......@@ -19,7 +19,11 @@ LL | is_sync::<MyTypeWUnsafe>();
| ^^^^^^^^^^^^^^^^^^^^^^^^ `UnsafeCell<u8>` cannot be shared between threads safely
|
= help: within `MyTypeWUnsafe`, the trait `Sync` is not implemented for `UnsafeCell<u8>`
= note: required because it appears within the type `MyTypeWUnsafe`
note: required because it appears within the type `MyTypeWUnsafe`
--> $DIR/typeck-default-trait-impl-negation-sync.rs:21:8
|
LL | struct MyTypeWUnsafe {
| ^^^^^^^^^^^^^
error[E0277]: `Managed` cannot be shared between threads safely
--> $DIR/typeck-default-trait-impl-negation-sync.rs:39:5
......@@ -31,7 +35,11 @@ LL | is_sync::<MyTypeManaged>();
| ^^^^^^^^^^^^^^^^^^^^^^^^ `Managed` cannot be shared between threads safely
|
= help: within `MyTypeManaged`, the trait `Sync` is not implemented for `Managed`
= note: required because it appears within the type `MyTypeManaged`
note: required because it appears within the type `MyTypeManaged`
--> $DIR/typeck-default-trait-impl-negation-sync.rs:25:8
|
LL | struct MyTypeManaged {
| ^^^^^^^^^^^^^
error: aborting due to 3 previous errors
......
......@@ -30,7 +30,11 @@ LL | test(ms);
| ^^^^ `UnsafeCell<NoSync>` cannot be shared between threads safely
|
= help: within `MySync<NoSync>`, the trait `Sync` is not implemented for `UnsafeCell<NoSync>`
= note: required because it appears within the type `MySync<NoSync>`
note: required because it appears within the type `MySync<NoSync>`
--> $DIR/typeck-unsafe-always-share.rs:8:8
|
LL | struct MySync<T> {
| ^^^^^^
error[E0277]: `NoSync` cannot be shared between threads safely
--> $DIR/typeck-unsafe-always-share.rs:30:10
......
......@@ -14,7 +14,11 @@ LL | A as fn(str) -> A<str>;
| ^ doesn't have a size known at compile-time
|
= help: within `A<str>`, the trait `Sized` is not implemented for `str`
= note: required because it appears within the type `A<str>`
note: required because it appears within the type `A<str>`
--> $DIR/issue-50940-with-feature.rs:5:12
|
LL | struct A<X: ?Sized>(X);
| ^
= note: the return type of a function must have a statically known size
error: aborting due to previous error; 1 warning emitted
......
......@@ -15,7 +15,11 @@ LL | udrop::<A<[u8]>>(A { 0: *foo() });
| ^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: within `A<[u8]>`, the trait `Sized` is not implemented for `[u8]`
= note: required because it appears within the type `A<[u8]>`
note: required because it appears within the type `A<[u8]>`
--> $DIR/unsized-exprs.rs:3:8
|
LL | struct A<X: ?Sized>(X);
| ^
= note: structs must have a statically known size to be initialized
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
......@@ -25,7 +29,11 @@ LL | udrop::<A<[u8]>>(A(*foo()));
| ^ doesn't have a size known at compile-time
|
= help: within `A<[u8]>`, the trait `Sized` is not implemented for `[u8]`
= note: required because it appears within the type `A<[u8]>`
note: required because it appears within the type `A<[u8]>`
--> $DIR/unsized-exprs.rs:3:8
|
LL | struct A<X: ?Sized>(X);
| ^
= note: the return type of a function must have a statically known size
error: aborting due to 3 previous errors
......
......@@ -301,7 +301,11 @@ LL | VI(Path1),
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path1`, the trait `Sized` is not implemented for `(dyn PathHelper1 + 'static)`
= note: required because it appears within the type `Path1`
note: required because it appears within the type `Path1`
--> $DIR/unsized-enum2.rs:16:8
|
LL | struct Path1(dyn PathHelper1);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
......@@ -320,7 +324,11 @@ LL | VJ{x: Path2},
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path2`, the trait `Sized` is not implemented for `(dyn PathHelper2 + 'static)`
= note: required because it appears within the type `Path2`
note: required because it appears within the type `Path2`
--> $DIR/unsized-enum2.rs:17:8
|
LL | struct Path2(dyn PathHelper2);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
......@@ -339,7 +347,11 @@ LL | VK(isize, Path3),
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path3`, the trait `Sized` is not implemented for `(dyn PathHelper3 + 'static)`
= note: required because it appears within the type `Path3`
note: required because it appears within the type `Path3`
--> $DIR/unsized-enum2.rs:18:8
|
LL | struct Path3(dyn PathHelper3);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
......@@ -358,7 +370,11 @@ LL | VL{u: isize, x: Path4},
| ^^^^^ doesn't have a size known at compile-time
|
= help: within `Path4`, the trait `Sized` is not implemented for `(dyn PathHelper4 + 'static)`
= note: required because it appears within the type `Path4`
note: required because it appears within the type `Path4`
--> $DIR/unsized-enum2.rs:19:8
|
LL | struct Path4(dyn PathHelper4);
| ^^^^^
= note: no field of an enum variant may have a dynamically sized type
= help: change the field's type to have a statically known size
help: borrowed types always have a statically known size
......
......@@ -28,7 +28,11 @@ LL | fn bar2<T: ?Sized>() { is_sized::<Bar<T>>() }
| |
| this type parameter needs to be `std::marker::Sized`
|
= note: required because it appears within the type `Bar<T>`
note: required because it appears within the type `Bar<T>`
--> $DIR/unsized-struct.rs:11:8
|
LL | struct Bar<T: ?Sized> { data: T }
| ^^^
error: aborting due to 2 previous errors
......
......@@ -41,7 +41,11 @@ LL | fn f8<X: ?Sized>(x1: &S<X>, x2: &S<X>) {
LL | f5(x1);
| ^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
help: consider relaxing the implicit `Sized` restriction
|
LL | fn f5<Y: ?Sized>(x: &Y) {}
......@@ -55,7 +59,11 @@ LL | fn f9<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(*x1, 34));
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: only the last element of a tuple may have a dynamically sized type
error[E0277]: the size for values of type `X` cannot be known at compilation time
......@@ -66,7 +74,11 @@ LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(32, *x1));
| ^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: required because it appears within the type `({integer}, S<X>)`
= note: tuples must have a statically known size to be initialized
......@@ -81,7 +93,11 @@ LL | fn f10<X: ?Sized>(x1: Box<S<X>>) {
LL | f5(&(32, *x1));
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
= note: required because it appears within the type `S<X>`
note: required because it appears within the type `S<X>`
--> $DIR/unsized3.rs:28:8
|
LL | struct S<X: ?Sized> {
| ^
= note: required because it appears within the type `({integer}, S<X>)`
help: consider relaxing the implicit `Sized` restriction
|
......
......@@ -1600,7 +1600,7 @@ fn document(&self, out_dir: &Path) -> ProcRes {
.args(&self.props.compile_flags);
if self.config.mode == RustdocJson {
rustdoc.arg("--output-format").arg("json");
rustdoc.arg("--output-format").arg("json").arg("-Zunstable-options");
}
if let Some(ref linker) = self.config.linker {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册