Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 9 additions & 0 deletions compiler/rustc_resolve/src/def_collector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,7 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
let kind = match self.impl_trait_context {
ImplTraitContext::Universal => DefKind::TyParam,
ImplTraitContext::Existential => DefKind::OpaqueTy,
ImplTraitContext::InBinding => return visit::walk_ty(self, ty),
};
let id = self.create_def(*id, name, kind, ty.span);
match self.impl_trait_context {
Expand All @@ -365,6 +366,7 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
ImplTraitContext::Existential => {
self.with_parent(id, |this| visit::walk_ty(this, ty))
}
ImplTraitContext::InBinding => unreachable!(),
};
}
_ => visit::walk_ty(self, ty),
Expand All @@ -374,6 +376,13 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
fn visit_stmt(&mut self, stmt: &'a Stmt) {
match stmt.kind {
StmtKind::MacCall(..) => self.visit_macro_invoc(stmt.id),
// FIXME(impl_trait_in_bindings): We don't really have a good way of
// introducing the right `ImplTraitContext` here for all the cases we
// care about, in case we want to introduce ITIB to other positions
// such as turbofishes (e.g. `foo::<impl Fn()>(|| {})`).
StmtKind::Let(ref local) => self.with_impl_trait(ImplTraitContext::InBinding, |this| {
visit::walk_local(this, local)
}),
_ => visit::walk_stmt(self, stmt),
}
}
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_resolve/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ impl InvocationParent {
enum ImplTraitContext {
Existential,
Universal,
InBinding,
}

/// Used for tracking import use types which will be used for redundant import checking.
Expand Down
10 changes: 10 additions & 0 deletions tests/ui/impl-trait/in-bindings/dont-make-def-id.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//@ check-pass

// Make sure we don't create an opaque def id for ITIB.

#![crate_type = "lib"]
#![feature(impl_trait_in_bindings)]

fn foo() {
let _: impl Sized = 0;
}
Loading