Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 9 pull requests #92883

Merged
merged 118 commits into from
Jan 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
1788cfd
Remove NullOp::Box
nbdd0121 Sep 26, 2021
d5cbae9
fix clippy
lcnr Dec 23, 2021
dfd3254
Update pulldown-cmark version in clippy
GuillaumeGomez Dec 28, 2021
eddf806
Suggest `return`ing tail expressions in async fn's
ThePuzzlemaker Dec 29, 2021
ab7c446
Add regression test for #92308
ThePuzzlemaker Dec 29, 2021
828ddbe
fix [`redundant_closure`] fp with `Arc`
ebobrow Dec 29, 2021
97ab44c
Merge commit '0eff589afc83e21a03a168497bbab6b4dfbb4ef6' into clippyup
flip1995 Dec 30, 2021
2b5257e
Remove method_call! macro
camsteffen Dec 30, 2021
1f3d6a6
Auto merge of #92252 - GuillaumeGomez:update-pulldown, r=camelid,xFre…
bors Dec 31, 2021
65d1f83
Extend [`unused_io_amount`] to cover AsyncRead and AsyncWrite.
nmathewson Dec 27, 2021
b6bcf0c
unused_io_amount: Use span_lint_and_help.
nmathewson Dec 31, 2021
490566b
Auto merge of #8179 - nmathewson:unused_async_io_amount, r=xFrednet
bors Dec 31, 2021
c736a63
Auto merge of #8193 - ebobrow:redundant_closure_fp, r=Manishearth
bors Dec 31, 2021
3d41358
wrong_self_convention: Match `SelfKind::No` more restrictively
nmathewson Jan 1, 2022
f5bbd1b
Make tidy check for magic numbers that spell things
joshtriplett Jan 1, 2022
262b148
return_self_not_must_use document `#[must_use]` on the type
bors Jan 1, 2022
7616eb0
Auto merge of #8209 - xFrednet:8197-mention-attribute-on-struct, r=ll…
bors Jan 1, 2022
b25dbc6
Auto merge of #8208 - nmathewson:selfkind_no_fix, r=xFrednet
bors Jan 2, 2022
e8b6b2a
erasing_op lint ignored when output type is different from the non-co…
Dec 31, 2021
8419108
Auto merge of #8204 - wigy-opensource-developer:fix-7210, r=xFrednet
bors Jan 2, 2022
6975071
Rollup merge of #90102 - nbdd0121:box3, r=jonas-schievink
matthiaskrgr Jan 3, 2022
19cfcd5
Fix clippy warnings
pmnoxx Jan 3, 2022
3ea7784
Auto merge of #8216 - pmnoxx:piotr-fix-clippy-warnings, r=xFrednet
bors Jan 3, 2022
ff58efb
Better detect when a field can be moved from in `while_let_on_iterator`
Jarcho Jan 4, 2022
00da1b8
Remove in_macro from utils
camsteffen Jan 4, 2022
a7097b8
Consider auto-deref when linting `manual_swap`
Jarcho Jan 4, 2022
0e28e38
Auto merge of #8220 - Jarcho:manual_swap_8154, r=camsteffen
bors Jan 4, 2022
2dd216a
Check for full equality in `type_repetition_in_bounds` rather than ju…
Jarcho Jan 4, 2022
d7a6033
Rollup merge of #91907 - lcnr:const-arg-infer, r=BoxyUwU
matthiaskrgr Jan 4, 2022
786f874
New macro utils
bors Jan 4, 2022
ba03dc7
Auto merge of #8219 - camsteffen:macro-decoupling, r=llogiq
bors Jan 4, 2022
d5dcda2
Auto merge of #8223 - camsteffen:remove-in-macro, r=llogiq
bors Jan 5, 2022
20f2a89
Auto merge of #8224 - Jarcho:type_repetition_in_bounds_8162, r=llogiq
bors Jan 5, 2022
92048f4
Auto merge of #8221 - Jarcho:while_let_on_iterator_8113, r=llogiq
bors Jan 5, 2022
a4ebf6f
Change `unnecessary_to_owned` `into_iter` suggestions to `MaybeIncorr…
smoelius Dec 30, 2021
14f3445
Don't lint `DequeVec` in `manual_memcpy`
Jarcho Jan 5, 2022
3925def
Suggest `copy_from_slice` for `manual_memcpy` when possible
Jarcho Jan 5, 2022
2cc38a2
Lint `iter_not_returning_iterator` on the trait definition rather tha…
Jarcho Jan 5, 2022
d98339d
Handle type projections in `iter_not_returning_iterator`
Jarcho Jan 5, 2022
94fe671
Allow running lintcheck with a renamed rust-clippy dir
Alexendoo Jan 6, 2022
be7cf76
Auto merge of #8234 - Alexendoo:lintcheck-allow-renamed-dir, r=xFrednet
bors Jan 7, 2022
c34e3f0
Update clippy for associated item changes
matthewjasper Nov 18, 2021
366234a
Add `unnecessary_to_owned` "Known problems" section
smoelius Jan 8, 2022
917890b
Auto merge of #8201 - smoelius:master, r=camsteffen
bors Jan 8, 2022
3ea5208
Set binary-dep-depinfo in .cargo/config.toml
sourcefrog Jan 8, 2022
83a9f68
Auto merge of #8249 - sourcefrog:depinfo, r=Manishearth
bors Jan 9, 2022
1288b80
rustc_metadata: Optimize and document module children decoding
petrochenkov Dec 18, 2021
c8ea042
rustc_metadata: Rename `item_children(_untracked)` to `module_childre…
petrochenkov Dec 23, 2021
f690978
cover trait for `trait_duplication_in_bounds`
dswij Jan 6, 2022
a6f80fc
new lint: `single_char_lifetime_names`
bors Jan 9, 2022
5991695
Auto merge of #8236 - PatchMixolydic:single_char_lifetime_names, r=ll…
bors Jan 9, 2022
16d8488
Combine internal features in clippy_utils
camsteffen Jan 10, 2022
e2ce4f9
Combine internal features in clippy_lints
camsteffen Jan 10, 2022
f4dc348
`trait_duplication_in_bounds` Update description and add test
dswij Jan 10, 2022
88cfd70
Auto merge of #8252 - dswij:8229, r=xFrednet
bors Jan 10, 2022
1816361
Auto merge of #8257 - camsteffen:internal-features, r=giraffate
bors Jan 10, 2022
b66dbe8
Auto merge of #8228 - Jarcho:iter_not_returning_iterator_8225, r=gira…
bors Jan 10, 2022
cf86cee
Downgrade mutex_atomic to nursery
taiki-e Jan 10, 2022
5f143c6
Warn disallowed_methods and disallowed_types by default
taiki-e Jan 10, 2022
e66ecf6
Run dogfood on windows
camsteffen Jan 10, 2022
7cf4f44
Fix output capturing
camsteffen Jan 10, 2022
51dbbf3
Refactor test utils
camsteffen Jan 10, 2022
d356fb9
Use `rustup which rustfmt`
camsteffen Jan 10, 2022
920e9f0
Move workspace test
camsteffen Jan 10, 2022
4a54933
Merge dogfood tests
camsteffen Jan 10, 2022
21343ab
Remove rustfmt component check
camsteffen Jan 10, 2022
51282fc
Auto merge of #8261 - taiki-e:disallowed, r=giraffate
bors Jan 10, 2022
01ef7c7
Fix dogfood
camsteffen Jan 10, 2022
fccf07b
Auto merge of #8260 - taiki-e:mutex_atomic, r=llogiq
bors Jan 11, 2022
3298de7
Add borrow_as_ptr lint
guerinoni Jan 2, 2022
fd97d79
`README`: `clippy-driver` is not a replacement for `rustc`
ojeda Nov 27, 2021
3d4fded
`README`: mention `clippy-driver` on usage list
ojeda Dec 14, 2021
dda2aef
Store a `Symbol` instead of an `Ident` in `VariantDef`/`FieldDef`
Aaron1011 Jan 3, 2022
fd9cebe
Auto merge of #8210 - guerinoni:master, r=Manishearth
bors Jan 11, 2022
02ec39b
Stop using in_band_lifetimes
camsteffen Jan 11, 2022
8680a44
Partially stabilize `maybe_uninit_extra`
ojeda Jan 11, 2022
7e989ec
Improve documentation for `borrowed-box` lint
1nF0rmed Jan 10, 2022
88f5be2
Auto merge of #8262 - 1nF0rmed:chore-update-borrowed-box-doc, r=camst…
bors Jan 11, 2022
40f33a7
Deduplicate box deref and regular deref suggestions
compiler-errors Jan 12, 2022
d32277d
Don't lint `deref_addrof` when the two operations occur in different …
Jarcho Jan 12, 2022
37e9985
Auto merge of #8268 - Jarcho:deref_addrof_8247, r=flip1995
bors Jan 12, 2022
0d94167
Auto merge of #8198 - camsteffen:no-method-call-macro, r=flip1995
bors Jan 12, 2022
956db07
Don't fall back to crate-level opaque type definitions.
oli-obk Dec 8, 2021
ae01c4a
Auto merge of #8190 - camsteffen:no-in-band-liftetimes, r=flip1995
bors Jan 12, 2022
b9cae79
Auto merge of #8037 - ojeda:doc-codegen-change, r=camsteffen
bors Jan 12, 2022
166737f
Add manual_bits lint
paolobarbolini Jan 2, 2022
91581f6
Resolve primitive impls in clippy_utils::path_to_res
Alexendoo Dec 9, 2021
7c82ae1
Auto merge of #8213 - paolobarbolini:size-of-as-bits, r=flip1995
bors Jan 12, 2022
04eb27a
Use method name from conf::DisallowedMethod
Alexendoo Dec 9, 2021
6f33f69
Auto merge of #8112 - Alexendoo:disallowed_methods_primitives, r=flip…
bors Jan 12, 2022
90bf72c
Only run dogfood on linux in CI
camsteffen Jan 12, 2022
133b366
Auto merge of #8265 - camsteffen:which-rustfmt, r=xFrednet
bors Jan 12, 2022
5479024
Auto merge of #8266 - camsteffen:test-tweaks, r=flip1995
bors Jan 12, 2022
062db10
Add `manual_memcpy_test` for `VecDeque`
Jarcho Jan 12, 2022
60e68d6
Auto merge of #8226 - Jarcho:manual_memcpy_8160, r=flip1995
bors Jan 12, 2022
8568f44
suggest deref/unboxing before wrapping variant
compiler-errors Jan 12, 2022
7b74ded
Fix lints documents
hafeoz Jan 13, 2022
11be495
Merge remote-tracking branch 'upstream/master' into rustup
flip1995 Jan 13, 2022
8a2141b
Bump Clippy Version -> 0.1.60
flip1995 Jan 13, 2022
6ad05bc
Bump nightly version -> 2022-01-13
flip1995 Jan 13, 2022
97a5daa
Auto merge of #8272 - flip1995:rustup, r=flip1995
bors Jan 13, 2022
ba66384
Merge commit '97a5daa65908e59744e2bc625b14849352231c75' into clippyup
flip1995 Jan 13, 2022
159d6c3
Update Cargo.lock
flip1995 Jan 13, 2022
b83c77c
Fix Clippy sync fallout
flip1995 Jan 13, 2022
bc6b199
Use the updated Rust logo and change it's format to SVG
Urgau Jan 13, 2022
b8ef148
Regenerate the PNGs favicon with the updated Rust logo
Urgau Jan 13, 2022
7cc6a73
Remove `asm` feature from lints example
hafeoz Jan 13, 2022
d5871d0
Fix and improve missing dot in the item heading
Jan 13, 2022
241d977
Update documentation for doc_cfg
GuillaumeGomez Jan 12, 2022
f13e871
Rollup merge of #92045 - oli-obk:cleanup, r=petrochenkov
matthiaskrgr Jan 14, 2022
347c744
Rollup merge of #92381 - ThePuzzlemaker:issue-92308, r=estebank
matthiaskrgr Jan 14, 2022
558da93
Rollup merge of #92768 - ojeda:stabilize-maybe_uninit_extra, r=Mark-S…
matthiaskrgr Jan 14, 2022
9d5cb20
Rollup merge of #92810 - compiler-errors:deduplicate-box-deref-sugges…
matthiaskrgr Jan 14, 2022
3cbc448
Rollup merge of #92818 - GuillaumeGomez:update-doc-cfg-doc, r=camelid
matthiaskrgr Jan 14, 2022
1794b24
Rollup merge of #92840 - hafeoz:master, r=ehuss
matthiaskrgr Jan 14, 2022
ccfee3d
Rollup merge of #92849 - flip1995:clippyup, r=Manishearth
matthiaskrgr Jan 14, 2022
dae3ef2
Rollup merge of #92854 - Urgau:better-rust-logo, r=GuillaumeGomez
matthiaskrgr Jan 14, 2022
2ae4afd
Rollup merge of #92864 - Urgau:fix-missing-source-dot, r=jsha
matthiaskrgr Jan 14, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -639,14 +639,15 @@ dependencies = [

[[package]]
name = "clippy"
version = "0.1.59"
version = "0.1.60"
dependencies = [
"cargo_metadata 0.14.0",
"clippy_lints",
"clippy_utils",
"compiletest_rs",
"derive-new",
"filetime",
"futures 0.3.12",
"if_chain",
"itertools 0.10.1",
"parking_lot",
Expand All @@ -659,6 +660,7 @@ dependencies = [
"syn",
"tempfile",
"tester",
"tokio",
]

[[package]]
Expand All @@ -678,7 +680,7 @@ dependencies = [

[[package]]
name = "clippy_lints"
version = "0.1.59"
version = "0.1.60"
dependencies = [
"cargo_metadata 0.14.0",
"clippy_utils",
Expand All @@ -699,8 +701,9 @@ dependencies = [

[[package]]
name = "clippy_utils"
version = "0.1.59"
version = "0.1.60"
dependencies = [
"arrayvec",
"if_chain",
"rustc-semver",
]
Expand Down
18 changes: 9 additions & 9 deletions compiler/rustc_infer/src/infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ pub(crate) use self::undo_log::{InferCtxtUndoLogs, Snapshot, UndoLog};

use crate::traits::{self, ObligationCause, PredicateObligations, TraitEngine};

use hir::def_id::CRATE_DEF_ID;
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::sync::Lrc;
use rustc_data_structures::undo_log::Rollback;
Expand Down Expand Up @@ -291,7 +290,12 @@ pub struct InferCtxt<'a, 'tcx> {

/// The `DefId` of the item in whose context we are performing inference or typeck.
/// It is used to check whether an opaque type use is a defining use.
pub defining_use_anchor: LocalDefId,
///
/// If it is `None`, we can't resolve opaque types here and need to bubble up
/// the obligation. This frequently happens for
/// short lived InferCtxt within queries. The opaque type obligations are forwarded
/// to the outside until the end up in an `InferCtxt` for typeck or borrowck.
pub defining_use_anchor: Option<LocalDefId>,

/// During type-checking/inference of a body, `in_progress_typeck_results`
/// contains a reference to the typeck results being built up, which are
Expand Down Expand Up @@ -547,7 +551,7 @@ impl<'tcx> fmt::Display for FixupError<'tcx> {
pub struct InferCtxtBuilder<'tcx> {
tcx: TyCtxt<'tcx>,
fresh_typeck_results: Option<RefCell<ty::TypeckResults<'tcx>>>,
defining_use_anchor: LocalDefId,
defining_use_anchor: Option<LocalDefId>,
}

pub trait TyCtxtInferExt<'tcx> {
Expand All @@ -556,11 +560,7 @@ pub trait TyCtxtInferExt<'tcx> {

impl<'tcx> TyCtxtInferExt<'tcx> for TyCtxt<'tcx> {
fn infer_ctxt(self) -> InferCtxtBuilder<'tcx> {
InferCtxtBuilder {
tcx: self,
defining_use_anchor: CRATE_DEF_ID,
fresh_typeck_results: None,
}
InferCtxtBuilder { tcx: self, defining_use_anchor: None, fresh_typeck_results: None }
}
}

Expand All @@ -580,7 +580,7 @@ impl<'tcx> InferCtxtBuilder<'tcx> {
/// (via `with_fresh_in_progress_typeck_results`) and for the inference context used
/// in mir borrowck.
pub fn with_opaque_type_inference(mut self, defining_use_anchor: LocalDefId) -> Self {
self.defining_use_anchor = defining_use_anchor;
self.defining_use_anchor = Some(defining_use_anchor);
self
}

Expand Down
50 changes: 27 additions & 23 deletions compiler/rustc_infer/src/infer/opaque_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,31 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
},
});
}

fn opaque_type_origin(&self, def_id: LocalDefId) -> Option<hir::OpaqueTyOrigin> {
let tcx = self.tcx;
let opaque_hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
let parent_def_id = self.defining_use_anchor?;
let item_kind = &tcx.hir().expect_item(def_id).kind;
let hir::ItemKind::OpaqueTy(hir::OpaqueTy { origin, .. }) = item_kind else {
span_bug!(
tcx.def_span(def_id),
"weird opaque type: {:#?}",
item_kind
)
};
let in_definition_scope = match *origin {
// Async `impl Trait`
hir::OpaqueTyOrigin::AsyncFn(parent) => parent == parent_def_id,
// Anonymous `impl Trait`
hir::OpaqueTyOrigin::FnReturn(parent) => parent == parent_def_id,
// Named `type Foo = impl Bar;`
hir::OpaqueTyOrigin::TyAlias => {
may_define_opaque_type(tcx, parent_def_id, opaque_hir_id)
}
};
in_definition_scope.then_some(*origin)
}
}

// Visitor that requires that (almost) all regions in the type visited outlive
Expand Down Expand Up @@ -459,31 +484,10 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
// }
// ```
if let Some(def_id) = def_id.as_local() {
let opaque_hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
let parent_def_id = self.infcx.defining_use_anchor;
let item_kind = &tcx.hir().expect_item(def_id).kind;
let hir::ItemKind::OpaqueTy(hir::OpaqueTy { origin, .. }) = item_kind else {
span_bug!(
self.value_span,
"weird opaque type: {:#?}, {:#?}",
ty.kind(),
item_kind
)
};
let in_definition_scope = match *origin {
// Async `impl Trait`
hir::OpaqueTyOrigin::AsyncFn(parent) => parent == parent_def_id,
// Anonymous `impl Trait`
hir::OpaqueTyOrigin::FnReturn(parent) => parent == parent_def_id,
// Named `type Foo = impl Bar;`
hir::OpaqueTyOrigin::TyAlias => {
may_define_opaque_type(tcx, parent_def_id, opaque_hir_id)
}
};
if in_definition_scope {
if let Some(origin) = self.infcx.opaque_type_origin(def_id) {
let opaque_type_key =
OpaqueTypeKey { def_id: def_id.to_def_id(), substs };
return self.fold_opaque_ty(ty, opaque_type_key, *origin);
return self.fold_opaque_ty(ty, opaque_type_key, origin);
}

debug!(
Expand Down
42 changes: 37 additions & 5 deletions compiler/rustc_lint_defs/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1805,7 +1805,7 @@ declare_lint! {
///
/// ### Example
///
/// ```
/// ```rust
/// if let _ = 123 {
/// println!("always runs!");
/// }
Expand Down Expand Up @@ -2431,7 +2431,19 @@ declare_lint! {
/// }
/// ```
///
/// {{produces}}
/// This will produce:
///
/// ```text
/// warning: formatting may not be suitable for sub-register argument
/// --> src/main.rs:7:19
/// |
/// 7 | asm!("mov {0}, {0}", in(reg) 0i16);
/// | ^^^ ^^^ ---- for this argument
/// |
/// = note: `#[warn(asm_sub_register)]` on by default
/// = help: use the `x` modifier to have the register formatted as `ax`
/// = help: or use the `r` modifier to keep the default formatting of `rax`
/// ```
///
/// ### Explanation
///
Expand Down Expand Up @@ -2470,7 +2482,17 @@ declare_lint! {
/// }
/// ```
///
/// {{produces}}
/// This will produce:
///
/// ```text
/// warning: avoid using `.att_syntax`, prefer using `options(att_syntax)` instead
/// --> src/main.rs:8:14
/// |
/// 8 | ".att_syntax",
/// | ^^^^^^^^^^^
/// |
/// = note: `#[warn(bad_asm_style)]` on by default
/// ```
///
/// ### Explanation
///
Expand Down Expand Up @@ -2788,7 +2810,7 @@ declare_lint! {
///
/// ### Example
///
/// ```compile_fail
/// ```rust,compile_fail
/// #![feature(staged_api)]
///
/// #[derive(Clone)]
Expand Down Expand Up @@ -3618,7 +3640,17 @@ declare_lint! {
/// fn foo() {}
/// ```
///
/// {{produces}}
/// This will produce:
///
/// ```text
/// warning: duplicated attribute
/// --> src/lib.rs:2:1
/// |
/// 2 | #[test]
/// | ^^^^^^^
/// |
/// = note: `#[warn(duplicate_macro_attributes)]` on by default
/// ```
///
/// ### Explanation
///
Expand Down
37 changes: 11 additions & 26 deletions compiler/rustc_typeck/src/check/demand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
error: TypeError<'tcx>,
) {
self.annotate_expected_due_to_let_ty(err, expr, error);
self.suggest_box_deref(err, expr, expected, expr_ty);
self.suggest_compatible_variants(err, expr, expected, expr_ty);
self.suggest_deref_ref_or_into(err, expr, expected, expr_ty, expected_ty_expr);
self.suggest_compatible_variants(err, expr, expected, expr_ty);
if self.suggest_calling_boxed_future_when_appropriate(err, expr, expected, expr_ty) {
return;
}
Expand Down Expand Up @@ -259,23 +258,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
}
}

fn suggest_box_deref(
&self,
err: &mut DiagnosticBuilder<'_>,
expr: &hir::Expr<'_>,
expected: Ty<'tcx>,
expr_ty: Ty<'tcx>,
) {
if expr_ty.is_box() && expr_ty.boxed_ty() == expected {
err.span_suggestion_verbose(
expr.span.shrink_to_lo(),
"try dereferencing the `Box`",
"*".to_string(),
Applicability::MachineApplicable,
);
}
}

/// If the expected type is an enum (Issue #55250) with any variants whose
/// sole field is of the found type, suggest such variants. (Issue #42764)
fn suggest_compatible_variants(
Expand Down Expand Up @@ -857,14 +839,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
Applicability::MachineApplicable,
false,
));
} else if self.infcx.type_is_copy_modulo_regions(
self.param_env,
expected,
sp,
) {
// For this suggestion to make sense, the type would need to be `Copy`.
}

// For this suggestion to make sense, the type would need to be `Copy`,
// or we have to be moving out of a `Box<T>`
if self.infcx.type_is_copy_modulo_regions(self.param_env, expected, sp)
|| checked_ty.is_box()
{
if let Ok(code) = sm.span_to_snippet(expr.span) {
let message = if checked_ty.is_region_ptr() {
let message = if checked_ty.is_box() {
"consider unboxing the value"
} else if checked_ty.is_region_ptr() {
"consider dereferencing the borrow"
} else {
"consider dereferencing the type"
Expand Down
13 changes: 12 additions & 1 deletion compiler/rustc_typeck/src/check/fn_ctxt/suggestions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use rustc_hir as hir;
use rustc_hir::def::{CtorOf, DefKind};
use rustc_hir::lang_items::LangItem;
use rustc_hir::{Expr, ExprKind, ItemKind, Node, Path, QPath, Stmt, StmtKind, TyKind};
use rustc_infer::infer;
use rustc_infer::infer::{self, TyCtxtInferExt};
use rustc_middle::lint::in_external_macro;
use rustc_middle::ty::{self, Binder, Ty};
use rustc_span::symbol::{kw, sym};
Expand Down Expand Up @@ -608,6 +608,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let bound_vars = self.tcx.late_bound_vars(fn_id);
let ty = self.tcx.erase_late_bound_regions(Binder::bind_with_vars(ty, bound_vars));
let ty = self.normalize_associated_types_in(expr.span, ty);
let ty = match self.tcx.asyncness(fn_id.owner) {
hir::IsAsync::Async => self.tcx.infer_ctxt().enter(|infcx| {
infcx.get_impl_future_output_ty(ty).unwrap_or_else(|| {
span_bug!(
fn_decl.output.span(),
"failed to get output type of async function"
)
})
}),
hir::IsAsync::NotAsync => ty,
};
if self.can_coerce(found, ty) {
err.multipart_suggestion(
"you might have meant to return this value",
Expand Down
1 change: 0 additions & 1 deletion library/alloc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@
#![feature(inplace_iteration)]
#![feature(iter_advance_by)]
#![feature(layout_for_ptr)]
#![feature(maybe_uninit_extra)]
#![feature(maybe_uninit_slice)]
#![cfg_attr(test, feature(new_uninit))]
#![feature(nonnull_slice_from_raw_parts)]
Expand Down
10 changes: 4 additions & 6 deletions library/core/src/mem/maybe_uninit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ impl<T> MaybeUninit<T> {
/// # Examples
///
/// ```no_run
/// #![feature(maybe_uninit_uninit_array, maybe_uninit_extra, maybe_uninit_slice)]
/// #![feature(maybe_uninit_uninit_array, maybe_uninit_slice)]
///
/// use std::mem::MaybeUninit;
///
Expand Down Expand Up @@ -662,7 +662,6 @@ impl<T> MaybeUninit<T> {
/// Correct usage of this method:
///
/// ```rust
/// #![feature(maybe_uninit_extra)]
/// use std::mem::MaybeUninit;
///
/// let mut x = MaybeUninit::<u32>::uninit();
Expand All @@ -683,7 +682,6 @@ impl<T> MaybeUninit<T> {
/// *Incorrect* usage of this method:
///
/// ```rust,no_run
/// #![feature(maybe_uninit_extra)]
/// use std::mem::MaybeUninit;
///
/// let mut x = MaybeUninit::<Option<Vec<u32>>>::uninit();
Expand All @@ -693,8 +691,8 @@ impl<T> MaybeUninit<T> {
/// // We now created two copies of the same vector, leading to a double-free ⚠️ when
/// // they both get dropped!
/// ```
#[unstable(feature = "maybe_uninit_extra", issue = "63567")]
#[rustc_const_unstable(feature = "maybe_uninit_extra", issue = "63567")]
#[stable(feature = "maybe_uninit_extra", since = "1.60.0")]
#[rustc_const_unstable(feature = "const_maybe_uninit_assume_init_read", issue = "63567")]
#[inline(always)]
#[track_caller]
pub const unsafe fn assume_init_read(&self) -> T {
Expand Down Expand Up @@ -728,7 +726,7 @@ impl<T> MaybeUninit<T> {
///
/// [`assume_init`]: MaybeUninit::assume_init
/// [`Vec<T>`]: ../../std/vec/struct.Vec.html
#[unstable(feature = "maybe_uninit_extra", issue = "63567")]
#[stable(feature = "maybe_uninit_extra", since = "1.60.0")]
pub unsafe fn assume_init_drop(&mut self) {
// SAFETY: the caller must guarantee that `self` is initialized and
// satisfies all invariants of `T`.
Expand Down
2 changes: 1 addition & 1 deletion library/core/tests/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#![feature(const_convert)]
#![feature(const_maybe_uninit_as_mut_ptr)]
#![feature(const_maybe_uninit_assume_init)]
#![feature(const_maybe_uninit_assume_init_read)]
#![feature(const_num_from_num)]
#![feature(const_ptr_read)]
#![feature(const_ptr_write)]
Expand Down Expand Up @@ -46,7 +47,6 @@
#![feature(slice_take)]
#![feature(maybe_uninit_uninit_array)]
#![feature(maybe_uninit_array_assume_init)]
#![feature(maybe_uninit_extra)]
#![feature(maybe_uninit_write_slice)]
#![feature(min_specialization)]
#![feature(numfmt)]
Expand Down
Loading