]> git.lizzy.rs Git - rust.git/commitdiff
Auto merge of #37860 - giannicic:defaultimpl, r=nagisa
authorbors <bors@rust-lang.org>
Thu, 27 Apr 2017 02:48:17 +0000 (02:48 +0000)
committerbors <bors@rust-lang.org>
Thu, 27 Apr 2017 02:48:17 +0000 (02:48 +0000)
#37653 support `default impl` for specialization

this commit implements the first step of the `default impl` feature:

> all items in a `default impl` are (implicitly) `default` and hence
> specializable.

In order to test this feature I've copied all the tests provided for the
`default` method implementation (in run-pass/specialization and
compile-fail/specialization directories) and moved the `default` keyword
from the item to the impl.
See [referenced](https://github.com/rust-lang/rust/issues/37653) issue for further info

r? @aturon

13 files changed:
1  2 
src/librustc/middle/reachable.rs
src/librustc/traits/project.rs
src/librustc/traits/util.rs
src/librustc_metadata/cstore_impl.rs
src/librustc_metadata/decoder.rs
src/librustc_metadata/encoder.rs
src/librustc_save_analysis/dump_visitor.rs
src/librustc_trans/collector.rs
src/librustc_typeck/check/mod.rs
src/librustc_typeck/check/wfcheck.rs
src/librustc_typeck/coherence/unsafety.rs
src/librustc_typeck/collect.rs
src/libsyntax/parse/parser.rs

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 783e7604cdaf1b424e0effa9d38b4f0a94ece427,d55f489107d7f3a0c398b742312cf6bc9fe4b49a..3676e5a7f0f724d83cd9dc58971f15b219014464
@@@ -713,10 -714,10 +714,10 @@@ impl<'a, 'b: 'a, 'tcx: 'b> EntryBuilder
  
                  EntryKind::DefaultImpl(self.lazy(&data))
              }
-             hir::ItemImpl(_, polarity, ..) => {
+             hir::ItemImpl(_, polarity, defaultness, ..) => {
                  let trait_ref = tcx.impl_trait_ref(def_id);
                  let parent = if let Some(trait_ref) = trait_ref {
 -                    let trait_def = tcx.lookup_trait_def(trait_ref.def_id);
 +                    let trait_def = tcx.trait_def(trait_ref.def_id);
                      trait_def.ancestors(def_id).skip(1).next().and_then(|node| {
                          match node {
                              specialization_graph::Node::Impl(parent) => Some(parent),
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge