}
}
Def::Err => {
- for segment in &path.segments {
- segment.with_parameters(|parameters| {
- for ty in ¶meters.types {
- self.ast_ty_to_ty(ty);
- }
- for binding in ¶meters.bindings {
- self.ast_ty_to_ty(&binding.ty);
- }
- });
- }
self.set_tainted_by_errors();
return self.tcx().types.err;
}
pub fn node_ty(&self, id: hir::HirId) -> Ty<'tcx> {
match self.tables.borrow().node_types().get(id) {
Some(&t) => t,
- None if self.err_count_since_creation() != 0 => self.tcx.types.err,
+ None if self.is_tainted_by_errors() => self.tcx.types.err,
None => {
let node_id = self.tcx.hir.definitions().find_node_for_hir_id(id);
bug!("no type for node {}: {} in fcx {}",
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-// Type arguments of unresolved types should have their types recorded
+// Type arguments in unresolved entities (reporting errors before type checking)
+// should have their types recorded.
-fn main() {
+trait Tr<T> {}
+
+fn local_type() {
let _: Nonexistent<u8, Assoc = u16>; //~ ERROR cannot find type `Nonexistent` in this scope
+}
- let _ = |a, b: _| -> _ { 0 };
+fn ufcs_trait() {
+ <u8 as Tr<u8>>::nonexistent(); //~ ERROR cannot find method or associated constant `nonexistent`
}
+
+fn ufcs_item() {
+ NonExistent::Assoc::<u8>; //~ ERROR undeclared type or module `NonExistent`
+}
+
+fn method() {
+ nonexistent.nonexistent::<u8>(); //~ ERROR cannot find value `nonexistent`
+}
+
+fn closure() {
+ let _ = |a, b: _| -> _ { 0 }; // OK
+}
+
+fn main() {}