diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 85f538e7dc3..92fe5b019db 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -1059,7 +1059,12 @@ fn fold_item(&mut self, item: clean::Item) -> Option {
// Figure out the id of this impl. This may map to a
// primitive rather than always to a struct/enum.
let did = match i.for_ {
- ResolvedPath { did, .. } => Some(did),
+ ResolvedPath { did, .. } |
+ BorrowedRef {
+ type_: box ResolvedPath { did, .. }, ..
+ } => {
+ Some(did)
+ }
// References to primitives are picked up as well to
// recognize implementations for &str, this may not
diff --git a/src/test/rustdoc/issue-20175.rs b/src/test/rustdoc/issue-20175.rs
new file mode 100644
index 00000000000..33ec4b75c41
--- /dev/null
+++ b/src/test/rustdoc/issue-20175.rs
@@ -0,0 +1,20 @@
+// Copyright 2015 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.
+
+pub trait Foo {
+ fn foo(&self) {}
+}
+
+pub struct Bar;
+
+// @has issue_20175/struct.Bar.html \
+// '//*[@id="method.foo"]' \
+// 'fn foo'
+impl<'a> Foo for &'a Bar {}