1
Fork 0

Auto merge of #134414 - jhpratt:rollup-4gtfd1h, r=jhpratt

Rollup of 10 pull requests

Successful merges:

 - #134202 (Remove `rustc::existing_doc_keyword` lint)
 - #134354 (Handle fndef rendering together with signature rendering)
 - #134365 (Rename `rustc_mir_build::build` to `builder`)
 - #134368 (Use links to edition guide for edition migrations)
 - #134397 (rustc_borrowck: Suggest changing `&raw const` to `&raw mut` if applicable)
 - #134398 (AIX: add alignment info for test)
 - #134400 (Fix some comments related to upvars handling)
 - #134406 (Fix `-Z input-stats` ordering)
 - #134409 (bootstrap: fix a comment)
 - #134412 (small borrowck cleanup)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2024-12-17 12:07:32 +00:00
commit f23a80a4c2
121 changed files with 577 additions and 627 deletions

View file

@ -4275,7 +4275,6 @@ dependencies = [
"rustc_fluent_macro", "rustc_fluent_macro",
"rustc_hir", "rustc_hir",
"rustc_index", "rustc_index",
"rustc_lexer",
"rustc_macros", "rustc_macros",
"rustc_middle", "rustc_middle",
"rustc_privacy", "rustc_privacy",

View file

@ -1474,16 +1474,27 @@ fn suggest_ampmut<'tcx>(
// let x: &i32 = &'a 5; // let x: &i32 = &'a 5;
// ^^ lifetime annotation not allowed // ^^ lifetime annotation not allowed
// //
if let Some(assignment_rhs_span) = opt_assignment_rhs_span if let Some(rhs_span) = opt_assignment_rhs_span
&& let Ok(src) = tcx.sess.source_map().span_to_snippet(assignment_rhs_span) && let Ok(rhs_str) = tcx.sess.source_map().span_to_snippet(rhs_span)
&& let Some(stripped) = src.strip_prefix('&') && let Some(rhs_str_no_amp) = rhs_str.strip_prefix('&')
{ {
let is_raw_ref = stripped.trim_start().starts_with("raw "); // Suggest changing `&raw const` to `&raw mut` if applicable.
// We don't support raw refs yet if rhs_str_no_amp.trim_start().strip_prefix("raw const").is_some() {
if is_raw_ref { let const_idx = rhs_str.find("const").unwrap() as u32;
return None; let const_span = rhs_span
.with_lo(rhs_span.lo() + BytePos(const_idx))
.with_hi(rhs_span.lo() + BytePos(const_idx + "const".len() as u32));
return Some(AmpMutSugg {
has_sugg: true,
span: const_span,
suggestion: "mut".to_owned(),
additional: None,
});
} }
let is_mut = if let Some(rest) = stripped.trim_start().strip_prefix("mut") {
// Figure out if rhs already is `&mut`.
let is_mut = if let Some(rest) = rhs_str_no_amp.trim_start().strip_prefix("mut") {
match rest.chars().next() { match rest.chars().next() {
// e.g. `&mut x` // e.g. `&mut x`
Some(c) if c.is_whitespace() => true, Some(c) if c.is_whitespace() => true,
@ -1500,9 +1511,8 @@ fn suggest_ampmut<'tcx>(
// if the reference is already mutable then there is nothing we can do // if the reference is already mutable then there is nothing we can do
// here. // here.
if !is_mut { if !is_mut {
let span = assignment_rhs_span;
// shrink the span to just after the `&` in `&variable` // shrink the span to just after the `&` in `&variable`
let span = span.with_lo(span.lo() + BytePos(1)).shrink_to_lo(); let span = rhs_span.with_lo(rhs_span.lo() + BytePos(1)).shrink_to_lo();
// FIXME(Ezrashaw): returning is bad because we still might want to // FIXME(Ezrashaw): returning is bad because we still might want to
// update the annotated type, see #106857. // update the annotated type, see #106857.

View file

@ -848,7 +848,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
return; return;
}; };
let fn_returns = self.infcx.tcx.return_type_impl_or_dyn_traits(suitable_region.def_id); let fn_returns = self.infcx.tcx.return_type_impl_or_dyn_traits(suitable_region.scope);
let param = if let Some(param) = let param = if let Some(param) =
find_param_with_region(self.infcx.tcx, self.mir_def_id(), f, outlived_f) find_param_with_region(self.infcx.tcx, self.mir_def_id(), f, outlived_f)
@ -875,7 +875,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
Some(arg), Some(arg),
captures, captures,
Some((param.param_ty_span, param.param_ty.to_string())), Some((param.param_ty_span, param.param_ty.to_string())),
Some(suitable_region.def_id), Some(suitable_region.scope),
); );
return; return;
} }
@ -883,7 +883,7 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
let Some((alias_tys, alias_span, lt_addition_span)) = self let Some((alias_tys, alias_span, lt_addition_span)) = self
.infcx .infcx
.tcx .tcx
.return_type_impl_or_dyn_traits_with_type_alias(suitable_region.def_id) .return_type_impl_or_dyn_traits_with_type_alias(suitable_region.scope)
else { else {
return; return;
}; };
@ -1018,18 +1018,20 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
return; return;
}; };
let Some((ty_sub, _)) = let Some((ty_sub, _)) = self
self.infcx.tcx.is_suitable_region(self.mir_def_id(), sub).and_then(|anon_reg| { .infcx
find_anon_type(self.infcx.tcx, self.mir_def_id(), sub, &anon_reg.bound_region) .tcx
}) .is_suitable_region(self.mir_def_id(), sub)
.and_then(|_| find_anon_type(self.infcx.tcx, self.mir_def_id(), sub))
else { else {
return; return;
}; };
let Some((ty_sup, _)) = let Some((ty_sup, _)) = self
self.infcx.tcx.is_suitable_region(self.mir_def_id(), sup).and_then(|anon_reg| { .infcx
find_anon_type(self.infcx.tcx, self.mir_def_id(), sup, &anon_reg.bound_region) .tcx
}) .is_suitable_region(self.mir_def_id(), sup)
.and_then(|_| find_anon_type(self.infcx.tcx, self.mir_def_id(), sup))
else { else {
return; return;
}; };

View file

@ -141,6 +141,9 @@ fn do_mir_borrowck<'tcx>(
) -> (BorrowCheckResult<'tcx>, Option<Box<BodyWithBorrowckFacts<'tcx>>>) { ) -> (BorrowCheckResult<'tcx>, Option<Box<BodyWithBorrowckFacts<'tcx>>>) {
let def = input_body.source.def_id().expect_local(); let def = input_body.source.def_id().expect_local();
let infcx = BorrowckInferCtxt::new(tcx, def); let infcx = BorrowckInferCtxt::new(tcx, def);
if let Some(e) = input_body.tainted_by_errors {
infcx.set_tainted_by_errors(e);
}
let mut local_names = IndexVec::from_elem(None, &input_body.local_decls); let mut local_names = IndexVec::from_elem(None, &input_body.local_decls);
for var_debug_info in &input_body.var_debug_info { for var_debug_info in &input_body.var_debug_info {
@ -162,13 +165,6 @@ fn do_mir_borrowck<'tcx>(
} }
} }
let diags = &mut diags::BorrowckDiags::new();
// Gather the upvars of a closure, if any.
if let Some(e) = input_body.tainted_by_errors {
infcx.set_tainted_by_errors(e);
}
// Replace all regions with fresh inference variables. This // Replace all regions with fresh inference variables. This
// requires first making our own copy of the MIR. This copy will // requires first making our own copy of the MIR. This copy will
// be modified (in place) to contain non-lexical lifetimes. It // be modified (in place) to contain non-lexical lifetimes. It
@ -224,6 +220,7 @@ fn do_mir_borrowck<'tcx>(
// We also have a `#[rustc_regions]` annotation that causes us to dump // We also have a `#[rustc_regions]` annotation that causes us to dump
// information. // information.
let diags = &mut diags::BorrowckDiags::new();
nll::dump_annotation(&infcx, body, &regioncx, &opt_closure_req, &opaque_type_values, diags); nll::dump_annotation(&infcx, body, &regioncx, &opt_closure_req, &opaque_type_values, diags);
let movable_coroutine = let movable_coroutine =

View file

@ -14,7 +14,7 @@
//! to everything owned by `x`, so the result is the same for something //! to everything owned by `x`, so the result is the same for something
//! like `x.f = 5` and so on (presuming `x` is not a borrowed pointer to a //! like `x.f = 5` and so on (presuming `x` is not a borrowed pointer to a
//! struct). These adjustments are performed in //! struct). These adjustments are performed in
//! `adjust_upvar_borrow_kind()` (you can trace backwards through the code //! `adjust_for_non_move_closure` (you can trace backwards through the code
//! from there). //! from there).
//! //!
//! The fact that we are inferring borrow kinds as we go results in a //! The fact that we are inferring borrow kinds as we go results in a
@ -1684,8 +1684,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
// want to capture by ref to allow precise capture using reborrows. // want to capture by ref to allow precise capture using reborrows.
// //
// If the data will be moved out of this place, then the place will be truncated // If the data will be moved out of this place, then the place will be truncated
// at the first Deref in `adjust_upvar_borrow_kind_for_consume` and then moved into // at the first Deref in `adjust_for_move_closure` and then moved into the closure.
// the closure.
hir::CaptureBy::Value { .. } if !place.deref_tys().any(Ty::is_ref) => { hir::CaptureBy::Value { .. } if !place.deref_tys().any(Ty::is_ref) => {
ty::UpvarCapture::ByValue ty::UpvarCapture::ByValue
} }

View file

@ -689,7 +689,7 @@ impl<'tcx> InferCtxt<'tcx> {
/// Require that the region `r` be equal to one of the regions in /// Require that the region `r` be equal to one of the regions in
/// the set `regions`. /// the set `regions`.
#[instrument(skip(self), level = "debug")] #[instrument(skip(self), level = "debug")]
pub fn member_constraint( pub fn add_member_constraint(
&self, &self,
key: ty::OpaqueTypeKey<'tcx>, key: ty::OpaqueTypeKey<'tcx>,
definition_span: Span, definition_span: Span,
@ -697,7 +697,7 @@ impl<'tcx> InferCtxt<'tcx> {
region: ty::Region<'tcx>, region: ty::Region<'tcx>,
in_regions: Lrc<Vec<ty::Region<'tcx>>>, in_regions: Lrc<Vec<ty::Region<'tcx>>>,
) { ) {
self.inner.borrow_mut().unwrap_region_constraints().member_constraint( self.inner.borrow_mut().unwrap_region_constraints().add_member_constraint(
key, key,
definition_span, definition_span,
hidden_ty, hidden_ty,

View file

@ -364,7 +364,7 @@ impl<'tcx> InferCtxt<'tcx> {
concrete_ty.visit_with(&mut ConstrainOpaqueTypeRegionVisitor { concrete_ty.visit_with(&mut ConstrainOpaqueTypeRegionVisitor {
tcx: self.tcx, tcx: self.tcx,
op: |r| { op: |r| {
self.member_constraint( self.add_member_constraint(
opaque_type_key, opaque_type_key,
span, span,
concrete_ty, concrete_ty,

View file

@ -466,7 +466,7 @@ impl<'tcx> RegionConstraintCollector<'_, 'tcx> {
} }
} }
pub(super) fn member_constraint( pub(super) fn add_member_constraint(
&mut self, &mut self,
key: ty::OpaqueTypeKey<'tcx>, key: ty::OpaqueTypeKey<'tcx>,
definition_span: Span, definition_span: Span,

View file

@ -536,9 +536,6 @@ lint_non_camel_case_type = {$sort} `{$name}` should have an upper camel case nam
.suggestion = convert the identifier to upper camel case .suggestion = convert the identifier to upper camel case
.label = should have an UpperCamelCase name .label = should have an UpperCamelCase name
lint_non_existent_doc_keyword = found non-existing keyword `{$keyword}` used in `#[doc(keyword = "...")]`
.help = only existing keywords are allowed in core/std
lint_non_fmt_panic = panic message is not a string literal lint_non_fmt_panic = panic message is not a string literal
.note = this usage of `{$name}!()` is deprecated; it will be a hard error in Rust 2021 .note = this usage of `{$name}!()` is deprecated; it will be a hard error in Rust 2021
.more_info_note = for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html> .more_info_note = for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>

View file

@ -1814,7 +1814,7 @@ declare_lint! {
"detects edition keywords being used as an identifier", "detects edition keywords being used as an identifier",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024),
reference: "issue #49716 <https://github.com/rust-lang/rust/issues/49716>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/gen-keyword.html>",
}; };
} }

View file

@ -84,7 +84,7 @@ declare_lint! {
rewriting in `match` is an option to preserve the semantics up to Edition 2021", rewriting in `match` is an option to preserve the semantics up to Edition 2021",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024),
reference: "issue #124085 <https://github.com/rust-lang/rust/issues/124085>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>",
}; };
} }

View file

@ -12,11 +12,11 @@ use rustc_middle::ty::{self, GenericArgsRef, Ty as MiddleTy};
use rustc_session::{declare_lint_pass, declare_tool_lint}; use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::Span; use rustc_span::Span;
use rustc_span::hygiene::{ExpnKind, MacroKind}; use rustc_span::hygiene::{ExpnKind, MacroKind};
use rustc_span::symbol::{Symbol, kw, sym}; use rustc_span::symbol::sym;
use tracing::debug; use tracing::debug;
use crate::lints::{ use crate::lints::{
BadOptAccessDiag, DefaultHashTypesDiag, DiagOutOfImpl, LintPassByHand, NonExistentDocKeyword, BadOptAccessDiag, DefaultHashTypesDiag, DiagOutOfImpl, LintPassByHand,
NonGlobImportTypeIrInherent, QueryInstability, QueryUntracked, SpanUseEqCtxtDiag, NonGlobImportTypeIrInherent, QueryInstability, QueryUntracked, SpanUseEqCtxtDiag,
SymbolInternStringLiteralDiag, TyQualified, TykindDiag, TykindKind, TypeIrInherentUsage, SymbolInternStringLiteralDiag, TyQualified, TykindDiag, TykindKind, TypeIrInherentUsage,
UntranslatableDiag, UntranslatableDiag,
@ -375,46 +375,6 @@ impl EarlyLintPass for LintPassImpl {
} }
} }
declare_tool_lint! {
/// The `existing_doc_keyword` lint detects use `#[doc()]` keywords
/// that don't exist, e.g. `#[doc(keyword = "..")]`.
pub rustc::EXISTING_DOC_KEYWORD,
Allow,
"Check that documented keywords in std and core actually exist",
report_in_external_macro: true
}
declare_lint_pass!(ExistingDocKeyword => [EXISTING_DOC_KEYWORD]);
fn is_doc_keyword(s: Symbol) -> bool {
s <= kw::Union
}
impl<'tcx> LateLintPass<'tcx> for ExistingDocKeyword {
fn check_item(&mut self, cx: &LateContext<'_>, item: &rustc_hir::Item<'_>) {
for attr in cx.tcx.hir().attrs(item.hir_id()) {
if !attr.has_name(sym::doc) {
continue;
}
if let Some(list) = attr.meta_item_list() {
for nested in list {
if nested.has_name(sym::keyword) {
let keyword = nested
.value_str()
.expect("#[doc(keyword = \"...\")] expected a value!");
if is_doc_keyword(keyword) {
return;
}
cx.emit_span_lint(EXISTING_DOC_KEYWORD, attr.span, NonExistentDocKeyword {
keyword,
});
}
}
}
}
}
}
declare_tool_lint! { declare_tool_lint! {
/// The `untranslatable_diagnostic` lint detects messages passed to functions with `impl /// The `untranslatable_diagnostic` lint detects messages passed to functions with `impl
/// Into<{D,Subd}iagMessage` parameters without using translatable Fluent strings. /// Into<{D,Subd}iagMessage` parameters without using translatable Fluent strings.

View file

@ -600,8 +600,6 @@ fn register_internals(store: &mut LintStore) {
store.register_late_mod_pass(|_| Box::new(DefaultHashTypes)); store.register_late_mod_pass(|_| Box::new(DefaultHashTypes));
store.register_lints(&QueryStability::lint_vec()); store.register_lints(&QueryStability::lint_vec());
store.register_late_mod_pass(|_| Box::new(QueryStability)); store.register_late_mod_pass(|_| Box::new(QueryStability));
store.register_lints(&ExistingDocKeyword::lint_vec());
store.register_late_mod_pass(|_| Box::new(ExistingDocKeyword));
store.register_lints(&TyTyKind::lint_vec()); store.register_lints(&TyTyKind::lint_vec());
store.register_late_mod_pass(|_| Box::new(TyTyKind)); store.register_late_mod_pass(|_| Box::new(TyTyKind));
store.register_lints(&TypeIr::lint_vec()); store.register_lints(&TypeIr::lint_vec());
@ -629,7 +627,6 @@ fn register_internals(store: &mut LintStore) {
LintId::of(LINT_PASS_IMPL_WITHOUT_MACRO), LintId::of(LINT_PASS_IMPL_WITHOUT_MACRO),
LintId::of(USAGE_OF_QUALIFIED_TY), LintId::of(USAGE_OF_QUALIFIED_TY),
LintId::of(NON_GLOB_IMPORT_OF_TYPE_IR_INHERENT), LintId::of(NON_GLOB_IMPORT_OF_TYPE_IR_INHERENT),
LintId::of(EXISTING_DOC_KEYWORD),
LintId::of(BAD_OPT_ACCESS), LintId::of(BAD_OPT_ACCESS),
LintId::of(SPAN_USE_EQ_CTXT), LintId::of(SPAN_USE_EQ_CTXT),
]); ]);

View file

@ -950,13 +950,6 @@ pub(crate) struct NonGlobImportTypeIrInherent {
#[help] #[help]
pub(crate) struct LintPassByHand; pub(crate) struct LintPassByHand;
#[derive(LintDiagnostic)]
#[diag(lint_non_existent_doc_keyword)]
#[help]
pub(crate) struct NonExistentDocKeyword {
pub keyword: Symbol,
}
#[derive(LintDiagnostic)] #[derive(LintDiagnostic)]
#[diag(lint_diag_out_of_impl)] #[diag(lint_diag_out_of_impl)]
pub(crate) struct DiagOutOfImpl; pub(crate) struct DiagOutOfImpl;

View file

@ -61,6 +61,7 @@ declare_lint! {
"detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021", "detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024),
reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>"
}; };
} }

View file

@ -1677,7 +1677,7 @@ declare_lint! {
"detects patterns whose meaning will change in Rust 2024", "detects patterns whose meaning will change in Rust 2024",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024),
reference: "123076", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>",
}; };
} }
@ -2606,7 +2606,7 @@ declare_lint! {
"unsafe operations in unsafe functions without an explicit unsafe block are deprecated", "unsafe operations in unsafe functions without an explicit unsafe block are deprecated",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024),
reference: "issue #71668 <https://github.com/rust-lang/rust/issues/71668>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>",
explain_reason: false explain_reason: false
}; };
@edition Edition2024 => Warn; @edition Edition2024 => Warn;
@ -4189,7 +4189,7 @@ declare_lint! {
"never type fallback affecting unsafe function calls", "never type fallback affecting unsafe function calls",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionAndFutureReleaseSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionAndFutureReleaseSemanticsChange(Edition::Edition2024),
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>",
}; };
@edition Edition2024 => Deny; @edition Edition2024 => Deny;
report_in_external_macro report_in_external_macro
@ -4243,7 +4243,7 @@ declare_lint! {
"never type fallback affecting unsafe function calls", "never type fallback affecting unsafe function calls",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionAndFutureReleaseError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionAndFutureReleaseError(Edition::Edition2024),
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>",
}; };
report_in_external_macro report_in_external_macro
} }
@ -4790,7 +4790,7 @@ declare_lint! {
"detects unsafe functions being used as safe functions", "detects unsafe functions being used as safe functions",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024),
reference: "issue #27970 <https://github.com/rust-lang/rust/issues/27970>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/newly-unsafe-functions.html>",
}; };
} }
@ -4826,7 +4826,7 @@ declare_lint! {
"detects missing unsafe keyword on extern declarations", "detects missing unsafe keyword on extern declarations",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024),
reference: "issue #123743 <https://github.com/rust-lang/rust/issues/123743>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/unsafe-extern.html>",
}; };
} }
@ -4867,7 +4867,7 @@ declare_lint! {
"detects unsafe attributes outside of unsafe", "detects unsafe attributes outside of unsafe",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024),
reference: "issue #123757 <https://github.com/rust-lang/rust/issues/123757>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/unsafe-attributes.html>",
}; };
} }
@ -5069,7 +5069,7 @@ declare_lint! {
"Detect and warn on significant change in drop order in tail expression location", "Detect and warn on significant change in drop order in tail expression location",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionSemanticsChange(Edition::Edition2024),
reference: "issue #123739 <https://github.com/rust-lang/rust/issues/123739>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>",
}; };
} }
@ -5108,7 +5108,7 @@ declare_lint! {
"will be parsed as a guarded string in Rust 2024", "will be parsed as a guarded string in Rust 2024",
@future_incompatible = FutureIncompatibleInfo { @future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024),
reference: "issue #123735 <https://github.com/rust-lang/rust/issues/123735>", reference: "<https://doc.rust-lang.org/nightly/edition-guide/rust-2024/reserved-syntax.html>",
}; };
crate_level_only crate_level_only
} }

View file

@ -1119,10 +1119,10 @@ impl<'tcx> CommonConsts<'tcx> {
/// either a `ReEarlyParam` or `ReLateParam`. /// either a `ReEarlyParam` or `ReLateParam`.
#[derive(Debug)] #[derive(Debug)]
pub struct FreeRegionInfo { pub struct FreeRegionInfo {
/// `LocalDefId` of the free region. /// `LocalDefId` of the scope.
pub def_id: LocalDefId, pub scope: LocalDefId,
/// the bound region corresponding to free region. /// the `DefId` of the free region.
pub bound_region: ty::BoundRegionKind, pub region_def_id: DefId,
/// checks if bound region is in Impl Item /// checks if bound region is in Impl Item
pub is_impl_item: bool, pub is_impl_item: bool,
} }
@ -1960,7 +1960,7 @@ impl<'tcx> TyCtxt<'tcx> {
generic_param_scope: LocalDefId, generic_param_scope: LocalDefId,
mut region: Region<'tcx>, mut region: Region<'tcx>,
) -> Option<FreeRegionInfo> { ) -> Option<FreeRegionInfo> {
let (suitable_region_binding_scope, bound_region) = loop { let (suitable_region_binding_scope, region_def_id) = loop {
let def_id = let def_id =
region.opt_param_def_id(self, generic_param_scope.to_def_id())?.as_local()?; region.opt_param_def_id(self, generic_param_scope.to_def_id())?.as_local()?;
let scope = self.local_parent(def_id); let scope = self.local_parent(def_id);
@ -1970,10 +1970,7 @@ impl<'tcx> TyCtxt<'tcx> {
region = self.map_opaque_lifetime_to_parent_lifetime(def_id); region = self.map_opaque_lifetime_to_parent_lifetime(def_id);
continue; continue;
} }
break ( break (scope, def_id.into());
scope,
ty::BoundRegionKind::Named(def_id.into(), self.item_name(def_id.into())),
);
}; };
let is_impl_item = match self.hir_node_by_def_id(suitable_region_binding_scope) { let is_impl_item = match self.hir_node_by_def_id(suitable_region_binding_scope) {
@ -1982,7 +1979,7 @@ impl<'tcx> TyCtxt<'tcx> {
_ => false, _ => false,
}; };
Some(FreeRegionInfo { def_id: suitable_region_binding_scope, bound_region, is_impl_item }) Some(FreeRegionInfo { scope: suitable_region_binding_scope, region_def_id, is_impl_item })
} }
/// Given a `DefId` for an `fn`, return all the `dyn` and `impl` traits in its return type. /// Given a `DefId` for an `fn`, return all the `dyn` and `impl` traits in its return type.

View file

@ -5,9 +5,9 @@ use rustc_middle::{span_bug, ty};
use rustc_span::Span; use rustc_span::Span;
use tracing::debug; use tracing::debug;
use crate::build::ForGuard::OutsideGuard; use crate::builder::ForGuard::OutsideGuard;
use crate::build::matches::{DeclareLetBindings, EmitStorageLive, ScheduleDrops}; use crate::builder::matches::{DeclareLetBindings, EmitStorageLive, ScheduleDrops};
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder}; use crate::builder::{BlockAnd, BlockAndExtension, BlockFrame, Builder};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
pub(crate) fn ast_block( pub(crate) fn ast_block(

View file

@ -4,7 +4,7 @@ use rustc_middle::mir::*;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use tracing::debug; use tracing::debug;
use crate::build::CFG; use crate::builder::CFG;
impl<'tcx> CFG<'tcx> { impl<'tcx> CFG<'tcx> {
pub(crate) fn block_data(&self, blk: BasicBlock) -> &BasicBlockData<'tcx> { pub(crate) fn block_data(&self, blk: BasicBlock) -> &BasicBlockData<'tcx> {

View file

@ -8,8 +8,8 @@ use rustc_middle::thir::{ExprId, ExprKind, Pat, Thir};
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_span::def_id::LocalDefId; use rustc_span::def_id::LocalDefId;
use crate::build::coverageinfo::mcdc::MCDCInfoBuilder; use crate::builder::coverageinfo::mcdc::MCDCInfoBuilder;
use crate::build::{Builder, CFG}; use crate::builder::{Builder, CFG};
mod mcdc; mod mcdc;

View file

@ -9,7 +9,7 @@ use rustc_middle::thir::LogicalOp;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_span::Span; use rustc_span::Span;
use crate::build::Builder; use crate::builder::Builder;
use crate::errors::MCDCExceedsConditionLimit; use crate::errors::MCDCExceedsConditionLimit;
/// LLVM uses `i16` to represent condition id. Hence `i16::MAX` is the hard limit for number of /// LLVM uses `i16` to represent condition id. Hence `i16::MAX` is the hard limit for number of

View file

@ -9,8 +9,8 @@ use rustc_span::Span;
use rustc_span::source_map::Spanned; use rustc_span::source_map::Spanned;
use super::{PResult, ParseCtxt, parse_by_kind}; use super::{PResult, ParseCtxt, parse_by_kind};
use crate::build::custom::ParseError; use crate::builder::custom::ParseError;
use crate::build::expr::as_constant::as_constant_inner; use crate::builder::expr::as_constant::as_constant_inner;
impl<'a, 'tcx> ParseCtxt<'a, 'tcx> { impl<'a, 'tcx> ParseCtxt<'a, 'tcx> {
pub(crate) fn parse_statement(&self, expr_id: ExprId) -> PResult<StatementKind<'tcx>> { pub(crate) fn parse_statement(&self, expr_id: ExprId) -> PResult<StatementKind<'tcx>> {

View file

@ -14,7 +14,7 @@ use rustc_middle::ty::{
use rustc_middle::{bug, mir, span_bug}; use rustc_middle::{bug, mir, span_bug};
use tracing::{instrument, trace}; use tracing::{instrument, trace};
use crate::build::{Builder, parse_float_into_constval}; use crate::builder::{Builder, parse_float_into_constval};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Compile `expr`, yielding a compile-time constant. Assumes that /// Compile `expr`, yielding a compile-time constant. Assumes that

View file

@ -4,8 +4,8 @@ use rustc_middle::mir::*;
use rustc_middle::thir::*; use rustc_middle::thir::*;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::expr::category::Category; use crate::builder::expr::category::Category;
use crate::build::{BlockAnd, BlockAndExtension, Builder, NeedsTemporary}; use crate::builder::{BlockAnd, BlockAndExtension, Builder, NeedsTemporary};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Construct a temporary lifetime restricted to just the local scope /// Construct a temporary lifetime restricted to just the local scope

View file

@ -14,9 +14,9 @@ use rustc_middle::{bug, span_bug};
use rustc_span::{DesugaringKind, Span}; use rustc_span::{DesugaringKind, Span};
use tracing::{debug, instrument, trace}; use tracing::{debug, instrument, trace};
use crate::build::ForGuard::{OutsideGuard, RefWithinGuard}; use crate::builder::ForGuard::{OutsideGuard, RefWithinGuard};
use crate::build::expr::category::Category; use crate::builder::expr::category::Category;
use crate::build::{BlockAnd, BlockAndExtension, Builder, Capture, CaptureMap}; use crate::builder::{BlockAnd, BlockAndExtension, Builder, Capture, CaptureMap};
/// The "outermost" place that holds this value. /// The "outermost" place that holds this value.
#[derive(Copy, Clone, Debug, PartialEq)] #[derive(Copy, Clone, Debug, PartialEq)]
@ -68,7 +68,7 @@ pub(crate) enum PlaceBase {
/// This is used internally when building a place for an expression like `a.b.c`. The fields `b` /// This is used internally when building a place for an expression like `a.b.c`. The fields `b`
/// and `c` can be progressively pushed onto the place builder that is created when converting `a`. /// and `c` can be progressively pushed onto the place builder that is created when converting `a`.
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]
pub(in crate::build) struct PlaceBuilder<'tcx> { pub(in crate::builder) struct PlaceBuilder<'tcx> {
base: PlaceBase, base: PlaceBase,
projection: Vec<PlaceElem<'tcx>>, projection: Vec<PlaceElem<'tcx>>,
} }
@ -249,7 +249,7 @@ fn strip_prefix<'a, 'tcx>(
} }
impl<'tcx> PlaceBuilder<'tcx> { impl<'tcx> PlaceBuilder<'tcx> {
pub(in crate::build) fn to_place(&self, cx: &Builder<'_, 'tcx>) -> Place<'tcx> { pub(in crate::builder) fn to_place(&self, cx: &Builder<'_, 'tcx>) -> Place<'tcx> {
self.try_to_place(cx).unwrap_or_else(|| match self.base { self.try_to_place(cx).unwrap_or_else(|| match self.base {
PlaceBase::Local(local) => span_bug!( PlaceBase::Local(local) => span_bug!(
cx.local_decls[local].source_info.span, cx.local_decls[local].source_info.span,
@ -265,7 +265,7 @@ impl<'tcx> PlaceBuilder<'tcx> {
} }
/// Creates a `Place` or returns `None` if an upvar cannot be resolved /// Creates a `Place` or returns `None` if an upvar cannot be resolved
pub(in crate::build) fn try_to_place(&self, cx: &Builder<'_, 'tcx>) -> Option<Place<'tcx>> { pub(in crate::builder) fn try_to_place(&self, cx: &Builder<'_, 'tcx>) -> Option<Place<'tcx>> {
let resolved = self.resolve_upvar(cx); let resolved = self.resolve_upvar(cx);
let builder = resolved.as_ref().unwrap_or(self); let builder = resolved.as_ref().unwrap_or(self);
let PlaceBase::Local(local) = builder.base else { return None }; let PlaceBase::Local(local) = builder.base else { return None };
@ -283,7 +283,7 @@ impl<'tcx> PlaceBuilder<'tcx> {
/// not captured. This can happen because the final mir that will be /// not captured. This can happen because the final mir that will be
/// generated doesn't require a read for this place. Failures will only /// generated doesn't require a read for this place. Failures will only
/// happen inside closures. /// happen inside closures.
pub(in crate::build) fn resolve_upvar( pub(in crate::builder) fn resolve_upvar(
&self, &self,
cx: &Builder<'_, 'tcx>, cx: &Builder<'_, 'tcx>,
) -> Option<PlaceBuilder<'tcx>> { ) -> Option<PlaceBuilder<'tcx>> {

View file

@ -16,9 +16,9 @@ use rustc_span::source_map::Spanned;
use rustc_span::{DUMMY_SP, Span}; use rustc_span::{DUMMY_SP, Span};
use tracing::debug; use tracing::debug;
use crate::build::expr::as_place::PlaceBase; use crate::builder::expr::as_place::PlaceBase;
use crate::build::expr::category::{Category, RvalueFunc}; use crate::builder::expr::category::{Category, RvalueFunc};
use crate::build::{BlockAnd, BlockAndExtension, Builder, NeedsTemporary}; use crate::builder::{BlockAnd, BlockAndExtension, Builder, NeedsTemporary};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Returns an rvalue suitable for use until the end of the current /// Returns an rvalue suitable for use until the end of the current

View file

@ -7,8 +7,8 @@ use rustc_middle::mir::*;
use rustc_middle::thir::*; use rustc_middle::thir::*;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::scope::DropKind; use crate::builder::scope::DropKind;
use crate::build::{BlockAnd, BlockAndExtension, Builder}; use crate::builder::{BlockAnd, BlockAndExtension, Builder};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Compile `expr` into a fresh temporary. This is used when building /// Compile `expr` into a fresh temporary. This is used when building

View file

@ -11,9 +11,9 @@ use rustc_middle::ty::CanonicalUserTypeAnnotation;
use rustc_span::source_map::Spanned; use rustc_span::source_map::Spanned;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::expr::category::{Category, RvalueFunc}; use crate::builder::expr::category::{Category, RvalueFunc};
use crate::build::matches::DeclareLetBindings; use crate::builder::matches::DeclareLetBindings;
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder, NeedsTemporary}; use crate::builder::{BlockAnd, BlockAndExtension, BlockFrame, Builder, NeedsTemporary};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Compile `expr`, storing the result into `destination`, which /// Compile `expr`, storing the result into `destination`, which

View file

@ -5,8 +5,8 @@ use rustc_middle::thir::*;
use rustc_span::source_map::Spanned; use rustc_span::source_map::Spanned;
use tracing::debug; use tracing::debug;
use crate::build::scope::BreakableTarget; use crate::builder::scope::BreakableTarget;
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder}; use crate::builder::{BlockAnd, BlockAndExtension, BlockFrame, Builder};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Builds a block of MIR statements to evaluate the THIR `expr`. /// Builds a block of MIR statements to evaluate the THIR `expr`.

View file

@ -2,9 +2,9 @@ use rustc_middle::mir::*;
use rustc_middle::thir::{self, *}; use rustc_middle::thir::{self, *};
use rustc_middle::ty::{self, Ty, TypeVisitableExt}; use rustc_middle::ty::{self, Ty, TypeVisitableExt};
use crate::build::Builder; use crate::builder::Builder;
use crate::build::expr::as_place::{PlaceBase, PlaceBuilder}; use crate::builder::expr::as_place::{PlaceBase, PlaceBuilder};
use crate::build::matches::{FlatPat, MatchPairTree, TestCase}; use crate::builder::matches::{FlatPat, MatchPairTree, TestCase};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Builds and returns [`MatchPairTree`] subtrees, one for each pattern in /// Builds and returns [`MatchPairTree`] subtrees, one for each pattern in
@ -86,7 +86,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
impl<'pat, 'tcx> MatchPairTree<'pat, 'tcx> { impl<'pat, 'tcx> MatchPairTree<'pat, 'tcx> {
/// Recursively builds a match pair tree for the given pattern and its /// Recursively builds a match pair tree for the given pattern and its
/// subpatterns. /// subpatterns.
pub(in crate::build) fn for_pattern( pub(in crate::builder) fn for_pattern(
mut place_builder: PlaceBuilder<'tcx>, mut place_builder: PlaceBuilder<'tcx>,
pattern: &'pat Pat<'tcx>, pattern: &'pat Pat<'tcx>,
cx: &mut Builder<'_, 'tcx>, cx: &mut Builder<'_, 'tcx>,

View file

@ -18,10 +18,10 @@ use rustc_span::symbol::Symbol;
use rustc_span::{BytePos, Pos, Span}; use rustc_span::{BytePos, Pos, Span};
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::ForGuard::{self, OutsideGuard, RefWithinGuard}; use crate::builder::ForGuard::{self, OutsideGuard, RefWithinGuard};
use crate::build::expr::as_place::PlaceBuilder; use crate::builder::expr::as_place::PlaceBuilder;
use crate::build::scope::DropKind; use crate::builder::scope::DropKind;
use crate::build::{ use crate::builder::{
BlockAnd, BlockAndExtension, Builder, GuardFrame, GuardFrameLocal, LocalsForNode, BlockAnd, BlockAndExtension, Builder, GuardFrame, GuardFrameLocal, LocalsForNode,
}; };

View file

@ -16,8 +16,8 @@ use std::mem;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::Builder; use crate::builder::Builder;
use crate::build::matches::{MatchPairTree, PatternExtraData, TestCase}; use crate::builder::matches::{MatchPairTree, PatternExtraData, TestCase};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Simplify a list of match pairs so they all require a test. Stores relevant bindings and /// Simplify a list of match pairs so they all require a test. Stores relevant bindings and

View file

@ -20,8 +20,8 @@ use rustc_span::symbol::{Symbol, sym};
use rustc_span::{DUMMY_SP, Span}; use rustc_span::{DUMMY_SP, Span};
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::Builder; use crate::builder::Builder;
use crate::build::matches::{Candidate, MatchPairTree, Test, TestBranch, TestCase, TestKind}; use crate::builder::matches::{Candidate, MatchPairTree, Test, TestBranch, TestCase, TestKind};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Identifies what test is needed to decide if `match_pair` is applicable. /// Identifies what test is needed to decide if `match_pair` is applicable.

View file

@ -4,9 +4,9 @@ use rustc_middle::ty::Ty;
use rustc_span::Span; use rustc_span::Span;
use tracing::debug; use tracing::debug;
use crate::build::Builder; use crate::builder::Builder;
use crate::build::expr::as_place::PlaceBase; use crate::builder::expr::as_place::PlaceBase;
use crate::build::matches::{Binding, Candidate, FlatPat, MatchPairTree, TestCase}; use crate::builder::matches::{Binding, Candidate, FlatPat, MatchPairTree, TestCase};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Creates a false edge to `imaginary_target` and a real edge to /// Creates a false edge to `imaginary_target` and a real edge to

View file

@ -7,7 +7,7 @@ use rustc_span::Span;
use rustc_trait_selection::infer::InferCtxtExt; use rustc_trait_selection::infer::InferCtxtExt;
use tracing::debug; use tracing::debug;
use crate::build::Builder; use crate::builder::Builder;
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Adds a new temporary value of type `ty` storing the result of /// Adds a new temporary value of type `ty` storing the result of

View file

@ -1,3 +1,8 @@
//! This module used to be named `build`, but that was causing GitHub's
//! "Go to file" feature to silently ignore all files in the module, probably
//! because it assumes that "build" is a build-output directory.
//! See <https://github.com/rust-lang/rust/pull/134365>.
use itertools::Itertools; use itertools::Itertools;
use rustc_abi::{ExternAbi, FieldIdx}; use rustc_abi::{ExternAbi, FieldIdx};
use rustc_apfloat::Float; use rustc_apfloat::Float;
@ -23,8 +28,8 @@ use rustc_span::symbol::sym;
use rustc_span::{Span, Symbol}; use rustc_span::{Span, Symbol};
use super::lints; use super::lints;
use crate::build::expr::as_place::PlaceBuilder; use crate::builder::expr::as_place::PlaceBuilder;
use crate::build::scope::DropKind; use crate::builder::scope::DropKind;
pub(crate) fn closure_saved_names_of_captured_variables<'tcx>( pub(crate) fn closure_saved_names_of_captured_variables<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,

View file

@ -95,7 +95,7 @@ use rustc_span::source_map::Spanned;
use rustc_span::{DUMMY_SP, Span}; use rustc_span::{DUMMY_SP, Span};
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder, CFG}; use crate::builder::{BlockAnd, BlockAndExtension, BlockFrame, Builder, CFG};
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct Scopes<'tcx> { pub(crate) struct Scopes<'tcx> {

View file

@ -18,7 +18,7 @@ use rustc_span::def_id::{DefId, LocalDefId};
use rustc_span::symbol::Symbol; use rustc_span::symbol::Symbol;
use rustc_span::{Span, sym}; use rustc_span::{Span, sym};
use crate::build::ExprCategory; use crate::builder::ExprCategory;
use crate::errors::*; use crate::errors::*;
struct UnsafetyVisitor<'a, 'tcx> { struct UnsafetyVisitor<'a, 'tcx> {

View file

@ -11,7 +11,10 @@
#![warn(unreachable_pub)] #![warn(unreachable_pub)]
// tidy-alphabetical-end // tidy-alphabetical-end
mod build; // The `builder` module used to be named `build`, but that was causing GitHub's
// "Go to file" feature to silently ignore all files in the module, probably
// because it assumes that "build" is a build-output directory. See #134365.
mod builder;
mod check_tail_calls; mod check_tail_calls;
mod check_unsafety; mod check_unsafety;
mod errors; mod errors;
@ -25,9 +28,9 @@ rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
pub fn provide(providers: &mut Providers) { pub fn provide(providers: &mut Providers) {
providers.check_match = thir::pattern::check_match; providers.check_match = thir::pattern::check_match;
providers.lit_to_const = thir::constant::lit_to_const; providers.lit_to_const = thir::constant::lit_to_const;
providers.hooks.build_mir = build::mir_build; providers.hooks.build_mir = builder::mir_build;
providers.closure_saved_names_of_captured_variables = providers.closure_saved_names_of_captured_variables =
build::closure_saved_names_of_captured_variables; builder::closure_saved_names_of_captured_variables;
providers.check_unsafety = check_unsafety::check_unsafety; providers.check_unsafety = check_unsafety::check_unsafety;
providers.check_tail_calls = check_tail_calls::check_tail_calls; providers.check_tail_calls = check_tail_calls::check_tail_calls;
providers.thir_body = thir::cx::thir_body; providers.thir_body = thir::cx::thir_body;

View file

@ -5,7 +5,7 @@ use rustc_middle::mir::interpret::{LitToConstError, LitToConstInput};
use rustc_middle::ty::{self, ScalarInt, TyCtxt, TypeVisitableExt as _}; use rustc_middle::ty::{self, ScalarInt, TyCtxt, TypeVisitableExt as _};
use tracing::trace; use tracing::trace;
use crate::build::parse_float_into_scalar; use crate::builder::parse_float_into_scalar;
pub(crate) fn lit_to_const<'tcx>( pub(crate) fn lit_to_const<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,

View file

@ -1197,7 +1197,7 @@ impl<'tcx> Cx<'tcx> {
.temporary_scope(self.region_scope_tree, closure_expr.hir_id.local_id); .temporary_scope(self.region_scope_tree, closure_expr.hir_id.local_id);
let var_ty = place.base_ty; let var_ty = place.base_ty;
// The result of capture analysis in `rustc_hir_analysis/check/upvar.rs`represents a captured path // The result of capture analysis in `rustc_hir_typeck/src/upvar.rs` represents a captured path
// as it's seen for use within the closure and not at the time of closure creation. // as it's seen for use within the closure and not at the time of closure creation.
// //
// That is we see expect to see it start from a captured upvar and not something that is local // That is we see expect to see it start from a captured upvar and not something that is local

View file

@ -16,7 +16,6 @@ rustc_feature = { path = "../rustc_feature" }
rustc_fluent_macro = { path = "../rustc_fluent_macro" } rustc_fluent_macro = { path = "../rustc_fluent_macro" }
rustc_hir = { path = "../rustc_hir" } rustc_hir = { path = "../rustc_hir" }
rustc_index = { path = "../rustc_index" } rustc_index = { path = "../rustc_index" }
rustc_lexer = { path = "../rustc_lexer" }
rustc_macros = { path = "../rustc_macros" } rustc_macros = { path = "../rustc_macros" }
rustc_middle = { path = "../rustc_middle" } rustc_middle = { path = "../rustc_middle" }
rustc_privacy = { path = "../rustc_privacy" } rustc_privacy = { path = "../rustc_privacy" }

View file

@ -211,8 +211,9 @@ passes_doc_invalid =
passes_doc_keyword_empty_mod = passes_doc_keyword_empty_mod =
`#[doc(keyword = "...")]` should be used on empty modules `#[doc(keyword = "...")]` should be used on empty modules
passes_doc_keyword_invalid_ident = passes_doc_keyword_not_keyword =
`{$doc_keyword}` is not a valid identifier nonexistent keyword `{$keyword}` used in `#[doc(keyword = "...")]`
.help = only existing keywords are allowed in core/std
passes_doc_keyword_not_mod = passes_doc_keyword_not_mod =
`#[doc(keyword = "...")]` should be used on modules `#[doc(keyword = "...")]` should be used on modules

View file

@ -912,6 +912,13 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
} }
fn check_doc_keyword(&self, meta: &MetaItemInner, hir_id: HirId) { fn check_doc_keyword(&self, meta: &MetaItemInner, hir_id: HirId) {
fn is_doc_keyword(s: Symbol) -> bool {
// FIXME: Once rustdoc can handle URL conflicts on case insensitive file systems, we
// can remove the `SelfTy` case here, remove `sym::SelfTy`, and update the
// `#[doc(keyword = "SelfTy")` attribute in `library/std/src/keyword_docs.rs`.
s <= kw::Union || s == sym::SelfTy
}
let doc_keyword = meta.value_str().unwrap_or(kw::Empty); let doc_keyword = meta.value_str().unwrap_or(kw::Empty);
if doc_keyword == kw::Empty { if doc_keyword == kw::Empty {
self.doc_attr_str_error(meta, "keyword"); self.doc_attr_str_error(meta, "keyword");
@ -933,10 +940,10 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
return; return;
} }
} }
if !rustc_lexer::is_ident(doc_keyword.as_str()) { if !is_doc_keyword(doc_keyword) {
self.dcx().emit_err(errors::DocKeywordInvalidIdent { self.dcx().emit_err(errors::DocKeywordNotKeyword {
span: meta.name_value_literal_span().unwrap_or_else(|| meta.span()), span: meta.name_value_literal_span().unwrap_or_else(|| meta.span()),
doc_keyword, keyword: doc_keyword,
}); });
} }
} }

View file

@ -215,6 +215,15 @@ pub(crate) struct DocKeywordEmptyMod {
pub span: Span, pub span: Span,
} }
#[derive(Diagnostic)]
#[diag(passes_doc_keyword_not_keyword)]
#[help]
pub(crate) struct DocKeywordNotKeyword {
#[primary_span]
pub span: Span,
pub keyword: Symbol,
}
#[derive(Diagnostic)] #[derive(Diagnostic)]
#[diag(passes_doc_keyword_not_mod)] #[diag(passes_doc_keyword_not_mod)]
pub(crate) struct DocKeywordNotMod { pub(crate) struct DocKeywordNotMod {
@ -222,14 +231,6 @@ pub(crate) struct DocKeywordNotMod {
pub span: Span, pub span: Span,
} }
#[derive(Diagnostic)]
#[diag(passes_doc_keyword_invalid_ident)]
pub(crate) struct DocKeywordInvalidIdent {
#[primary_span]
pub span: Span,
pub doc_keyword: Symbol,
}
#[derive(Diagnostic)] #[derive(Diagnostic)]
#[diag(passes_doc_fake_variadic_not_valid)] #[diag(passes_doc_fake_variadic_not_valid)]
pub(crate) struct DocFakeVariadicNotValid { pub(crate) struct DocFakeVariadicNotValid {

View file

@ -22,6 +22,10 @@ impl NodeStats {
fn new() -> NodeStats { fn new() -> NodeStats {
NodeStats { count: 0, size: 0 } NodeStats { count: 0, size: 0 }
} }
fn accum_size(&self) -> usize {
self.count * self.size
}
} }
struct Node { struct Node {
@ -121,11 +125,9 @@ impl<'k> StatCollector<'k> {
// We will soon sort, so the initial order does not matter. // We will soon sort, so the initial order does not matter.
#[allow(rustc::potential_query_instability)] #[allow(rustc::potential_query_instability)]
let mut nodes: Vec<_> = self.nodes.iter().collect(); let mut nodes: Vec<_> = self.nodes.iter().collect();
nodes.sort_by_cached_key(|(label, node)| { nodes.sort_by_cached_key(|(label, node)| (node.stats.accum_size(), label.to_owned()));
(node.stats.count * node.stats.size, label.to_owned())
});
let total_size = nodes.iter().map(|(_, node)| node.stats.count * node.stats.size).sum(); let total_size = nodes.iter().map(|(_, node)| node.stats.accum_size()).sum();
let total_count = nodes.iter().map(|(_, node)| node.stats.count).sum(); let total_count = nodes.iter().map(|(_, node)| node.stats.count).sum();
eprintln!("{prefix} {title}"); eprintln!("{prefix} {title}");
@ -138,7 +140,7 @@ impl<'k> StatCollector<'k> {
let percent = |m, n| (m * 100) as f64 / n as f64; let percent = |m, n| (m * 100) as f64 / n as f64;
for (label, node) in nodes { for (label, node) in nodes {
let size = node.stats.count * node.stats.size; let size = node.stats.accum_size();
eprintln!( eprintln!(
"{} {:<18}{:>10} ({:4.1}%){:>14}{:>14}", "{} {:<18}{:>10} ({:4.1}%){:>14}{:>14}",
prefix, prefix,
@ -152,10 +154,12 @@ impl<'k> StatCollector<'k> {
// We will soon sort, so the initial order does not matter. // We will soon sort, so the initial order does not matter.
#[allow(rustc::potential_query_instability)] #[allow(rustc::potential_query_instability)]
let mut subnodes: Vec<_> = node.subnodes.iter().collect(); let mut subnodes: Vec<_> = node.subnodes.iter().collect();
subnodes.sort_by_key(|(_, subnode)| subnode.count * subnode.size); subnodes.sort_by_cached_key(|(label, subnode)| {
(subnode.accum_size(), label.to_owned())
});
for (label, subnode) in subnodes { for (label, subnode) in subnodes {
let size = subnode.count * subnode.size; let size = subnode.accum_size();
eprintln!( eprintln!(
"{} - {:<18}{:>10} ({:4.1}%){:>14}", "{} - {:<18}{:>10} ({:4.1}%){:>14}",
prefix, prefix,

View file

@ -306,6 +306,7 @@ symbols! {
RwLockWriteGuard, RwLockWriteGuard,
Saturating, Saturating,
SeekFrom, SeekFrom,
SelfTy,
Send, Send,
SeqCst, SeqCst,
Sized, Sized,

View file

@ -824,7 +824,9 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
fn cmp_fn_sig( fn cmp_fn_sig(
&self, &self,
sig1: &ty::PolyFnSig<'tcx>, sig1: &ty::PolyFnSig<'tcx>,
fn_def1: Option<(DefId, &'tcx [ty::GenericArg<'tcx>])>,
sig2: &ty::PolyFnSig<'tcx>, sig2: &ty::PolyFnSig<'tcx>,
fn_def2: Option<(DefId, &'tcx [ty::GenericArg<'tcx>])>,
) -> (DiagStyledString, DiagStyledString) { ) -> (DiagStyledString, DiagStyledString) {
let sig1 = &(self.normalize_fn_sig)(*sig1); let sig1 = &(self.normalize_fn_sig)(*sig1);
let sig2 = &(self.normalize_fn_sig)(*sig2); let sig2 = &(self.normalize_fn_sig)(*sig2);
@ -930,6 +932,25 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
(values.1).0.extend(x2.0); (values.1).0.extend(x2.0);
} }
let fmt = |(did, args)| format!(" {{{}}}", self.tcx.def_path_str_with_args(did, args));
match (fn_def1, fn_def2) {
(None, None) => {}
(Some(fn_def1), Some(fn_def2)) => {
let path1 = fmt(fn_def1);
let path2 = fmt(fn_def2);
let same_path = path1 == path2;
values.0.push(path1, !same_path);
values.1.push(path2, !same_path);
}
(Some(fn_def1), None) => {
values.0.push_highlighted(fmt(fn_def1));
}
(None, Some(fn_def2)) => {
values.1.push_highlighted(fmt(fn_def2));
}
}
values values
} }
@ -1318,36 +1339,21 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
(ty::FnDef(did1, args1), ty::FnDef(did2, args2)) => { (ty::FnDef(did1, args1), ty::FnDef(did2, args2)) => {
let sig1 = self.tcx.fn_sig(*did1).instantiate(self.tcx, args1); let sig1 = self.tcx.fn_sig(*did1).instantiate(self.tcx, args1);
let sig2 = self.tcx.fn_sig(*did2).instantiate(self.tcx, args2); let sig2 = self.tcx.fn_sig(*did2).instantiate(self.tcx, args2);
let mut values = self.cmp_fn_sig(&sig1, &sig2); self.cmp_fn_sig(&sig1, Some((*did1, args1)), &sig2, Some((*did2, args2)))
let path1 = format!(" {{{}}}", self.tcx.def_path_str_with_args(*did1, args1));
let path2 = format!(" {{{}}}", self.tcx.def_path_str_with_args(*did2, args2));
let same_path = path1 == path2;
values.0.push(path1, !same_path);
values.1.push(path2, !same_path);
values
} }
(ty::FnDef(did1, args1), ty::FnPtr(sig_tys2, hdr2)) => { (ty::FnDef(did1, args1), ty::FnPtr(sig_tys2, hdr2)) => {
let sig1 = self.tcx.fn_sig(*did1).instantiate(self.tcx, args1); let sig1 = self.tcx.fn_sig(*did1).instantiate(self.tcx, args1);
let mut values = self.cmp_fn_sig(&sig1, &sig_tys2.with(*hdr2)); self.cmp_fn_sig(&sig1, Some((*did1, args1)), &sig_tys2.with(*hdr2), None)
values.0.push_highlighted(format!(
" {{{}}}",
self.tcx.def_path_str_with_args(*did1, args1)
));
values
} }
(ty::FnPtr(sig_tys1, hdr1), ty::FnDef(did2, args2)) => { (ty::FnPtr(sig_tys1, hdr1), ty::FnDef(did2, args2)) => {
let sig2 = self.tcx.fn_sig(*did2).instantiate(self.tcx, args2); let sig2 = self.tcx.fn_sig(*did2).instantiate(self.tcx, args2);
let mut values = self.cmp_fn_sig(&sig_tys1.with(*hdr1), &sig2); self.cmp_fn_sig(&sig_tys1.with(*hdr1), None, &sig2, Some((*did2, args2)))
values
.1
.push_normal(format!(" {{{}}}", self.tcx.def_path_str_with_args(*did2, args2)));
values
} }
(ty::FnPtr(sig_tys1, hdr1), ty::FnPtr(sig_tys2, hdr2)) => { (ty::FnPtr(sig_tys1, hdr1), ty::FnPtr(sig_tys2, hdr2)) => {
self.cmp_fn_sig(&sig_tys1.with(*hdr1), &sig_tys2.with(*hdr2)) self.cmp_fn_sig(&sig_tys1.with(*hdr1), None, &sig_tys2.with(*hdr2), None)
} }
_ => { _ => {
@ -2102,7 +2108,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
if exp_found.references_error() { if exp_found.references_error() {
return None; return None;
} }
let (exp, fnd) = self.cmp_fn_sig(&exp_found.expected, &exp_found.found); let (exp, fnd) = self.cmp_fn_sig(&exp_found.expected, None, &exp_found.found, None);
Some((exp, fnd, None)) Some((exp, fnd, None))
} }
} }

View file

@ -63,26 +63,16 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
} }
// Determine whether the sub and sup consist of both anonymous (elided) regions. // Determine whether the sub and sup consist of both anonymous (elided) regions.
let anon_reg_sup = self.tcx().is_suitable_region(self.generic_param_scope, sup)?; let sup_info = self.tcx().is_suitable_region(self.generic_param_scope, sup)?;
let anon_reg_sub = self.tcx().is_suitable_region(self.generic_param_scope, sub)?; let sub_info = self.tcx().is_suitable_region(self.generic_param_scope, sub)?;
let scope_def_id_sup = anon_reg_sup.def_id;
let bregion_sup = anon_reg_sup.bound_region;
let scope_def_id_sub = anon_reg_sub.def_id;
let bregion_sub = anon_reg_sub.bound_region;
let ty_sup = find_anon_type(self.tcx(), self.generic_param_scope, sup, &bregion_sup)?; let ty_sup = find_anon_type(self.tcx(), self.generic_param_scope, sup)?;
let ty_sub = find_anon_type(self.tcx(), self.generic_param_scope, sub, &bregion_sub)?; let ty_sub = find_anon_type(self.tcx(), self.generic_param_scope, sub)?;
debug!( debug!("try_report_anon_anon_conflict: found_param1={:?} sup={:?}", ty_sub, sup);
"try_report_anon_anon_conflict: found_param1={:?} sup={:?} br1={:?}", debug!("try_report_anon_anon_conflict: found_param2={:?} sub={:?}", ty_sup, sub);
ty_sub, sup, bregion_sup
);
debug!(
"try_report_anon_anon_conflict: found_param2={:?} sub={:?} br2={:?}",
ty_sup, sub, bregion_sub
);
let (ty_sup, ty_fndecl_sup) = ty_sup; let (ty_sup, ty_fndecl_sup) = ty_sup;
let (ty_sub, ty_fndecl_sub) = ty_sub; let (ty_sub, ty_fndecl_sub) = ty_sub;
@ -93,9 +83,9 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
self.find_param_with_region(sub, sub)?; self.find_param_with_region(sub, sub)?;
let sup_is_ret_type = let sup_is_ret_type =
self.is_return_type_anon(scope_def_id_sup, bregion_sup, ty_fndecl_sup); self.is_return_type_anon(sup_info.scope, sup_info.region_def_id, ty_fndecl_sup);
let sub_is_ret_type = let sub_is_ret_type =
self.is_return_type_anon(scope_def_id_sub, bregion_sub, ty_fndecl_sub); self.is_return_type_anon(sub_info.scope, sub_info.region_def_id, ty_fndecl_sub);
debug!( debug!(
"try_report_anon_anon_conflict: sub_is_ret_type={:?} sup_is_ret_type={:?}", "try_report_anon_anon_conflict: sub_is_ret_type={:?} sup_is_ret_type={:?}",

View file

@ -1,7 +1,7 @@
use core::ops::ControlFlow; use core::ops::ControlFlow;
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_hir::intravisit::{self, Visitor}; use rustc_hir::intravisit::{self, Visitor};
use rustc_middle::hir::map::Map; use rustc_middle::hir::map::Map;
use rustc_middle::hir::nested_filter; use rustc_middle::hir::nested_filter;
@ -28,16 +28,15 @@ pub fn find_anon_type<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
generic_param_scope: LocalDefId, generic_param_scope: LocalDefId,
region: Region<'tcx>, region: Region<'tcx>,
br: &ty::BoundRegionKind,
) -> Option<(&'tcx hir::Ty<'tcx>, &'tcx hir::FnSig<'tcx>)> { ) -> Option<(&'tcx hir::Ty<'tcx>, &'tcx hir::FnSig<'tcx>)> {
let anon_reg = tcx.is_suitable_region(generic_param_scope, region)?; let anon_reg = tcx.is_suitable_region(generic_param_scope, region)?;
let fn_sig = tcx.hir_node_by_def_id(anon_reg.def_id).fn_sig()?; let fn_sig = tcx.hir_node_by_def_id(anon_reg.scope).fn_sig()?;
fn_sig fn_sig
.decl .decl
.inputs .inputs
.iter() .iter()
.find_map(|arg| find_component_for_bound_region(tcx, arg, br)) .find_map(|arg| find_component_for_bound_region(tcx, arg, anon_reg.region_def_id))
.map(|ty| (ty, fn_sig)) .map(|ty| (ty, fn_sig))
} }
@ -46,9 +45,9 @@ pub fn find_anon_type<'tcx>(
fn find_component_for_bound_region<'tcx>( fn find_component_for_bound_region<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
arg: &'tcx hir::Ty<'tcx>, arg: &'tcx hir::Ty<'tcx>,
br: &ty::BoundRegionKind, region_def_id: DefId,
) -> Option<&'tcx hir::Ty<'tcx>> { ) -> Option<&'tcx hir::Ty<'tcx>> {
FindNestedTypeVisitor { tcx, bound_region: *br, current_index: ty::INNERMOST } FindNestedTypeVisitor { tcx, region_def_id, current_index: ty::INNERMOST }
.visit_ty(arg) .visit_ty(arg)
.break_value() .break_value()
} }
@ -62,9 +61,8 @@ fn find_component_for_bound_region<'tcx>(
// specific part of the type in the error message. // specific part of the type in the error message.
struct FindNestedTypeVisitor<'tcx> { struct FindNestedTypeVisitor<'tcx> {
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
// The bound_region corresponding to the Refree(freeregion) // The `DefId` of the region we're looking for.
// associated with the anonymous region we are looking for. region_def_id: DefId,
bound_region: ty::BoundRegionKind,
current_index: ty::DebruijnIndex, current_index: ty::DebruijnIndex,
} }
@ -96,16 +94,13 @@ impl<'tcx> Visitor<'tcx> for FindNestedTypeVisitor<'tcx> {
hir::TyKind::Ref(lifetime, _) => { hir::TyKind::Ref(lifetime, _) => {
// the lifetime of the Ref // the lifetime of the Ref
let hir_id = lifetime.hir_id; let hir_id = lifetime.hir_id;
match (self.tcx.named_bound_var(hir_id), self.bound_region) { match self.tcx.named_bound_var(hir_id) {
// Find the index of the named region that was part of the // Find the index of the named region that was part of the
// error. We will then search the function parameters for a bound // error. We will then search the function parameters for a bound
// region at the right depth with the same index // region at the right depth with the same index
( Some(rbv::ResolvedArg::EarlyBound(id)) => {
Some(rbv::ResolvedArg::EarlyBound(id)), debug!("EarlyBound id={:?}", id);
ty::BoundRegionKind::Named(def_id, _), if id.to_def_id() == self.region_def_id {
) => {
debug!("EarlyBound id={:?} def_id={:?}", id, def_id);
if id.to_def_id() == def_id {
return ControlFlow::Break(arg); return ControlFlow::Break(arg);
} }
} }
@ -113,31 +108,25 @@ impl<'tcx> Visitor<'tcx> for FindNestedTypeVisitor<'tcx> {
// Find the index of the named region that was part of the // Find the index of the named region that was part of the
// error. We will then search the function parameters for a bound // error. We will then search the function parameters for a bound
// region at the right depth with the same index // region at the right depth with the same index
( Some(rbv::ResolvedArg::LateBound(debruijn_index, _, id)) => {
Some(rbv::ResolvedArg::LateBound(debruijn_index, _, id)),
ty::BoundRegionKind::Named(def_id, _),
) => {
debug!( debug!(
"FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}", "FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}",
debruijn_index debruijn_index
); );
debug!("LateBound id={:?} def_id={:?}", id, def_id); debug!("LateBound id={:?}", id);
if debruijn_index == self.current_index && id.to_def_id() == def_id { if debruijn_index == self.current_index
&& id.to_def_id() == self.region_def_id
{
return ControlFlow::Break(arg); return ControlFlow::Break(arg);
} }
} }
(
Some( Some(
rbv::ResolvedArg::StaticLifetime rbv::ResolvedArg::StaticLifetime
| rbv::ResolvedArg::Free(_, _) | rbv::ResolvedArg::Free(_, _)
| rbv::ResolvedArg::EarlyBound(_)
| rbv::ResolvedArg::LateBound(_, _, _)
| rbv::ResolvedArg::Error(_), | rbv::ResolvedArg::Error(_),
) )
| None, | None => {
_,
) => {
debug!("no arg found"); debug!("no arg found");
} }
} }
@ -151,7 +140,7 @@ impl<'tcx> Visitor<'tcx> for FindNestedTypeVisitor<'tcx> {
return if intravisit::walk_ty( return if intravisit::walk_ty(
&mut TyPathVisitor { &mut TyPathVisitor {
tcx: self.tcx, tcx: self.tcx,
bound_region: self.bound_region, region_def_id: self.region_def_id,
current_index: self.current_index, current_index: self.current_index,
}, },
arg, arg,
@ -179,7 +168,7 @@ impl<'tcx> Visitor<'tcx> for FindNestedTypeVisitor<'tcx> {
// specific part of the type in the error message. // specific part of the type in the error message.
struct TyPathVisitor<'tcx> { struct TyPathVisitor<'tcx> {
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
bound_region: ty::BoundRegionKind, region_def_id: DefId,
current_index: ty::DebruijnIndex, current_index: ty::DebruijnIndex,
} }
@ -192,38 +181,29 @@ impl<'tcx> Visitor<'tcx> for TyPathVisitor<'tcx> {
} }
fn visit_lifetime(&mut self, lifetime: &hir::Lifetime) -> Self::Result { fn visit_lifetime(&mut self, lifetime: &hir::Lifetime) -> Self::Result {
match (self.tcx.named_bound_var(lifetime.hir_id), self.bound_region) { match self.tcx.named_bound_var(lifetime.hir_id) {
// the lifetime of the TyPath! // the lifetime of the TyPath!
(Some(rbv::ResolvedArg::EarlyBound(id)), ty::BoundRegionKind::Named(def_id, _)) => { Some(rbv::ResolvedArg::EarlyBound(id)) => {
debug!("EarlyBound id={:?} def_id={:?}", id, def_id); debug!("EarlyBound id={:?}", id);
if id.to_def_id() == def_id { if id.to_def_id() == self.region_def_id {
return ControlFlow::Break(()); return ControlFlow::Break(());
} }
} }
( Some(rbv::ResolvedArg::LateBound(debruijn_index, _, id)) => {
Some(rbv::ResolvedArg::LateBound(debruijn_index, _, id)),
ty::BoundRegionKind::Named(def_id, _),
) => {
debug!("FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}", debruijn_index,); debug!("FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}", debruijn_index,);
debug!("id={:?}", id); debug!("id={:?}", id);
debug!("def_id={:?}", def_id); if debruijn_index == self.current_index && id.to_def_id() == self.region_def_id {
if debruijn_index == self.current_index && id.to_def_id() == def_id {
return ControlFlow::Break(()); return ControlFlow::Break(());
} }
} }
(
Some( Some(
rbv::ResolvedArg::StaticLifetime rbv::ResolvedArg::StaticLifetime
| rbv::ResolvedArg::EarlyBound(_)
| rbv::ResolvedArg::LateBound(_, _, _)
| rbv::ResolvedArg::Free(_, _) | rbv::ResolvedArg::Free(_, _)
| rbv::ResolvedArg::Error(_), | rbv::ResolvedArg::Error(_),
) )
| None, | None => {
_,
) => {
debug!("no arg found"); debug!("no arg found");
} }
} }

View file

@ -54,9 +54,9 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
let param = anon_param_info.param; let param = anon_param_info.param;
let new_ty = anon_param_info.param_ty; let new_ty = anon_param_info.param_ty;
let new_ty_span = anon_param_info.param_ty_span; let new_ty_span = anon_param_info.param_ty_span;
let br = anon_param_info.bound_region; let br = anon_param_info.br;
let is_first = anon_param_info.is_first; let is_first = anon_param_info.is_first;
let scope_def_id = region_info.def_id; let scope_def_id = region_info.scope;
let is_impl_item = region_info.is_impl_item; let is_impl_item = region_info.is_impl_item;
match br { match br {
@ -73,7 +73,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
return None; return None;
} }
if find_anon_type(self.tcx(), self.generic_param_scope, anon, &br).is_some() if find_anon_type(self.tcx(), self.generic_param_scope, anon).is_some()
&& self.is_self_anon(is_first, scope_def_id) && self.is_self_anon(is_first, scope_def_id)
{ {
return None; return None;

View file

@ -50,7 +50,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
// This may have a closure and it would cause ICE // This may have a closure and it would cause ICE
// through `find_param_with_region` (#78262). // through `find_param_with_region` (#78262).
let anon_reg_sup = tcx.is_suitable_region(self.generic_param_scope, *sup_r)?; let anon_reg_sup = tcx.is_suitable_region(self.generic_param_scope, *sup_r)?;
let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.def_id); let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.scope);
if fn_returns.is_empty() { if fn_returns.is_empty() {
return None; return None;
} }
@ -196,7 +196,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
let mut err = self.tcx().dcx().create_err(diag); let mut err = self.tcx().dcx().create_err(diag);
let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.def_id); let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.scope);
let mut override_error_code = None; let mut override_error_code = None;
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sup_origin if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sup_origin
@ -250,7 +250,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
Some(arg), Some(arg),
captures, captures,
Some((param.param_ty_span, param.param_ty.to_string())), Some((param.param_ty_span, param.param_ty.to_string())),
Some(anon_reg_sup.def_id), Some(anon_reg_sup.scope),
); );
let reported = err.emit(); let reported = err.emit();

View file

@ -2,7 +2,7 @@
//! anonymous regions. //! anonymous regions.
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_middle::ty::fold::fold_regions; use rustc_middle::ty::fold::fold_regions;
use rustc_middle::ty::{self, Binder, Region, Ty, TyCtxt, TypeFoldable}; use rustc_middle::ty::{self, Binder, Region, Ty, TyCtxt, TypeFoldable};
use rustc_span::Span; use rustc_span::Span;
@ -17,8 +17,8 @@ pub struct AnonymousParamInfo<'tcx> {
pub param: &'tcx hir::Param<'tcx>, pub param: &'tcx hir::Param<'tcx>,
/// The type corresponding to the anonymous region parameter. /// The type corresponding to the anonymous region parameter.
pub param_ty: Ty<'tcx>, pub param_ty: Ty<'tcx>,
/// The ty::BoundRegionKind corresponding to the anonymous region. /// The `ty::BoundRegionKind` corresponding to the anonymous region.
pub bound_region: ty::BoundRegionKind, pub br: ty::BoundRegionKind,
/// The `Span` of the parameter type. /// The `Span` of the parameter type.
pub param_ty_span: Span, pub param_ty_span: Span,
/// Signals that the argument is the first parameter in the declaration. /// Signals that the argument is the first parameter in the declaration.
@ -43,7 +43,7 @@ pub fn find_param_with_region<'tcx>(
anon_region: Region<'tcx>, anon_region: Region<'tcx>,
replace_region: Region<'tcx>, replace_region: Region<'tcx>,
) -> Option<AnonymousParamInfo<'tcx>> { ) -> Option<AnonymousParamInfo<'tcx>> {
let (id, bound_region) = match *anon_region { let (id, br) = match *anon_region {
ty::ReLateParam(late_param) => (late_param.scope, late_param.bound_region), ty::ReLateParam(late_param) => (late_param.scope, late_param.bound_region),
ty::ReEarlyParam(ebr) => { ty::ReEarlyParam(ebr) => {
let region_def = tcx.generics_of(generic_param_scope).region_param(ebr, tcx).def_id; let region_def = tcx.generics_of(generic_param_scope).region_param(ebr, tcx).def_id;
@ -96,13 +96,7 @@ pub fn find_param_with_region<'tcx>(
let ty_hir_id = fn_decl.inputs[index].hir_id; let ty_hir_id = fn_decl.inputs[index].hir_id;
let param_ty_span = hir.span(ty_hir_id); let param_ty_span = hir.span(ty_hir_id);
let is_first = index == 0; let is_first = index == 0;
AnonymousParamInfo { AnonymousParamInfo { param, param_ty: new_param_ty, param_ty_span, br, is_first }
param,
param_ty: new_param_ty,
param_ty_span,
bound_region,
is_first,
}
}) })
}) })
} }
@ -122,7 +116,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
pub(super) fn is_return_type_anon( pub(super) fn is_return_type_anon(
&self, &self,
scope_def_id: LocalDefId, scope_def_id: LocalDefId,
br: ty::BoundRegionKind, region_def_id: DefId,
hir_sig: &hir::FnSig<'_>, hir_sig: &hir::FnSig<'_>,
) -> Option<Span> { ) -> Option<Span> {
let fn_ty = self.tcx().type_of(scope_def_id).instantiate_identity(); let fn_ty = self.tcx().type_of(scope_def_id).instantiate_identity();
@ -135,8 +129,8 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
None None
}; };
return match future_output { return match future_output {
Some(output) if self.includes_region(output, br) => Some(span), Some(output) if self.includes_region(output, region_def_id) => Some(span),
None if self.includes_region(ret_ty, br) => Some(span), None if self.includes_region(ret_ty, region_def_id) => Some(span),
_ => None, _ => None,
}; };
} }
@ -146,12 +140,15 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
fn includes_region( fn includes_region(
&self, &self,
ty: Binder<'tcx, impl TypeFoldable<TyCtxt<'tcx>>>, ty: Binder<'tcx, impl TypeFoldable<TyCtxt<'tcx>>>,
region: ty::BoundRegionKind, region_def_id: DefId,
) -> bool { ) -> bool {
let late_bound_regions = self.tcx().collect_referenced_late_bound_regions(ty); let late_bound_regions = self.tcx().collect_referenced_late_bound_regions(ty);
// We are only checking is any region meets the condition so order doesn't matter // We are only checking is any region meets the condition so order doesn't matter
#[allow(rustc::potential_query_instability)] #[allow(rustc::potential_query_instability)]
late_bound_regions.iter().any(|r| *r == region) late_bound_regions.iter().any(|r| match *r {
ty::BoundRegionKind::Named(def_id, _) => def_id == region_def_id,
_ => false,
})
} }
// Here we check for the case where anonymous region // Here we check for the case where anonymous region

View file

@ -790,7 +790,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
let lifetime_scope = match sub.kind() { let lifetime_scope = match sub.kind() {
ty::ReStatic => hir::def_id::CRATE_DEF_ID, ty::ReStatic => hir::def_id::CRATE_DEF_ID,
_ => match self.tcx.is_suitable_region(generic_param_scope, sub) { _ => match self.tcx.is_suitable_region(generic_param_scope, sub) {
Some(info) => info.def_id, Some(info) => info.scope,
None => generic_param_scope, None => generic_param_scope,
}, },
}; };
@ -864,11 +864,11 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
} }
} }
let (lifetime_def_id, lifetime_scope) = let (lifetime_def_id, lifetime_scope) = match self
match self.tcx.is_suitable_region(generic_param_scope, lifetime) { .tcx
Some(info) if !lifetime.has_name() => { .is_suitable_region(generic_param_scope, lifetime)
(info.bound_region.get_id().unwrap().expect_local(), info.def_id) {
} Some(info) if !lifetime.has_name() => (info.region_def_id.expect_local(), info.scope),
_ => return lifetime.get_name_or_anon().to_string(), _ => return lifetime.get_name_or_anon().to_string(),
}; };
@ -1097,8 +1097,7 @@ fn msg_span_from_named_region<'tcx>(
} }
ty::ReLateParam(ref fr) => { ty::ReLateParam(ref fr) => {
if !fr.bound_region.is_named() if !fr.bound_region.is_named()
&& let Some((ty, _)) = && let Some((ty, _)) = find_anon_type(tcx, generic_param_scope, region)
find_anon_type(tcx, generic_param_scope, region, &fr.bound_region)
{ {
("the anonymous lifetime defined here".to_string(), Some(ty.span)) ("the anonymous lifetime defined here".to_string(), Some(ty.span))
} else { } else {

View file

@ -517,7 +517,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
return false; return false;
}; };
let node = self.tcx.hir_node_by_def_id(anon_reg.def_id); let node = self.tcx.hir_node_by_def_id(anon_reg.scope);
let is_impl = matches!(&node, hir::Node::ImplItem(_)); let is_impl = matches!(&node, hir::Node::ImplItem(_));
let (generics, parent_generics) = match node { let (generics, parent_generics) = match node {
hir::Node::Item(&hir::Item { hir::Node::Item(&hir::Item {
@ -527,7 +527,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
| hir::Node::TraitItem(&hir::TraitItem { ref generics, .. }) | hir::Node::TraitItem(&hir::TraitItem { ref generics, .. })
| hir::Node::ImplItem(&hir::ImplItem { ref generics, .. }) => ( | hir::Node::ImplItem(&hir::ImplItem { ref generics, .. }) => (
generics, generics,
match self.tcx.parent_hir_node(self.tcx.local_def_id_to_hir_id(anon_reg.def_id)) match self.tcx.parent_hir_node(self.tcx.local_def_id_to_hir_id(anon_reg.scope))
{ {
hir::Node::Item(hir::Item { hir::Node::Item(hir::Item {
kind: hir::ItemKind::Trait(_, _, ref generics, ..), kind: hir::ItemKind::Trait(_, _, ref generics, ..),

View file

@ -41,8 +41,7 @@ impl<'a> DescriptionCtx<'a> {
} }
ty::ReLateParam(ref fr) => { ty::ReLateParam(ref fr) => {
if !fr.bound_region.is_named() if !fr.bound_region.is_named()
&& let Some((ty, _)) = && let Some((ty, _)) = find_anon_type(tcx, generic_param_scope, region)
find_anon_type(tcx, generic_param_scope, region, &fr.bound_region)
{ {
(Some(ty.span), "defined_here", String::new()) (Some(ty.span), "defined_here", String::new())
} else { } else {

View file

@ -807,64 +807,6 @@ mod in_keyword {}
/// [Reference]: ../reference/statements.html#let-statements /// [Reference]: ../reference/statements.html#let-statements
mod let_keyword {} mod let_keyword {}
#[doc(keyword = "while")]
//
/// Loop while a condition is upheld.
///
/// A `while` expression is used for predicate loops. The `while` expression runs the conditional
/// expression before running the loop body, then runs the loop body if the conditional
/// expression evaluates to `true`, or exits the loop otherwise.
///
/// ```rust
/// let mut counter = 0;
///
/// while counter < 10 {
/// println!("{counter}");
/// counter += 1;
/// }
/// ```
///
/// Like the [`for`] expression, we can use `break` and `continue`. A `while` expression
/// cannot break with a value and always evaluates to `()` unlike [`loop`].
///
/// ```rust
/// let mut i = 1;
///
/// while i < 100 {
/// i *= 2;
/// if i == 64 {
/// break; // Exit when `i` is 64.
/// }
/// }
/// ```
///
/// As `if` expressions have their pattern matching variant in `if let`, so too do `while`
/// expressions with `while let`. The `while let` expression matches the pattern against the
/// expression, then runs the loop body if pattern matching succeeds, or exits the loop otherwise.
/// We can use `break` and `continue` in `while let` expressions just like in `while`.
///
/// ```rust
/// let mut counter = Some(0);
///
/// while let Some(i) = counter {
/// if i == 10 {
/// counter = None;
/// } else {
/// println!("{i}");
/// counter = Some (i + 1);
/// }
/// }
/// ```
///
/// For more information on `while` and loops in general, see the [reference].
///
/// See also, [`for`], [`loop`].
///
/// [`for`]: keyword.for.html
/// [`loop`]: keyword.loop.html
/// [reference]: ../reference/expressions/loop-expr.html#predicate-loops
mod while_keyword {}
#[doc(keyword = "loop")] #[doc(keyword = "loop")]
// //
/// Loop indefinitely. /// Loop indefinitely.
@ -1321,10 +1263,10 @@ mod return_keyword {}
/// [Reference]: ../reference/items/associated-items.html#methods /// [Reference]: ../reference/items/associated-items.html#methods
mod self_keyword {} mod self_keyword {}
// FIXME: Once rustdoc can handle URL conflicts on case insensitive file systems, we can remove the // FIXME: Once rustdoc can handle URL conflicts on case insensitive file systems, we can replace
// three next lines and put back: `#[doc(keyword = "Self")]`. // these two lines with `#[doc(keyword = "Self")]` and update `is_doc_keyword` in
// `CheckAttrVisitor`.
#[doc(alias = "Self")] #[doc(alias = "Self")]
#[allow(rustc::existing_doc_keyword)]
#[doc(keyword = "SelfTy")] #[doc(keyword = "SelfTy")]
// //
/// The implementing type within a [`trait`] or [`impl`] block, or the current type within a type /// The implementing type within a [`trait`] or [`impl`] block, or the current type within a type
@ -2343,6 +2285,64 @@ mod use_keyword {}
/// [RFC]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md /// [RFC]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md
mod where_keyword {} mod where_keyword {}
#[doc(keyword = "while")]
//
/// Loop while a condition is upheld.
///
/// A `while` expression is used for predicate loops. The `while` expression runs the conditional
/// expression before running the loop body, then runs the loop body if the conditional
/// expression evaluates to `true`, or exits the loop otherwise.
///
/// ```rust
/// let mut counter = 0;
///
/// while counter < 10 {
/// println!("{counter}");
/// counter += 1;
/// }
/// ```
///
/// Like the [`for`] expression, we can use `break` and `continue`. A `while` expression
/// cannot break with a value and always evaluates to `()` unlike [`loop`].
///
/// ```rust
/// let mut i = 1;
///
/// while i < 100 {
/// i *= 2;
/// if i == 64 {
/// break; // Exit when `i` is 64.
/// }
/// }
/// ```
///
/// As `if` expressions have their pattern matching variant in `if let`, so too do `while`
/// expressions with `while let`. The `while let` expression matches the pattern against the
/// expression, then runs the loop body if pattern matching succeeds, or exits the loop otherwise.
/// We can use `break` and `continue` in `while let` expressions just like in `while`.
///
/// ```rust
/// let mut counter = Some(0);
///
/// while let Some(i) = counter {
/// if i == 10 {
/// counter = None;
/// } else {
/// println!("{i}");
/// counter = Some (i + 1);
/// }
/// }
/// ```
///
/// For more information on `while` and loops in general, see the [reference].
///
/// See also, [`for`], [`loop`].
///
/// [`for`]: keyword.for.html
/// [`loop`]: keyword.loop.html
/// [reference]: ../reference/expressions/loop-expr.html#predicate-loops
mod while_keyword {}
// 2018 Edition keywords // 2018 Edition keywords
#[doc(alias = "promise")] #[doc(alias = "promise")]

View file

@ -251,7 +251,6 @@
#![allow(explicit_outlives_requirements)] #![allow(explicit_outlives_requirements)]
#![allow(unused_lifetimes)] #![allow(unused_lifetimes)]
#![allow(internal_features)] #![allow(internal_features)]
#![deny(rustc::existing_doc_keyword)]
#![deny(fuzzy_provenance_casts)] #![deny(fuzzy_provenance_casts)]
#![deny(unsafe_op_in_unsafe_fn)] #![deny(unsafe_op_in_unsafe_fn)]
#![allow(rustdoc::redundant_explicit_links)] #![allow(rustdoc::redundant_explicit_links)]

View file

@ -613,7 +613,9 @@ impl<'a> ShouldRun<'a> {
self self
} }
// single, non-aliased path /// single, non-aliased path
///
/// Must be an on-disk path; use `alias` for names that do not correspond to on-disk paths.
pub fn path(self, path: &str) -> Self { pub fn path(self, path: &str) -> Self {
self.paths(&[path]) self.paths(&[path])
} }
@ -622,7 +624,7 @@ impl<'a> ShouldRun<'a> {
/// ///
/// This differs from [`path`] in that multiple calls to path will end up calling `make_run` /// This differs from [`path`] in that multiple calls to path will end up calling `make_run`
/// multiple times, whereas a single call to `paths` will only ever generate a single call to /// multiple times, whereas a single call to `paths` will only ever generate a single call to
/// `paths`. /// `make_run`.
/// ///
/// This is analogous to `all_krates`, although `all_krates` is gone now. Prefer [`path`] where possible. /// This is analogous to `all_krates`, although `all_krates` is gone now. Prefer [`path`] where possible.
/// ///

View file

@ -207,7 +207,7 @@ To do so, the `#[doc(keyword = "...")]` attribute is used. Example:
#![allow(internal_features)] #![allow(internal_features)]
/// Some documentation about the keyword. /// Some documentation about the keyword.
#[doc(keyword = "keyword")] #[doc(keyword = "break")]
mod empty_mod {} mod empty_mod {}
``` ```

View file

@ -140,7 +140,8 @@ define-function: (
}, },
) )
go-to: "file://" + |DOC_PATH| + "/test_docs/index.html?search=coo" // Searching for the `for` keyword
go-to: "file://" + |DOC_PATH| + "/test_docs/index.html?search=fo"
// This is needed so that the text color is computed. // This is needed so that the text color is computed.
show-text: true show-text: true

View file

@ -1,8 +1,8 @@
// Checks that the "keyword" results have the expected text alongside them. // Checks that the "keyword" results have the expected text alongside them.
go-to: "file://" + |DOC_PATH| + "/test_docs/index.html" go-to: "file://" + |DOC_PATH| + "/test_docs/index.html"
write-into: (".search-input", "CookieMonster") write-into: (".search-input", "for")
// To be SURE that the search will be run. // To be SURE that the search will be run.
press-key: 'Enter' press-key: 'Enter'
// Waiting for the search results to appear... // Waiting for the search results to appear...
wait-for: "#search-tabs" wait-for: "#search-tabs"
assert-text: (".result-keyword .result-name", "keyword CookieMonster") assert-text: (".result-keyword .result-name", "keyword for")

View file

@ -78,7 +78,7 @@ call-function: ("check-colors", {
set-window-size: (851, 600) set-window-size: (851, 600)
// Check the size and count in tabs // Check the size and count in tabs
assert-text: ("#search-tabs > button:nth-child(1) > .count", "(25)") assert-text: ("#search-tabs > button:nth-child(1) > .count", "(26)")
assert-text: ("#search-tabs > button:nth-child(2) > .count", "(6)") assert-text: ("#search-tabs > button:nth-child(2) > .count", "(6)")
assert-text: ("#search-tabs > button:nth-child(3) > .count", "(0)") assert-text: ("#search-tabs > button:nth-child(3) > .count", "(0)")
store-property: ("#search-tabs > button:nth-child(1)", {"offsetWidth": buttonWidth}) store-property: ("#search-tabs > button:nth-child(1)", {"offsetWidth": buttonWidth})

View file

@ -156,7 +156,7 @@ pub enum AnEnum {
WithVariants { and: usize, sub: usize, variants: usize }, WithVariants { and: usize, sub: usize, variants: usize },
} }
#[doc(keyword = "CookieMonster")] #[doc(keyword = "for")]
/// Some keyword. /// Some keyword.
pub mod keyword {} pub mod keyword {}

View file

@ -13,8 +13,8 @@
/// this is a test! /// this is a test!
pub mod foo {} pub mod foo {}
//@ !has "$.index[*][?(@.name=='hello')]" //@ !has "$.index[*][?(@.name=='break')]"
//@ !has "$.index[*][?(@.name=='bar')]" //@ !has "$.index[*][?(@.name=='bar')]"
#[doc(keyword = "hello")] #[doc(keyword = "break")]
/// hello /// hello
mod bar {} mod bar {}

View file

@ -11,10 +11,10 @@
/// this is a test! /// this is a test!
pub mod foo {} pub mod foo {}
//@ !has "$.index[*][?(@.name=='hello')]" //@ !has "$.index[*][?(@.name=='break')]"
//@ has "$.index[*][?(@.name=='bar')]" //@ has "$.index[*][?(@.name=='bar')]"
//@ is "$.index[*][?(@.name=='bar')].attrs" '["#[doc(keyword = \"hello\")]"]' //@ is "$.index[*][?(@.name=='bar')].attrs" '["#[doc(keyword = \"break\")]"]'
//@ is "$.index[*][?(@.name=='bar')].docs" '"hello"' //@ is "$.index[*][?(@.name=='bar')].docs" '"hello"'
#[doc(keyword = "hello")] #[doc(keyword = "break")]
/// hello /// hello
mod bar {} mod bar {}

View file

@ -1,8 +1,10 @@
error: `foo df` is not a valid identifier error: nonexistent keyword `foo df` used in `#[doc(keyword = "...")]`
--> $DIR/invalid-keyword.rs:3:17 --> $DIR/invalid-keyword.rs:3:17
| |
LL | #[doc(keyword = "foo df")] LL | #[doc(keyword = "foo df")]
| ^^^^^^^^ | ^^^^^^^^
|
= help: only existing keywords are allowed in core/std
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -16,7 +16,7 @@
/// this is a test! /// this is a test!
mod foo{} mod foo{}
//@ has foo/keyword.foo.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello' //@ has foo/keyword.break.html '//section[@id="main-content"]//div[@class="docblock"]//p' 'hello'
#[doc(keyword = "foo")] #[doc(keyword = "break")]
/// hello /// hello
mod bar {} mod bar {}

View file

@ -3,6 +3,11 @@ error[E0594]: cannot assign to `*ptr`, which is behind a `*const` pointer
| |
LL | unsafe { *ptr = 3; } LL | unsafe { *ptr = 3; }
| ^^^^^^^^ `ptr` is a `*const` pointer, so the data it refers to cannot be written | ^^^^^^^^ `ptr` is a `*const` pointer, so the data it refers to cannot be written
|
help: consider changing this to be a mutable pointer
|
LL | let ptr = &raw mut val;
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -7,7 +7,7 @@ LL | if let Some(_value) = Droppy.get() {
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope-gated.rs:30:5 --> $DIR/lint-if-let-rescope-gated.rs:30:5
| |

View file

@ -14,7 +14,7 @@ LL | | };
| |_____- in this macro invocation | |_____- in this macro invocation
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope-with-macro.rs:12:38 --> $DIR/lint-if-let-rescope-with-macro.rs:12:38
| |

View file

@ -7,7 +7,7 @@ LL | if let Some(_value) = droppy().get() {
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:32:5 --> $DIR/lint-if-let-rescope.rs:32:5
| |
@ -42,7 +42,7 @@ LL | } else if let Some(_value) = droppy().get() {
| -------- this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | -------- this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:42:5 --> $DIR/lint-if-let-rescope.rs:42:5
| |
@ -74,7 +74,7 @@ LL | } else if let Some(_value) = droppy().get() {
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:54:5 --> $DIR/lint-if-let-rescope.rs:54:5
| |
@ -100,7 +100,7 @@ LL | if let Some(1) = { if let Some(_value) = Droppy.get() { Some(1) } else
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:58:69 --> $DIR/lint-if-let-rescope.rs:58:69
| |
@ -120,7 +120,7 @@ LL | if (if let Some(_value) = droppy().get() { true } else { false }) {
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:72:53 --> $DIR/lint-if-let-rescope.rs:72:53
| |
@ -140,7 +140,7 @@ LL | } else if (((if let Some(_value) = droppy().get() { true } else { false
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:78:62 --> $DIR/lint-if-let-rescope.rs:78:62
| |
@ -160,7 +160,7 @@ LL | while (if let Some(_value) = droppy().get() { false } else { true }) {
| this value has a significant drop implementation which may observe a major change in drop order and requires your discretion | this value has a significant drop implementation which may observe a major change in drop order and requires your discretion
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #124085 <https://github.com/rust-lang/rust/issues/124085> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-if-let-scope.html>
help: the value is now dropped here in Edition 2024 help: the value is now dropped here in Edition 2024
--> $DIR/lint-if-let-rescope.rs:90:57 --> $DIR/lint-if-let-rescope.rs:90:57
| |

View file

@ -45,7 +45,7 @@ fn should_lint() -> i32 {
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| WARN: this changes meaning in Rust 2024 //~| WARN: this changes meaning in Rust 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -70,7 +70,7 @@ fn should_lint_in_nested_items() {
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| WARN: this changes meaning in Rust 2024 //~| WARN: this changes meaning in Rust 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
} }
@ -97,7 +97,7 @@ fn should_lint_in_nested_block() -> i32 {
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| WARN: this changes meaning in Rust 2024 //~| WARN: this changes meaning in Rust 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -150,7 +150,7 @@ fn should_lint_into_async_body() -> i32 {
//~| NOTE: this value will be stored in a temporary; let us call it `#1` //~| NOTE: this value will be stored in a temporary; let us call it `#1`
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -167,7 +167,7 @@ fn should_lint_generics<T: Default>() -> &'static str {
//~| NOTE: this value will be stored in a temporary; let us call it `#1` //~| NOTE: this value will be stored in a temporary; let us call it `#1`
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -181,7 +181,7 @@ fn should_lint_adt() -> i32 {
//~| NOTE: this value will be stored in a temporary; let us call it `#1` //~| NOTE: this value will be stored in a temporary; let us call it `#1`
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -225,7 +225,7 @@ fn should_lint_with_dtor_span() -> i32 {
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| WARN: this changes meaning in Rust 2024 //~| WARN: this changes meaning in Rust 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
} }
//~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement //~^ NOTE: now the temporary value is dropped here, before the local variables in the block or statement
@ -238,7 +238,7 @@ fn should_lint_with_transient_drops() {
//~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024 //~| NOTE: up until Edition 2021 `#1` is dropped last but will be dropped earlier in Edition 2024
//~| WARN: this changes meaning in Rust 2024 //~| WARN: this changes meaning in Rust 2024
//~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects //~| NOTE: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects
//~| NOTE: for more information, see issue #123739 //~| NOTE: for more information, see
}, },
{ {
let _x = LoudDropper; let _x = LoudDropper;

View file

@ -17,7 +17,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |
@ -58,7 +58,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |
@ -94,7 +94,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |
@ -130,7 +130,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |
@ -166,7 +166,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
= note: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects like releasing locks or sending messages = note: most of the time, changing drop order is harmless; inspect the `impl Drop`s for side effects like releasing locks or sending messages
error: relative drop order changing in Rust 2024 error: relative drop order changing in Rust 2024
@ -188,7 +188,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |
@ -224,7 +224,7 @@ LL | }
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:195:5 --> $DIR/lint-tail-expr-drop-order.rs:195:5
| |
@ -266,7 +266,7 @@ LL | ));
| - now the temporary value is dropped here, before the local variables in the block or statement | - now the temporary value is dropped here, before the local variables in the block or statement
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see issue #123739 <https://github.com/rust-lang/rust/issues/123739> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/temporary-tail-expr-scope.html>
note: `#1` invokes this custom destructor note: `#1` invokes this custom destructor
--> $DIR/lint-tail-expr-drop-order.rs:11:1 --> $DIR/lint-tail-expr-drop-order.rs:11:1
| |

View file

@ -5,7 +5,7 @@ LL | fn m() {
| ^^^^^^ | ^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/never-type-fallback-breaking.rs:22:17 --> $DIR/never-type-fallback-breaking.rs:22:17
@ -25,7 +25,7 @@ LL | fn q() -> Option<()> {
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/never-type-fallback-breaking.rs:37:5 --> $DIR/never-type-fallback-breaking.rs:37:5
@ -44,7 +44,7 @@ LL | fn meow() -> Result<(), ()> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `(): From<!>` will fail note: in edition 2024, the requirement `(): From<!>` will fail
--> $DIR/never-type-fallback-breaking.rs:50:5 --> $DIR/never-type-fallback-breaking.rs:50:5
@ -63,7 +63,7 @@ LL | pub fn fallback_return() -> Result<(), ()> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/never-type-fallback-breaking.rs:62:19 --> $DIR/never-type-fallback-breaking.rs:62:19
@ -82,7 +82,7 @@ LL | fn fully_apit() -> Result<(), ()> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/never-type-fallback-breaking.rs:76:17 --> $DIR/never-type-fallback-breaking.rs:76:17

View file

@ -39,7 +39,7 @@
</tspan> </tspan>
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">= </tspan><tspan class="bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan> <tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold">= </tspan><tspan class="bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan>
</tspan> </tspan>
<tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt; {wrapped_fn}`</tspan> <tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;</tspan><tspan class="fg-magenta bold"> {wrapped_fn}</tspan><tspan>`</tspan>
</tspan> </tspan>
<tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan> <tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan>
</tspan> </tspan>

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Before After
Before After

View file

@ -40,7 +40,7 @@
</tspan> </tspan>
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-014 bold">= </tspan><tspan class="fg-ansi256-015 bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan> <tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-014 bold">= </tspan><tspan class="fg-ansi256-015 bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan>
</tspan> </tspan>
<tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt; {wrapped_fn}`</tspan> <tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;</tspan><tspan class="fg-magenta bold"> {wrapped_fn}</tspan><tspan>`</tspan>
</tspan> </tspan>
<tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan> <tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan>
</tspan> </tspan>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Before After
Before After

View file

@ -39,7 +39,7 @@
</tspan> </tspan>
<tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"></tspan><tspan class="bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan> <tspan x="10px" y="172px"><tspan> </tspan><tspan class="fg-ansi256-012 bold"></tspan><tspan class="bold">note</tspan><tspan>: expected fn pointer `</tspan><tspan class="fg-magenta bold">for&lt;'a&gt; </tspan><tspan>fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'a)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;`</tspan>
</tspan> </tspan>
<tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt; {wrapped_fn}`</tspan> <tspan x="10px" y="190px"><tspan> found fn item `fn(Box&lt;</tspan><tspan class="fg-magenta bold">(dyn Any + Send + 'static)</tspan><tspan>&gt;) -&gt; Pin&lt;_&gt;</tspan><tspan class="fg-magenta bold"> {wrapped_fn}</tspan><tspan>`</tspan>
</tspan> </tspan>
<tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan> <tspan x="10px" y="208px"><tspan class="fg-ansi256-010 bold">note</tspan><tspan>: function defined here</tspan>
</tspan> </tspan>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Before After
Before After

View file

@ -1,10 +0,0 @@
//@ compile-flags: -Z unstable-options
#![feature(rustdoc_internals)]
#![crate_type = "lib"]
#![deny(rustc::existing_doc_keyword)]
#[doc(keyword = "tadam")] //~ ERROR
mod tadam {}

View file

@ -1,15 +0,0 @@
error: found non-existing keyword `tadam` used in `#[doc(keyword = "...")]`
--> $DIR/existing_doc_keyword.rs:9:1
|
LL | #[doc(keyword = "tadam")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: only existing keywords are allowed in core/std
note: the lint level is defined here
--> $DIR/existing_doc_keyword.rs:7:9
|
LL | #![deny(rustc::existing_doc_keyword)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 1 previous error

View file

@ -5,6 +5,7 @@
use std::intrinsics as rusti; use std::intrinsics as rusti;
#[cfg(any( #[cfg(any(
target_os = "aix",
target_os = "android", target_os = "android",
target_os = "dragonfly", target_os = "dragonfly",
target_os = "freebsd", target_os = "freebsd",

View file

@ -5,6 +5,7 @@ LL | let _: Iter<'_, i32> = boxed_slice.into_iter();
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
= note: `#[warn(boxed_slice_into_iter)]` on by default = note: `#[warn(boxed_slice_into_iter)]` on by default
help: use `.iter()` instead of `.into_iter()` to avoid ambiguity help: use `.iter()` instead of `.into_iter()` to avoid ambiguity
| |
@ -22,6 +23,7 @@ LL | let _: Iter<'_, i32> = Box::new(boxed_slice.clone()).into_iter();
| ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter` | ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024 warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024
--> $DIR/into-iter-on-boxed-slices-2021.rs:22:57 --> $DIR/into-iter-on-boxed-slices-2021.rs:22:57
@ -30,6 +32,7 @@ LL | let _: Iter<'_, i32> = Rc::new(boxed_slice.clone()).into_iter();
| ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter` | ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024 warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024
--> $DIR/into-iter-on-boxed-slices-2021.rs:25:55 --> $DIR/into-iter-on-boxed-slices-2021.rs:25:55
@ -38,6 +41,7 @@ LL | let _: Iter<'_, i32> = Array(boxed_slice.clone()).into_iter();
| ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter` | ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024 warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024
--> $DIR/into-iter-on-boxed-slices-2021.rs:32:48 --> $DIR/into-iter-on-boxed-slices-2021.rs:32:48
@ -46,6 +50,7 @@ LL | for _ in (Box::new([1, 2, 3]) as Box<[_]>).into_iter() {}
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
help: use `.iter()` instead of `.into_iter()` to avoid ambiguity help: use `.iter()` instead of `.into_iter()` to avoid ambiguity
| |
LL | for _ in (Box::new([1, 2, 3]) as Box<[_]>).iter() {} LL | for _ in (Box::new([1, 2, 3]) as Box<[_]>).iter() {}

View file

@ -5,6 +5,7 @@ LL | boxed.into_iter();
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
= note: `#[warn(boxed_slice_into_iter)]` on by default = note: `#[warn(boxed_slice_into_iter)]` on by default
help: use `.iter()` instead of `.into_iter()` to avoid ambiguity help: use `.iter()` instead of `.into_iter()` to avoid ambiguity
| |
@ -22,6 +23,7 @@ LL | Box::new(boxed.clone()).into_iter();
| ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter` | ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024 warning: this method call resolves to `<&Box<[T]> as IntoIterator>::into_iter` (due to backwards compatibility), but will resolve to `<Box<[T]> as IntoIterator>::into_iter` in Rust 2024
--> $DIR/into-iter-on-boxed-slices-lint.rs:16:39 --> $DIR/into-iter-on-boxed-slices-lint.rs:16:39
@ -30,6 +32,7 @@ LL | Box::new(Box::new(boxed.clone())).into_iter();
| ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter` | ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
warning: 3 warnings emitted warning: 3 warnings emitted

View file

@ -5,7 +5,7 @@ LL | fn smeg() {
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: ImplementedForUnitButNotNever` will fail note: in edition 2024, the requirement `!: ImplementedForUnitButNotNever` will fail
--> $DIR/defaulted-never-note.rs:32:9 --> $DIR/defaulted-never-note.rs:32:9

View file

@ -5,7 +5,7 @@ LL | fn def() {
| ^^^^^^^^ | ^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/dependency-on-fallback-to-unit.rs:12:19 --> $DIR/dependency-on-fallback-to-unit.rs:12:19
@ -25,7 +25,7 @@ LL | fn question_mark() -> Result<(), ()> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/dependency-on-fallback-to-unit.rs:22:5 --> $DIR/dependency-on-fallback-to-unit.rs:22:5

View file

@ -5,7 +5,7 @@ LL | fn assignment() {
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: UnitDefault` will fail note: in edition 2024, the requirement `!: UnitDefault` will fail
--> $DIR/diverging-fallback-control-flow.rs:36:13 --> $DIR/diverging-fallback-control-flow.rs:36:13
@ -25,7 +25,7 @@ LL | fn assignment_rev() {
| ^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: UnitDefault` will fail note: in edition 2024, the requirement `!: UnitDefault` will fail
--> $DIR/diverging-fallback-control-flow.rs:50:13 --> $DIR/diverging-fallback-control-flow.rs:50:13

View file

@ -5,7 +5,7 @@ LL | fn main() {
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Test` will fail note: in edition 2024, the requirement `!: Test` will fail
--> $DIR/diverging-fallback-no-leak.rs:20:23 --> $DIR/diverging-fallback-no-leak.rs:20:23

View file

@ -5,7 +5,7 @@ LL | fn main() {
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: UnitReturn` will fail note: in edition 2024, the requirement `!: UnitReturn` will fail
--> $DIR/diverging-fallback-unconstrained-return.rs:39:23 --> $DIR/diverging-fallback-unconstrained-return.rs:39:23

View file

@ -5,7 +5,7 @@ LL | fn main() {
| ^^^^^^^^^ | ^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Bar` will fail note: in edition 2024, the requirement `!: Bar` will fail
--> $DIR/fallback-closure-ret.rs:24:5 --> $DIR/fallback-closure-ret.rs:24:5

View file

@ -5,7 +5,7 @@ LL | fn should_ret_unit() -> impl T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: T` will fail note: in edition 2024, the requirement `!: T` will fail
--> $DIR/impl_trait_fallback.rs:8:25 --> $DIR/impl_trait_fallback.rs:8:25

View file

@ -5,7 +5,7 @@ LL | fn test() -> Result<(), ()> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions! = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the types explicitly = help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/lint-breaking-2024-assign-underscore.rs:13:9 --> $DIR/lint-breaking-2024-assign-underscore.rs:13:9

View file

@ -5,7 +5,7 @@ LL | unsafe { mem::zeroed() }
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
= note: `#[warn(never_type_fallback_flowing_into_unsafe)]` on by default = note: `#[warn(never_type_fallback_flowing_into_unsafe)]` on by default
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
@ -20,7 +20,7 @@ LL | core::mem::transmute(Zst)
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -34,7 +34,7 @@ LL | unsafe { Union { a: () }.b }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
warning: never type fallback affects this raw pointer dereference warning: never type fallback affects this raw pointer dereference
@ -44,7 +44,7 @@ LL | unsafe { *ptr::from_ref(&()).cast() }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -58,7 +58,7 @@ LL | unsafe { internally_create(x) }
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -72,7 +72,7 @@ LL | unsafe { zeroed() }
| ^^^^^^^^ | ^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -86,7 +86,7 @@ LL | let zeroed = mem::zeroed;
| ^^^^^^^^^^^ | ^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -100,7 +100,7 @@ LL | let f = internally_create;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -114,7 +114,7 @@ LL | S(marker::PhantomData).create_out_of_thin_air()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
warning: never type fallback affects this call to an `unsafe` function warning: never type fallback affects this call to an `unsafe` function
@ -127,7 +127,7 @@ LL | msg_send!();
| ----------- in this macro invocation | ----------- in this macro invocation
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
= note: this warning originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this warning originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes

View file

@ -5,7 +5,7 @@ LL | unsafe { mem::zeroed() }
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
= note: `#[deny(never_type_fallback_flowing_into_unsafe)]` on by default = note: `#[deny(never_type_fallback_flowing_into_unsafe)]` on by default
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
@ -20,7 +20,7 @@ LL | core::mem::transmute(Zst)
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -34,7 +34,7 @@ LL | unsafe { Union { a: () }.b }
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
error: never type fallback affects this raw pointer dereference error: never type fallback affects this raw pointer dereference
@ -44,7 +44,7 @@ LL | unsafe { *ptr::from_ref(&()).cast() }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -58,7 +58,7 @@ LL | unsafe { internally_create(x) }
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -72,7 +72,7 @@ LL | unsafe { zeroed() }
| ^^^^^^^^ | ^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -86,7 +86,7 @@ LL | let zeroed = mem::zeroed;
| ^^^^^^^^^^^ | ^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -100,7 +100,7 @@ LL | let f = internally_create;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes
| |
@ -114,7 +114,7 @@ LL | S(marker::PhantomData).create_out_of_thin_air()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
error: never type fallback affects this call to an `unsafe` function error: never type fallback affects this call to an `unsafe` function
@ -127,7 +127,7 @@ LL | msg_send!();
| ----------- in this macro invocation | ----------- in this macro invocation
| |
= warning: this changes meaning in Rust 2024 and in a future release in all editions! = warning: this changes meaning in Rust 2024 and in a future release in all editions!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html>
= help: specify the type explicitly = help: specify the type explicitly
= note: this error originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
help: use `()` annotations to avoid fallback changes help: use `()` annotations to avoid fallback changes

View file

@ -7,7 +7,7 @@ LL | let Foo(mut x) = &Foo(0);
| help: desugar the match ergonomics: `&` | help: desugar the match ergonomics: `&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
note: the lint level is defined here note: the lint level is defined here
--> $DIR/migration_lint.rs:7:9 --> $DIR/migration_lint.rs:7:9
| |
@ -23,7 +23,7 @@ LL | let Foo(mut x) = &mut Foo(0);
| help: desugar the match ergonomics: `&mut` | help: desugar the match ergonomics: `&mut`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:35:9 --> $DIR/migration_lint.rs:35:9
@ -34,7 +34,7 @@ LL | let Foo(ref x) = &Foo(0);
| help: desugar the match ergonomics: `&` | help: desugar the match ergonomics: `&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:40:9 --> $DIR/migration_lint.rs:40:9
@ -45,7 +45,7 @@ LL | let Foo(ref x) = &mut Foo(0);
| help: desugar the match ergonomics: `&mut` | help: desugar the match ergonomics: `&mut`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:57:9 --> $DIR/migration_lint.rs:57:9
@ -56,7 +56,7 @@ LL | let Foo(&x) = &Foo(&0);
| help: desugar the match ergonomics: `&` | help: desugar the match ergonomics: `&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:62:9 --> $DIR/migration_lint.rs:62:9
@ -67,7 +67,7 @@ LL | let Foo(&mut x) = &Foo(&mut 0);
| help: desugar the match ergonomics: `&` | help: desugar the match ergonomics: `&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:67:9 --> $DIR/migration_lint.rs:67:9
@ -78,7 +78,7 @@ LL | let Foo(&x) = &mut Foo(&0);
| help: desugar the match ergonomics: `&mut` | help: desugar the match ergonomics: `&mut`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:72:9 --> $DIR/migration_lint.rs:72:9
@ -89,7 +89,7 @@ LL | let Foo(&mut x) = &mut Foo(&mut 0);
| help: desugar the match ergonomics: `&mut` | help: desugar the match ergonomics: `&mut`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:81:12 --> $DIR/migration_lint.rs:81:12
@ -100,7 +100,7 @@ LL | if let Some(&x) = &&&&&Some(&0u8) {
| help: desugar the match ergonomics: `&&&&&` | help: desugar the match ergonomics: `&&&&&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:87:12 --> $DIR/migration_lint.rs:87:12
@ -111,7 +111,7 @@ LL | if let Some(&mut x) = &&&&&Some(&mut 0u8) {
| help: desugar the match ergonomics: `&&&&&` | help: desugar the match ergonomics: `&&&&&`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:93:12 --> $DIR/migration_lint.rs:93:12
@ -122,7 +122,7 @@ LL | if let Some(&x) = &&&&&mut Some(&0u8) {
| help: desugar the match ergonomics: `&&&&&mut` | help: desugar the match ergonomics: `&&&&&mut`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
error: patterns are not allowed to reset the default binding mode in edition 2024 error: patterns are not allowed to reset the default binding mode in edition 2024
--> $DIR/migration_lint.rs:99:12 --> $DIR/migration_lint.rs:99:12
@ -131,7 +131,7 @@ LL | if let Some(&mut Some(Some(x))) = &mut Some(&mut Some(&mut Some(0u8)))
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
help: desugar the match ergonomics help: desugar the match ergonomics
| |
LL | if let &mut Some(&mut Some(&mut Some(ref mut x))) = &mut Some(&mut Some(&mut Some(0u8))) { LL | if let &mut Some(&mut Some(&mut Some(ref mut x))) = &mut Some(&mut Some(&mut Some(0u8))) {
@ -144,7 +144,7 @@ LL | let Struct { a, mut b, c } = &Struct { a: 0, b: 0, c: 0 };
| ^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
help: desugar the match ergonomics help: desugar the match ergonomics
| |
LL | let &Struct { ref a, mut b, ref c } = &Struct { a: 0, b: 0, c: 0 }; LL | let &Struct { ref a, mut b, ref c } = &Struct { a: 0, b: 0, c: 0 };
@ -157,7 +157,7 @@ LL | let Struct { a: &a, b, ref c } = &Struct { a: &0, b: &0, c: &0 };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
help: desugar the match ergonomics help: desugar the match ergonomics
| |
LL | let &Struct { a: &a, ref b, ref c } = &Struct { a: &0, b: &0, c: &0 }; LL | let &Struct { a: &a, ref b, ref c } = &Struct { a: &0, b: &0, c: &0 };
@ -170,7 +170,7 @@ LL | if let Struct { a: &Some(a), b: Some(&b), c: Some(c) } =
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see 123076 = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/match-ergonomics.html>
help: desugar the match ergonomics help: desugar the match ergonomics
| |
LL | if let &Struct { a: &Some(a), b: &Some(&b), c: &Some(ref c) } = LL | if let &Struct { a: &Some(a), b: &Some(&b), c: &Some(ref c) } =

View file

@ -79,7 +79,7 @@ error[E0133]: call to function `sse2` with `#[target_feature]` is unsafe and req
LL | sse2(); LL | sse2();
| ^^^^^^ call to function with `#[target_feature]` | ^^^^^^ call to function with `#[target_feature]`
| |
= note: for more information, see issue #71668 <https://github.com/rust-lang/rust/issues/71668> = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
= help: in order for the call to be safe, the context requires the following additional target feature: sse2 = help: in order for the call to be safe, the context requires the following additional target feature: sse2
= note: the sse2 target feature being enabled in the build configuration does not remove the requirement to list it in `#[target_feature]` = note: the sse2 target feature being enabled in the build configuration does not remove the requirement to list it in `#[target_feature]`
note: an unsafe function restricts its caller, but its body is safe by default note: an unsafe function restricts its caller, but its body is safe by default

View file

@ -5,6 +5,7 @@ LL | let y = points.into_iter();
| ^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `MyIntoIter::into_iter(points)` | ^^^^^^^^^^^^^^^^^^ help: disambiguate the associated function: `MyIntoIter::into_iter(points)`
| |
= warning: this changes meaning in Rust 2024 = warning: this changes meaning in Rust 2024
= note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2024/intoiterator-box-slice.html>
note: the lint level is defined here note: the lint level is defined here
--> $DIR/box-slice-into-iter-ambiguous.rs:5:9 --> $DIR/box-slice-into-iter-ambiguous.rs:5:9
| |

Some files were not shown because too many files have changed in this diff Show more