diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2016-11-04 16:49:30 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-11-05 10:50:23 -0700 |
| commit | 7c7bc2c296fc0d2bfd94d6c37e0ac74b02a5c8d4 (patch) | |
| tree | f664f8107be82b6d20ea97da3b89413d72a59f43 /src | |
| parent | b4aee37224f60c60f0f49b4e613ee6081fb52355 (diff) | |
| parent | d5f72d21afffcda4cc71945f12477136774aa604 (diff) | |
| download | rust-7c7bc2c296fc0d2bfd94d6c37e0ac74b02a5c8d4.tar.gz rust-7c7bc2c296fc0d2bfd94d6c37e0ac74b02a5c8d4.zip | |
Rollup merge of #37564 - Mark-Simulacrum:sized-ice, r=eddyb
Fix ICE when querying DefId on Def::Err. Also moves computations into check that `kind_id` is `Ok(_)`, which is in theory an optimization, though I expect it's minor. Fixes #37534. r? @eddyb.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/collect.rs | 7 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-37534.rs | 16 |
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() { } |
