about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark-Simulacrum <mark.simulacrum@gmail.com>2016-11-03 14:55:35 -0600
committerMark-Simulacrum <mark.simulacrum@gmail.com>2016-11-03 15:27:29 -0600
commitd5f72d21afffcda4cc71945f12477136774aa604 (patch)
tree5f62c806f6708207e2c1107c92186a1cf35901b7
parentac919fcd9d4a958baf99b2f2ed5c3d38a2ebf9d0 (diff)
downloadrust-d5f72d21afffcda4cc71945f12477136774aa604.tar.gz
rust-d5f72d21afffcda4cc71945f12477136774aa604.zip
Fix ICE when querying DefId on Def::Err.
-rw-r--r--src/librustc_typeck/collect.rs7
-rw-r--r--src/test/compile-fail/issue-37534.rs16
2 files changed, 19 insertions, 4 deletions
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs
index 202e176df0d..0e0f5cb1a7e 100644
--- a/src/librustc_typeck/collect.rs
+++ b/src/librustc_typeck/collect.rs
@@ -1724,16 +1724,15 @@ fn add_unsized_bound<'gcx: 'tcx, 'tcx>(astconv: &AstConv<'gcx, 'tcx>,
     match unbound {
         Some(ref tpb) => {
             // FIXME(#8559) currently requires the unbound to be built-in.
-            let trait_def_id = tcx.expect_def(tpb.ref_id).def_id();
-            match kind_id {
-                Ok(kind_id) if trait_def_id != kind_id => {
+            if let Ok(kind_id) = kind_id {
+                let trait_def = tcx.expect_def(tpb.ref_id);
+                if trait_def != Def::Trait(kind_id) {
                     tcx.sess.span_warn(span,
                                        "default bound relaxed for a type parameter, but \
                                        this does nothing because the given bound is not \
                                        a default. Only `?Sized` is supported");
                     tcx.try_add_builtin_trait(kind_id, bounds);
                 }
-                _ => {}
             }
         }
         _ if kind_id.is_ok() => {
diff --git a/src/test/compile-fail/issue-37534.rs b/src/test/compile-fail/issue-37534.rs
new file mode 100644
index 00000000000..eb676601e89
--- /dev/null
+++ b/src/test/compile-fail/issue-37534.rs
@@ -0,0 +1,16 @@
+// 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.
+
+struct Foo<T: ?Hash> { }
+//~^ ERROR trait `Hash` is not in scope [E0405]
+//~^^ ERROR parameter `T` is never used [E0392]
+//~^^^ WARN default bound relaxed for a type parameter, but this does nothing
+
+fn main() { }