about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Middleton <olliemail27@gmail.com>2016-06-23 23:17:35 +0100
committerOliver Middleton <olliemail27@gmail.com>2016-06-23 23:25:03 +0100
commit1efcde5de01880b5d0cd45bdaca699c0727f5976 (patch)
tree767dfcd137806828f0f607a588afee891367f172
parent6dcc2c1dee3b58afd44665d1df4a248bdd04cce5 (diff)
downloadrust-1efcde5de01880b5d0cd45bdaca699c0727f5976.tar.gz
rust-1efcde5de01880b5d0cd45bdaca699c0727f5976.zip
rustdoc: Fix panic caused by doc(hidden) trait methods
-rw-r--r--src/librustdoc/html/render.rs23
-rw-r--r--src/test/rustdoc/issue-34423.rs20
2 files changed, 33 insertions, 10 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 0d390a87d20..f63d37b3403 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2652,16 +2652,19 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
         if !is_static || render_static {
             if !is_default_item {
                 if let Some(t) = trait_ {
-                    let it = t.items.iter().find(|i| i.name == item.name).unwrap();
-                    // We need the stability of the item from the trait because
-                    // impls can't have a stability.
-                    document_stability(w, cx, it)?;
-                    if item.doc_value().is_some() {
-                        document_full(w, item)?;
-                    } else {
-                        // In case the item isn't documented,
-                        // provide short documentation from the trait.
-                        document_short(w, it, link)?;
+                    // The trait item may have been stripped so we might not
+                    // find any documentation or stability for it.
+                    if let Some(it) = t.items.iter().find(|i| i.name == item.name) {
+                        // We need the stability of the item from the trait
+                        // because impls can't have a stability.
+                        document_stability(w, cx, it)?;
+                        if item.doc_value().is_some() {
+                            document_full(w, item)?;
+                        } else {
+                            // In case the item isn't documented,
+                            // provide short documentation from the trait.
+                            document_short(w, it, link)?;
+                        }
                     }
                 } else {
                     document(w, cx, item)?;
diff --git a/src/test/rustdoc/issue-34423.rs b/src/test/rustdoc/issue-34423.rs
new file mode 100644
index 00000000000..460462d8a66
--- /dev/null
+++ b/src/test/rustdoc/issue-34423.rs
@@ -0,0 +1,20 @@
+// Copyright 2016 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+pub struct Foo;
+
+pub trait Bar {
+    #[doc(hidden)]
+    fn bar() {}
+}
+
+impl Bar for Foo {
+    fn bar() {}
+}