mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
Don't use unwrap()
in ArrayIntoIter
lint when typeck fails
This commit is contained in:
parent
710048f790
commit
fa7557181f
@ -70,11 +70,15 @@ impl<'tcx> LateLintPass<'tcx> for ArrayIntoIter {
|
||||
|
||||
// Check if the method call actually calls the libcore
|
||||
// `IntoIterator::into_iter`.
|
||||
let def_id = cx.typeck_results().type_dependent_def_id(expr.hir_id).unwrap();
|
||||
match cx.tcx.trait_of_item(def_id) {
|
||||
Some(trait_id) if cx.tcx.is_diagnostic_item(sym::IntoIterator, trait_id) => {}
|
||||
_ => return,
|
||||
};
|
||||
let trait_id = cx
|
||||
.typeck_results()
|
||||
.type_dependent_def_id(expr.hir_id)
|
||||
.and_then(|did| cx.tcx.trait_of_item(did));
|
||||
if trait_id.is_none()
|
||||
|| !cx.tcx.is_diagnostic_item(sym::IntoIterator, trait_id.unwrap())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// As this is a method call expression, we have at least one argument.
|
||||
let receiver_ty = cx.typeck_results().expr_ty(receiver_arg);
|
||||
|
11
tests/ui/lint/ice-array-into-iter-lint-issue-121532.rs
Normal file
11
tests/ui/lint/ice-array-into-iter-lint-issue-121532.rs
Normal file
@ -0,0 +1,11 @@
|
||||
// Regression test for #121532
|
||||
// Checks the we don't ICE in ArrayIntoIter
|
||||
// lint when typeck has failed
|
||||
|
||||
// Typeck fails for the arg type as
|
||||
// `Self` makes no sense here
|
||||
fn func(a: Self::ItemsIterator) { //~ ERROR failed to resolve: `Self` is only available in impls, traits, and type definitions
|
||||
a.into_iter();
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,9 @@
|
||||
error[E0433]: failed to resolve: `Self` is only available in impls, traits, and type definitions
|
||||
--> $DIR/ice-array-into-iter-lint-issue-121532.rs:7:12
|
||||
|
|
||||
LL | fn func(a: Self::ItemsIterator) {
|
||||
| ^^^^ `Self` is only available in impls, traits, and type definitions
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0433`.
|
Loading…
Reference in New Issue
Block a user