diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index e14be8ac6fda..d60fe3c03884 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -150,7 +150,7 @@ fn resolved_path(w: &mut fmt::Formatter, did: ast::DefId, p: &clean::Path,
print_all: bool) -> fmt::Result {
path(w, p, print_all,
|cache, loc| {
- if ast_util::is_local(did) {
+ if ast_util::is_local(did) || cache.paths.contains_key(&did) {
Some(("../".repeat(loc.len())).to_strbuf())
} else {
match *cache.extern_locations.get(&did.krate) {
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 93bd5249a2f7..6d6736eac3f3 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -797,6 +797,7 @@ impl DocFolder for Cache {
// not a public item.
let id = item.def_id.node;
if !self.paths.contains_key(&item.def_id) ||
+ !ast_util::is_local(item.def_id) ||
self.public_items.contains(&id) {
self.paths.insert(item.def_id,
(self.stack.clone(), shortty(&item)));