diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 5c3bb6ca401..3d4bd0256bc 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -64,7 +64,7 @@ use syntax::attr::{attr_metas, contains_name, attrs_contains_name}; use syntax::parse::token::ident_interner; use syntax::parse::token::special_idents; use syntax::print::pprust::path_to_str; -use syntax::codemap::{span, dummy_sp}; +use syntax::codemap::{span, dummy_sp, BytePos}; use syntax::visit::{default_visitor, mk_vt, Visitor, visit_block}; use syntax::visit::{visit_crate, visit_expr, visit_expr_opt}; use syntax::visit::{visit_foreign_item, visit_item}; @@ -2482,6 +2482,16 @@ pub impl Resolver { TypeNS, name_search_type) { Failed => { + let segment_name = self.session.str_of(name); + let module_name = self.module_to_str(search_module); + if module_name == ~"???" { + self.session.span_err(span {lo: span.lo, hi: span.lo + + BytePos(str::len(*segment_name)), expn_info: + span.expn_info}, fmt!("unresolved import. maybe \ + a missing 'extern mod %s'?", + *segment_name)); + return Failed; + } self.session.span_err(span, ~"unresolved name"); return Failed; } diff --git a/src/test/compile-fail/issue-1697.rs b/src/test/compile-fail/issue-1697.rs index a0d2536d85f..71b319a27d0 100644 --- a/src/test/compile-fail/issue-1697.rs +++ b/src/test/compile-fail/issue-1697.rs @@ -10,7 +10,7 @@ // Testing that we don't fail abnormally after hitting the errors -use unresolved::*; //~ ERROR unresolved name +use unresolved::*; //~ ERROR unresolved import. maybe a missing //~^ ERROR failed to resolve import fn main() { diff --git a/src/test/compile-fail/unresolved-import.rs b/src/test/compile-fail/unresolved-import.rs new file mode 100644 index 00000000000..1bd3efeadcb --- /dev/null +++ b/src/test/compile-fail/unresolved-import.rs @@ -0,0 +1,12 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use foo::bar; //~ ERROR unresolved import. maybe a missing + //~^ ERROR failed to resolve import