Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 9 pull requests #36491

Merged
merged 38 commits into from
Sep 15, 2016
Merged

Rollup of 9 pull requests #36491

merged 38 commits into from
Sep 15, 2016

Commits on Sep 10, 2016

  1. Configuration menu
    Copy the full SHA
    2a2c9d3 View commit details
    Browse the repository at this point in the history
  2. Improve Eq deriving

    petrochenkov committed Sep 10, 2016
    Configuration menu
    Copy the full SHA
    62cb751 View commit details
    Browse the repository at this point in the history

Commits on Sep 11, 2016

  1. Configuration menu
    Copy the full SHA
    6b99e01 View commit details
    Browse the repository at this point in the history

Commits on Sep 13, 2016

  1. fix "X is not a member of trait Y" span labels

    The span labels for associated types and consts were hardcoded to `Foo`
    rather than substituting the name of the trait.
    
    This also normalizes the wording for associated methods', traits', and
    consts' span labels.
    
    Fixes rust-lang#36428.
    durka authored and Alex Burka committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    0a62676 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    50f94f6 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    60440b2 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    a9821e1 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    20b43b2 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    72a6369 View commit details
    Browse the repository at this point in the history
  7. Perform node id assignment and macros_at_scope construction during

    the `InvocationCollector` and `PlaceholderExpander` folds.
    jseyfried committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    c86c8d4 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    f3c2dca View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    78c0039 View commit details
    Browse the repository at this point in the history
  10. Differentiate between monotonic and non-monotonic expansion and

    only assign node ids during monotonic expansion.
    jseyfried committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    b54e1e3 View commit details
    Browse the repository at this point in the history
  11. Make sure that projection bounds in ty::TraitObject are sorted in a w…

    …ay that is stable across compilation sessions and crate boundaries.
    michaelwoerister committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    5a881e9 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    5c923f0 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    94d7501 View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    75a0dd0 View commit details
    Browse the repository at this point in the history
  15. Configuration menu
    Copy the full SHA
    869d144 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    377c3e1 View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    7ec9b81 View commit details
    Browse the repository at this point in the history
  18. invoke drop glue with a ptr to (data, meta)

    This is done by creating a little space on the stack. Hokey, but it's
    the simplest fix I can see.
    nikomatsakis committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    b49a26e View commit details
    Browse the repository at this point in the history
  19. add missing test

    nikomatsakis committed Sep 13, 2016
    Configuration menu
    Copy the full SHA
    693676d View commit details
    Browse the repository at this point in the history

Commits on Sep 14, 2016

  1. Add checked operation methods to Duration

    Eugene Bulkin committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    606cded View commit details
    Browse the repository at this point in the history
  2. Fix Duration::checked_mul documentation

    Eugene Bulkin committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    07b41b5 View commit details
    Browse the repository at this point in the history
  3. Implement add, sub, mul and div methods using checked methods for Dur…

    …ation
    Eugene Bulkin committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    b1bcd18 View commit details
    Browse the repository at this point in the history
  4. clear obligations-added flag with nested fulfillcx

    This flag is a debugging measure designed to detect cases where we start
    a snapshot, create type variables, register obligations involving those
    type variables in the fulfillment cx, and then have to unroll the
    snapshot, leaving "dangling type variables" behind.  HOWEVER, in some
    cases the flag is wrong. In particular, we sometimes create a
    "mini-fulfilment-cx" in which we enroll obligations. As long as this
    fulfillment cx is fully drained before we return, this is not a problem,
    as there won't be any escaping obligations in the main cx. So we add a
    fn to save/restore the flag.
    nikomatsakis committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    6353e30 View commit details
    Browse the repository at this point in the history
  5. core: Use primitive indexing in slice's Index/IndexMut

    [T]'s Index implementation is normally not used for indexing, instead
    the compiler supplied indexing is used.
    
    Use the compiler supplied version in Index/IndexMut.
    
    This removes an inconsistency:
    
    Compiler supplied bound check failures look like this:
    
    thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'
    
    If you convince Rust to use the Index impl for slices, bounds check
    failure looks like this instead:
    
    thread 'main' panicked at 'assertion failed: index < self.len()'
    
    The latter is used if you for example use Index generically::
    
       use std::ops::Index;
       fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }
    
       foo(&[1, 2, 3][..])
    bluss committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    a4ee9c6 View commit details
    Browse the repository at this point in the history
  6. Fix doc-tests for Duration

    Eugene Bulkin committed Sep 14, 2016
    Configuration menu
    Copy the full SHA
    f2eb4f1 View commit details
    Browse the repository at this point in the history

Commits on Sep 15, 2016

  1. Configuration menu
    Copy the full SHA
    b6321bd View commit details
    Browse the repository at this point in the history
  2. Rollup merge of rust-lang#36384 - petrochenkov:derclone, r=alexcrichton

    Improve shallow `Clone` deriving
    
    `Copy` unions now support `#[derive(Clone)]`.
    Less code is generated for `#[derive(Clone, Copy)]`.
    +
    Unions now support `#[derive(Eq)]`.
    Less code is generated for `#[derive(Eq)]`.
    
    ---
    Example of code reduction:
    ```
    enum E {
    	A { a: u8, b: u16 },
    	B { c: [u8; 100] },
    }
    ```
    Before:
    ```
    fn clone(&self) -> E {
        match (&*self,) {
            (&E::A { a: ref __self_0, b: ref __self_1 },) => {
                ::std::clone::assert_receiver_is_clone(&(*__self_0));
                ::std::clone::assert_receiver_is_clone(&(*__self_1));
                *self
            }
            (&E::B { c: ref __self_0 },) => {
                ::std::clone::assert_receiver_is_clone(&(*__self_0));
                *self
            }
        }
    }
    ```
    After:
    ```
    fn clone(&self) -> E {
        {
            let _: ::std::clone::AssertParamIsClone<u8>;
            let _: ::std::clone::AssertParamIsClone<u16>;
            let _: ::std::clone::AssertParamIsClone<[u8; 100]>;
            *self
        }
    }
    ```
    
    All the matches are removed, bound assertions are more lightweight.
    `let _: Checker<CheckMe>;`, unlike `checker(&check_me);`, doesn't have to be translated by rustc_trans and then inlined by LLVM, it doesn't even exist in MIR, this means faster compilation.
    
    ---
    Union impls are generated like this:
    ```
    union U {
    	a: u8,
    	b: u16,
    	c: [u8; 100],
    }
    ```
    ```
    fn clone(&self) -> U {
        {
            let _: ::std::clone::AssertParamIsCopy<Self>;
            *self
        }
    }
    ```
    
    Fixes rust-lang#36043
    cc @durka
    r? @alexcrichton
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    7268501 View commit details
    Browse the repository at this point in the history
  3. Rollup merge of rust-lang#36405 - solson:typo, r=eddyb

    Delete stray ` character in error message.
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    ebef6ad View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#36425 - michaelwoerister:stable-projection-…

    …bounds, r=eddyb
    
    Fix indeterminism in ty::TraitObject representation.
    
    Make sure that projection bounds in `ty::TraitObject` are sorted in a way that is stable across compilation sessions and crate boundaries.
    
    This PR
    +  moves `DefPathHashes` up into `librustc` so it can be used there to create a stable sort key for `DefId`s,
    + changes `PolyExistentialProjection::sort_key()` to take advantage of the above,
    + and removes the unused `PolyProjectionPredicate::sort_key()` and `ProjectionTy::sort_key()` methods.
    
    Fixes rust-lang#36155
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    7494bc7 View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#36429 - durka:patch-30, r=nagisa

    fix "X is not a member of trait Y" span labels
    
    Fixes rust-lang#36428.
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    23e0c24 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#36438 - jseyfried:node_ids_in_expansion, r=nrc

    Assign node ids during macro expansion
    
    After this PR,
     - The `ExtCtxt` can access `resolve`'s `Resolver` through the trait object `ext::base::Resolver`.
      - The `Resolver` trait object can load macros and replaces today's `MacroLoader` trait object.
      - The macro expander uses the `Resolver` trait object to resolve macro invocations.
     - The macro expander assigns node ids and builds the `Resolver`'s `macros_at_scope` map.
       - This is groundwork for merging import resolution and expansion.
     - Performance of expansion together with node id assignment improves by ~5%.
    
    **EDIT:** Since Github is reordering the commits, here is `git log`:
     - b54e1e3: Differentiate between monotonic and non-monotonic expansion and only assign node ids during monotonic expansion.
     - 78c0039: Expand generated test harnesses and macro registries.
     - f3c2dca: Remove scope placeholders from the crate root.
     - c86c8d4: Perform node id assignment and `macros_at_scope` construction during the `InvocationCollector` and `PlaceholderExpander` folds.
     - 72a6369: Move macro resolution into `librustc_resolve`.
     - 20b43b2: Rewrite the unit tests in `ext/expand.rs` as a `compile-fail` test.
     - a9821e1: Refactor `ExtCtxt` to use a `Resolver` instead of a `MacroLoader`.
     - 60440b2: Refactor `noop_fold_stmt_kind` out of `noop_fold_stmt`.
     - 50f94f6: Avoid needless reexpansions.
    
    r? @nrc
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    bab9238 View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#36454 - bluss:slice-primitive-index, r=alex…

    …crichton
    
    Use primitive indexing in slice's Index/IndexMut
    
    [T]'s Index implementation is normally not used for indexing, instead
    the compiler supplied indexing is used.
    
    Use the compiler supplied version in Index/IndexMut.
    
    This removes an inconsistency:
    
    Compiler supplied bound check failures look like this:
    
    thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'
    
    If you convince Rust to use the Index impl for slices, bounds check
    failure looks like this instead:
    
    thread 'main' panicked at 'assertion failed: index < self.len()'
    
    The latter is used if you for example use Index generically:
    
    ```rust
    use std::ops::Index;
    fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }
    
    foo(&[1, 2, 3][..])
    ```
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    69a7f92 View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#36459 - nikomatsakis:issue-35546, r=eddyb

    invoke drop glue with a ptr to (data, meta)
    
    This is done by creating a little space on the stack. Hokey, but it's the simplest fix I can see, and I am in "kill regressions" mode right now.
    
    Fixes rust-lang#35546
    
    r? @eddyb
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    959f764 View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#36461 - nikomatsakis:issue-36053, r=arielb1

    clear obligations-added flag with nested fulfillcx
    
    This flag is a debugging measure designed to detect cases where we start
    a snapshot, create type variables, register obligations involving those
    type variables in the fulfillment cx, and then have to unroll the
    snapshot, leaving "dangling type variables" behind.  HOWEVER, in some
    cases the flag is wrong. In particular, we sometimes create a
    "mini-fulfilment-cx" in which we enroll obligations. As long as this
    fulfillment cx is fully drained before we return, this is not a problem,
    as there won't be any escaping obligations in the main cx. So we add a
    fn to save/restore the flag.
    
    Fixes rust-lang#36053.
    
    r? @arielb1
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    0c9dc53 View commit details
    Browse the repository at this point in the history
  10. Rollup merge of rust-lang#36463 - eugene-bulkin:duration-checked-ops,…

    … r=alexcrichton
    
    Add checked operation methods to Duration
    
    Addresses rust-lang#35774.
    Manishearth authored Sep 15, 2016
    Configuration menu
    Copy the full SHA
    ec08128 View commit details
    Browse the repository at this point in the history