1. 02 2月, 2018 1 次提交
    • V
      Use constant for 180/π in to_degrees · e34c31bf
      varkor 提交于
      The current `f32|f64.to_degrees` implementation uses a division to calculate 180/π, which causes a loss of precision. Using a constant is still not perfect (implementing a maximally-precise algorithm would come with a high performance cost), but improves precision with a minimal change.
      e34c31bf
  2. 30 1月, 2018 1 次提交
  3. 29 1月, 2018 13 次提交
    • B
      Auto merge of #47766 - spastorino:inference-dirty-list, r=nikomatsakis · 70f7d584
      bors 提交于
      Make region inference use a dirty list
      
      r? @nikomatsakis
      70f7d584
    • E
    • E
      6f8d263e
    • B
      Auto merge of #47730 - alexcrichton:multitrans, r=Mark-Simulacrum · 679f30e1
      bors 提交于
      rustc: Split Emscripten to a separate codegen backend
      
      This commit introduces a separately compiled backend for Emscripten, avoiding
      compiling the `JSBackend` target in the main LLVM codegen backend. This builds
      on the foundation provided by #47671 to create a new codegen backend dedicated
      solely to Emscripten, removing the `JSBackend` of the main codegen backend in
      the process.
      
      A new field was added to each target for this commit which specifies the backend
      to use for translation, the default being `llvm` which is the main backend that
      we use. The Emscripten targets specify an `emscripten` backend instead of the
      main `llvm` one.
      
      There's a whole bunch of consequences of this change, but I'll try to enumerate
      them here:
      
      * A *second* LLVM submodule was added in this commit. The main LLVM submodule
        will soon start to drift from the Emscripten submodule, but currently they're
        both at the same revision.
      * Logic was added to rustbuild to *not* build the Emscripten backend by default.
        This is gated behind a `--enable-emscripten` flag to the configure script. By
        default users should neither check out the emscripten submodule nor compile
        it.
      * The `init_repo.sh` script was updated to fetch the Emscripten submodule from
        GitHub the same way we do the main LLVM submodule (a tarball fetch).
      * The Emscripten backend, turned off by default, is still turned on for a number
        of targets on CI. We'll only be shipping an Emscripten backend with Tier 1
        platforms, though. All cross-compiled platforms will not be receiving an
        Emscripten backend yet.
      
      This commit means that when you download the `rustc` package in Rustup for Tier
      1 platforms you'll be receiving two trans backends, one for Emscripten and one
      that's the general LLVM backend. If you never compile for Emscripten you'll
      never use the Emscripten backend, so we may update this one day to only download
      the Emscripten backend when you add the Emscripten target. For now though it's
      just an extra 10MB gzip'd.
      
      Closes #46819
      679f30e1
    • A
      rustc: Split Emscripten to a separate codegen backend · c6daea7c
      Alex Crichton 提交于
      This commit introduces a separately compiled backend for Emscripten, avoiding
      compiling the `JSBackend` target in the main LLVM codegen backend. This builds
      on the foundation provided by #47671 to create a new codegen backend dedicated
      solely to Emscripten, removing the `JSBackend` of the main codegen backend in
      the process.
      
      A new field was added to each target for this commit which specifies the backend
      to use for translation, the default being `llvm` which is the main backend that
      we use. The Emscripten targets specify an `emscripten` backend instead of the
      main `llvm` one.
      
      There's a whole bunch of consequences of this change, but I'll try to enumerate
      them here:
      
      * A *second* LLVM submodule was added in this commit. The main LLVM submodule
        will soon start to drift from the Emscripten submodule, but currently they're
        both at the same revision.
      * Logic was added to rustbuild to *not* build the Emscripten backend by default.
        This is gated behind a `--enable-emscripten` flag to the configure script. By
        default users should neither check out the emscripten submodule nor compile
        it.
      * The `init_repo.sh` script was updated to fetch the Emscripten submodule from
        GitHub the same way we do the main LLVM submodule (a tarball fetch).
      * The Emscripten backend, turned off by default, is still turned on for a number
        of targets on CI. We'll only be shipping an Emscripten backend with Tier 1
        platforms, though. All cross-compiled platforms will not be receiving an
        Emscripten backend yet.
      
      This commit means that when you download the `rustc` package in Rustup for Tier
      1 platforms you'll be receiving two trans backends, one for Emscripten and one
      that's the general LLVM backend. If you never compile for Emscripten you'll
      never use the Emscripten backend, so we may update this one day to only download
      the Emscripten backend when you add the Emscripten target. For now though it's
      just an extra 10MB gzip'd.
      
      Closes #46819
      c6daea7c
    • E
    • B
      Auto merge of #47663 - malbarbo:mips-crt-static, r=alexcrichton · 385ef151
      bors 提交于
      Do not assume dynamic linking for musl/mips[el] targets
      
      All musl targets except mips[el] assume static linking by default. This can be [confusing](https://users.rust-lang.org/t/static-cross-compiled-binaries-arent-really-static/6084).
      
      When the musl/mips[el] targets was [added](https://github.com/rust-lang/rust/pull/31298), dynamic linking was chosen because of binary size concerns, and probably also because libunwind [didn't](https://users.rust-lang.org/t/static-cross-compiled-binaries-arent-really-static/6084/8) supported mips.
      
      Now that we have `crt-static` target-feature (the user can choose dynamic link for musl targets), and libunwind [6.0](https://github.com/llvm-mirror/libunwind/commits/release_60) add support to mips, we do not need to assume dynamic linking.
      385ef151
    • E
    • E
      3f4a489f
    • E
    • E
    • B
      Auto merge of #47204 - varkor:unsafecell-into_inner-safe, r=alexcrichton · 21882aad
      bors 提交于
      Make UnsafeCell::into_inner safe
      
      This fixes #35067. It will require a Crater run as discussed in that
      issue.
      21882aad
    • B
      Auto merge of #47800 - Pulkit07:issue47755, r=sfackler · 771873c8
      bors 提交于
      don't mention tasks in stability warnings of #[thread_local] #47755
      
      This is a fix for issue #47755.
      771873c8
  4. 28 1月, 2018 8 次提交
    • B
      Auto merge of #47794 - etaoins:fix-ice-on-const-eval-of-union-field, r=eddyb · 5e7fd654
      bors 提交于
      Fix ICE on const eval of union field
      
      MIR's `Const::get_field()` attempts to retrieve the value for a given field in a constant. In the case of a union constant it was falling through to a generic `const_get_elt` based on the field index. As union fields don't have an index this caused an ICE in `llvm_field_index`.
      
      Fix by simply returning the current value when accessing any field in a union. This works because all union fields start at byte offset 0.
      
      The added test uses `const_fn` it ensure the field is extracted using MIR's const evaluation. The crash is reproducible without it, however.
      
      Fixes #47788
      
      r? @EddyB
      5e7fd654
    • B
      Auto merge of #47772 - arthurprs:iter-position-bounds-check, r=dtolnay · 0119b442
      bors 提交于
      Use the slice length to hint the optimizer about iter.position result
      
      Using the len of the iterator doesn't give the same result.
      That's also why we can't generalize it to all TrustedLen iterators.
      
      Problem demo: https://godbolt.org/g/MXg2ae
      Fix demo: https://godbolt.org/g/P8q5aZ
      
      Second attempt of #47333
      Third attempt of #45501
      Fixes #45964
      0119b442
    • B
      Auto merge of #47767 - estebank:as-suggestion, r=petrochenkov · 7046a406
      bors 提交于
      Correctly format `extern crate` conflict resolution help
      
      Closes #45799. Follow up to @Cldfire's #45820.
      
      If the `extern` statement that will have a suggestion ends on a `;`, synthesize a new span that doesn't include it.
      7046a406
    • B
      Auto merge of #47671 - alexcrichton:trans-c-api-only, r=Mark-Simulacrum · 87990a11
      bors 提交于
      rustc: Load the `rustc_trans` crate at runtime
      
      Building on the work of #45684 this commit updates the compiler to
      unconditionally load the `rustc_trans` crate at runtime instead of linking to it
      at compile time. The end goal of this work is to implement #46819 where rustc
      will have multiple backends available to it to load.
      
      This commit starts off by removing the `extern crate rustc_trans` from the
      driver. This involved moving some miscellaneous functionality into the
      `TransCrate` trait and also required an implementation of how to locate and load
      the trans backend. This ended up being a little tricky because the sysroot isn't
      always the right location (for example `--sysroot` arguments) so some extra code
      was added as well to probe a directory relative to the current dll (the
      rustc_driver dll).
      
      Rustbuild has been updated accordingly as well to have a separate compilation
      invocation for the `rustc_trans` crate and assembly it accordingly into the
      sysroot. Finally, the distribution logic for the `rustc` package was also
      updated to slurp up the trans backends folder.
      
      A number of assorted fallout changes were included here as well to ensure tests
      pass and such, and they should all be commented inline.
      87990a11
    • A
      rustc: Load the `rustc_trans` crate at runtime · 884715c6
      Alex Crichton 提交于
      Building on the work of # 45684 this commit updates the compiler to
      unconditionally load the `rustc_trans` crate at runtime instead of linking to it
      at compile time. The end goal of this work is to implement # 46819 where rustc
      will have multiple backends available to it to load.
      
      This commit starts off by removing the `extern crate rustc_trans` from the
      driver. This involved moving some miscellaneous functionality into the
      `TransCrate` trait and also required an implementation of how to locate and load
      the trans backend. This ended up being a little tricky because the sysroot isn't
      always the right location (for example `--sysroot` arguments) so some extra code
      was added as well to probe a directory relative to the current dll (the
      rustc_driver dll).
      
      Rustbuild has been updated accordingly as well to have a separate compilation
      invocation for the `rustc_trans` crate and assembly it accordingly into the
      sysroot. Finally, the distribution logic for the `rustc` package was also
      updated to slurp up the trans backends folder.
      
      A number of assorted fallout changes were included here as well to ensure tests
      pass and such, and they should all be commented inline.
      884715c6
    • B
      Auto merge of #47746 - varkor:never-type-ice, r=nikomatsakis · 6beb06ee
      bors 提交于
      Fix never-type rvalue ICE
      
      This fixes #43061.
      r? @nikomatsakis
      
      A small post-mortem as a follow-up to our investigations in https://github.com/rust-lang/rust/pull/47291:
      The problem as I understand it is that when `NeverToAny` coercions are made, the expression/statement that is coerced may be enclosed in a block. In our case, the statement `x;` was being transformed to something like: `NeverToAny( {x;} )`. Then, `NeverToAny` is transformed into an expression:
      https://github.com/rust-lang/rust/blob/000fbbc9b8f88adc6a417f1caef41161f104250f/src/librustc_mir/build/expr/into.rs#L52-L59
      Which ends up calling `ast_block_stmts` on the block `{x;}`, which triggers this condition:
      https://github.com/rust-lang/rust/blob/000fbbc9b8f88adc6a417f1caef41161f104250f/src/librustc_mir/build/block.rs#L141-L147
      In our case, there is no return expression, so `push_assign_unit` is called. But the block has already been recorded as _diverging_, meaning the result of the block will be assigned to a location of type `!`, rather than `()`. This causes the MIR error.
      I'm assuming the `NeverToAny` coercion code is doing what it's supposed to (there don't seem to be any other problems), so fixing the issue simply consists of checking that the destination for the return value actually _is_ supposed to be a unit. (If no return value is given, the only other possible type for the return value is `!`, which can just be ignored, as it will be unreachable anyway.)
      
      I checked the other cases of `push_assign_unit`, and it didn't look like they could be affected by the divergence issue (blocks are kind of special-cased in this regard as far as I can tell), so this should be sufficient to fix the issue.
      6beb06ee
    • M
    • B
      Auto merge of #47420 - davidtwco:issue-46885, r=estebank · 7d6e5b9d
      bors 提交于
      Fix off-by-one spans in MIR borrowck errors
      
      Fixes #46885.
      
      r? @nikomatsakis
      7d6e5b9d
  5. 27 1月, 2018 17 次提交