Skip to content

Commit

Permalink
Rollup merge of rust-lang#133691 - compiler-errors:let-source, r=lqd
Browse files Browse the repository at this point in the history
Check let source before suggesting annotation

Make sure we don't annotate nonsense type annotations on locals that come from desugarings.

fixes rust-lang#133688
  • Loading branch information
matthiaskrgr authored Dec 1, 2024
2 parents 2f00feb + 805649b commit 78dad1e
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 1 deletion.
3 changes: 2 additions & 1 deletion compiler/rustc_hir_typeck/src/fallback.rs
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,8 @@ impl<'tcx> Visitor<'tcx> for AnnotateUnitFallbackVisitor<'_, 'tcx> {

fn visit_local(&mut self, local: &'tcx hir::LetStmt<'tcx>) -> Self::Result {
// For a local, try suggest annotating the type if it's missing.
if let None = local.ty
if let hir::LocalSource::Normal = local.source
&& let None = local.ty
&& let Some(ty) = self.fcx.typeck_results.borrow().node_type_opt(local.hir_id)
&& let Some(vid) = self.fcx.root_vid(ty)
&& self.reachable_vids.contains(&vid)
Expand Down
17 changes: 17 additions & 0 deletions tests/ui/never_type/lint-breaking-2024-assign-underscore.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//@ run-rustfix

#![allow(unused)]
#![deny(dependency_on_unit_never_type_fallback)]

fn foo<T: Default>() -> Result<T, ()> {
Err(())
}

fn test() -> Result<(), ()> {
//~^ ERROR this function depends on never type fallback being `()`
//~| WARN this was previously accepted by the compiler but is being phased out
_ = foo::<()>()?;
Ok(())
}

fn main() {}
17 changes: 17 additions & 0 deletions tests/ui/never_type/lint-breaking-2024-assign-underscore.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//@ run-rustfix

#![allow(unused)]
#![deny(dependency_on_unit_never_type_fallback)]

fn foo<T: Default>() -> Result<T, ()> {
Err(())
}

fn test() -> Result<(), ()> {
//~^ ERROR this function depends on never type fallback being `()`
//~| WARN this was previously accepted by the compiler but is being phased out
_ = foo()?;
Ok(())
}

fn main() {}
26 changes: 26 additions & 0 deletions tests/ui/never_type/lint-breaking-2024-assign-underscore.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error: this function depends on never type fallback being `()`
--> $DIR/lint-breaking-2024-assign-underscore.rs:10:1
|
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!
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
= help: specify the types explicitly
note: in edition 2024, the requirement `!: Default` will fail
--> $DIR/lint-breaking-2024-assign-underscore.rs:13:9
|
LL | _ = foo()?;
| ^^^^^
note: the lint level is defined here
--> $DIR/lint-breaking-2024-assign-underscore.rs:4:9
|
LL | #![deny(dependency_on_unit_never_type_fallback)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: use `()` annotations to avoid fallback changes
|
LL | _ = foo::<()>()?;
| ++++++

error: aborting due to 1 previous error

0 comments on commit 78dad1e

Please sign in to comment.