1. 05 Apr, 2019 7 commits
  2. 04 Apr, 2019 24 commits
    • Alex Crichton's avatar
      wasm32: Default to a "static" relocation model · 471db2b8
      Alex Crichton authored
      LLVM 9 is adding support for a "pic" relocation model for wasm code,
      which is quite different than the current model. In order to preserve
      the mode of compilation that we have today default to "static" to ensure
      that we don't accidentally start creating experimental relocatable
      binaries.
      471db2b8
    • Alex Crichton's avatar
      ci: Update FreeBSD tarball downloads · fcc8b8ce
      Alex Crichton authored
      These appear to have disappeared from the original server, so I acquired
      the contents from a different mirror and uploaded them to our S3 bucket
      fcc8b8ce
    • Alex Crichton's avatar
      std: Upgrade `compiler_builtins` to fix wasi linkage · 1bf04c9a
      Alex Crichton authored
      Turns out we needed to exclude a number of math functions on the
      `wasm32-unknown-wasi` target, and this was fixed in 0.1.9 of
      compiler-builtins and this is pulling in the fix to libstd's own build.
      1bf04c9a
    • bors's avatar
      Auto merge of #59676 - alexcrichton:osx-deadlock, r=sfackler · 53f2165c
      bors authored
      std: Avoid usage of `Once` in `Instant`
      
      This commit removes usage of `Once` from the internal implementation of
      time utilities on OSX and Windows. It turns out that we accidentally hit
      a deadlock today (#59020) via events that look like:
      
      * A thread invokes `park_timeout`
      * Internally, only on OSX, `park_timeout` calls `Instant::elapsed`
      * Inside of `Instant::elapsed` on OSX we enter a `Once` to initialize
        global timer data
      * Inside of `Once`, it attempts to `park`
      
      This means on the same stack frame, when there's contention, we're
      calling `park` from inside `park_timeout`, causing a deadlock!
      
      The solution implemented in this commit was to remove usage of `Once`
      and instead just do a small dance with atomics. There's no real need we
      need to guarantee that the global information is only learned once, only
      that it's only *stored* once. This implementation may have multiple
      threads invoke `mach_timebase_info`, but only one will store the global
      information which will amortize the cost for all other threads.
      
      A similar fix has been applied to windows to be uniform across our
      implementations, but looking at the code on Windows no deadlock was
      possible. This is purely just a consistency update for Windows and in
      theory a slightly leaner implementation.
      
      Closes #59020
      53f2165c
    • hgallagher1993's avatar
    • bors's avatar
      Auto merge of #59695 - Centril:rollup-88qffc2, r=Centril · 52980d0f
      bors authored
      Rollup of 8 pull requests
      
      Successful merges:
      
       - #59470 (Document std::fs::File close behavior ignoring errors)
       - #59555 (update miri)
       - #59556 (update stdsimd)
       - #59596 (Forward formatter settings to bounds of `Range<T>` in `fmt::Debug` impl)
       - #59639 (Never return uninhabited values at all)
       - #59671 (Make some of lexer's API private)
       - #59685 (Add description for -Os and -Oz in rustc.1)
       - #59686 (Temporarily disable stack probing for gnux32.)
      
      Failed merges:
      
      r? @ghost
      52980d0f
    • Alex Crichton's avatar
      std: Avoid usage of `Once` in `Instant` · cb57484d
      Alex Crichton authored
      This commit removes usage of `Once` from the internal implementation of
      time utilities on OSX and Windows. It turns out that we accidentally hit
      a deadlock today (#59020) via events that look like:
      
      * A thread invokes `park_timeout`
      * Internally, only on OSX, `park_timeout` calls `Instant::elapsed`
      * Inside of `Instant::elapsed` on OSX we enter a `Once` to initialize
        global timer data
      * Inside of `Once`, it attempts to `park`
      
      This means on the same stack frame, when there's contention, we're
      calling `park` from inside `park_timeout`, causing a deadlock!
      
      The solution implemented in this commit was to remove usage of `Once`
      and instead just do a small dance with atomics. There's no real need we
      need to guarantee that the global information is only learned once, only
      that it's only *stored* once. This implementation may have multiple
      threads invoke `mach_timebase_info`, but only one will store the global
      information which will amortize the cost for all other threads.
      
      A similar fix has been applied to windows to be uniform across our
      implementations, but looking at the code on Windows no deadlock was
      possible. This is purely just a consistency update for Windows and in
      theory a slightly leaner implementation.
      
      Closes #59020
      cb57484d
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59686 - crlf0710:disable_gnux32_stackprobe, r=luqmana · 31c2f5d2
      Mazdak Farrokhzad authored
      Temporarily disable stack probing for gnux32.
      31c2f5d2
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59685 - lzutao:patch-1, r=GuillaumeGomez · 4954cae2
      Mazdak Farrokhzad authored
      Add description for -Os and -Oz in rustc.1
      4954cae2
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59671 - matklad:lexer, r=eddyb · c18c1945
      Mazdak Farrokhzad authored
      Make some of lexer's API private
      
      Lexer is a `pub` type, so it feels wrong that its fields are just pub (I guess it wasn't exported initially), so let's minimize visibility.
      
      Context: I am looking into extracting rust-lexer into a library, which can be shared by rust-analyzer and rustc. I hope that a simple interface like `fn next_token(src: &str) -> (TokenKind, usize)` would work, but to try this out I need to understand what is the current API of the lexer.
      c18c1945
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59639 - cuviper:ignore-uninhabited, r=eddyb · 05c31baf
      Mazdak Farrokhzad authored
      Never return uninhabited values at all
      
      Functions with uninhabited return values are already marked `noreturn`,
      but we were still generating return instructions for this. When running
      with `-C passes=lint`, LLVM prints:
      
          Unusual: Return statement in function with noreturn attribute
      
      The LLVM manual makes a stronger statement about `noreturn` though:
      
      > This produces undefined behavior at runtime if the function ever does
      dynamically return.
      
      We now emit an `abort` anywhere that would have tried to return an
      uninhabited value.
      
      Fixes #48227
      cc #7463 #48229
      
      r? @eddyb
      05c31baf
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59596 - LukasKalbertodt:fix-range-fmt, r=Kimundi · 56328a59
      Mazdak Farrokhzad authored
      Forward formatter settings to bounds of `Range<T>` in `fmt::Debug` impl
      
      Before this change, formatter settings were lost when printing a `Range`. For example, printing a `Range<f32>` with `{:.2?}` would not apply the precision modifier when printing the floats. Now the `Debug` impls look a bit more verbose, but modifier are not lost.
      
      ---
      
      I assume the exact output of `Debug` impls in `std` cannot be relied on by users and thus can change, right?
      56328a59
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59556 - RalfJung:stdsimd, r=gnzlbg · 9f8f8910
      Mazdak Farrokhzad authored
      update stdsimd
      
      Cc @gnzlbg
      9f8f8910
    • Mazdak Farrokhzad's avatar
      2074c968
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59470 - czipperz:document-fs-file-close, r=dtolnay · 886456de
      Mazdak Farrokhzad authored
      Document std::fs::File close behavior ignoring errors
      
      Resolves #52685
      886456de
    • bors's avatar
      Auto merge of #59619 - alexcrichton:wasi-fs, r=fitzgen · 2d065712
      bors authored
      wasi: Implement more of the standard library
      
      This commit fills out more of the `wasm32-unknown-wasi` target's standard library, notably the `std::fs` module and all of its internals. A few tweaks were made along the way to non-`fs` modules, but the last commit contains the bulk of the work which is to wire up all APIs to their equivalent on WASI targets instead of unconditionally returning "unsupported". After this some basic filesystem operations and such should all be working in WASI!
      2d065712
    • Aleksey Kladov's avatar
      cleanup shebang handling in the lexer · fdb87528
      Aleksey Kladov authored
      fdb87528
    • Konrad Borowski's avatar
      a37c33b9
    • bors's avatar
      Auto merge of #59517 - Zoxc:new-queries, r=oli-obk · e43f99ce
      bors authored
      Move query definitions over to the proc macro
      
      r? @oli-obk
      e43f99ce
    • CrLF0710's avatar
      Disable stack probing for gnux32. · 42d652ec
      CrLF0710 authored
      42d652ec
    • bors's avatar
      Auto merge of #59089 - petrhosek:llvm-unwind, r=petrhosek · f717b58d
      bors authored
      Support using LLVM's libunwind as the unwinder implementation
      
      This avoids the dependency on host libraries such as libgcc_s which
      may be undesirable in some deployment environments where these aren't
      available.
      f717b58d
    • lzutao's avatar
      Add description for -Os and -Oz in rustc.1 · 4c9c2cf1
      lzutao authored
      4c9c2cf1
    • Chris Gregory's avatar
      a969d409
    • bors's avatar
      Auto merge of #59684 - Centril:rollup-n7pnare, r=Centril · a5dfdc58
      bors authored
      Rollup of 6 pull requests
      
      Successful merges:
      
       - #59316 (Internal lints take 2)
       - #59663 (Be more direct about borrow contract)
       - #59664 (Updated the documentation of spin_loop and spin_loop_hint)
       - #59666 (Updated the environment description in rustc.)
       - #59669 (Reduce repetition in librustc(_lint) wrt. impl LintPass by using macros)
       - #59677 (rustfix coverage: Skip UI tests with non-json error-format)
      
      Failed merges:
      
      r? @ghost
      a5dfdc58
  3. 03 Apr, 2019 9 commits
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59677 - phansch:rustfix_coverage_handle_other_error_formats, r=oli-obk · 231bd482
      Mazdak Farrokhzad authored
      rustfix coverage: Skip UI tests with non-json error-format
      
      When using the `rustfix-coverage` flag, some tests currently fail
      because they define a different error-format than `json`.
      
      The current implementation crashes when encountering those tests. Since
      we don't care about non-json test output when collecting the coverage
      data, we handle those tests by returning an empty `Vec` instead.
      
      r? @oli-obk
      231bd482
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59669 - Centril:lint-pass-macro, r=oli-obk · eb3215e5
      Mazdak Farrokhzad authored
      Reduce repetition in librustc(_lint) wrt. impl LintPass by using macros
      
      r? @oli-obk
      cc @Zoxc
      eb3215e5
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59666 - DevQps:update-rustc-environment-descriptions, r=GuillaumeGomez · c87cce6f
      Mazdak Farrokhzad authored
      Updated the environment description in rustc.
      
      # Description
      
      - Updated the "environment" description in the `rustc` man pages
      
      The old wording suggested that all the mentioned flags influenced the output of the compiler,
      where this was not the case.
      
      closes #59504
      c87cce6f
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59664 - DevQps:improve-yield-spinlock-docs, r=alexcrichton · b4686ca9
      Mazdak Farrokhzad authored
      Updated the documentation of spin_loop and spin_loop_hint
      
      # Description
      
      - Updated the description of `core::hints::spin_loop`
      - Updated the description of `core::async::spin_loop_hint`
      
      Both documentation is rewritten to better reflect when one should prefer using a busy-wait spin-loop (and the `spin_loop` and `spin_loop_hint` functions) over `yield_now`. It also dives a little bit deeper on what the function actually does.
      
      closes #55418
      b4686ca9
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59663 - matklad:borrow, r=dtolnay · b78cbe6d
      Mazdak Farrokhzad authored
      Be more direct about borrow contract
      
      I always was confused by the difference between Borrow and AsRef, despite the fact that I've read all available docs at least a dozen of times.
      
      I finally grokked the difference between the two when I realized the Borrow invariant:
      
      > If you implement Borrow, you **must** make sure that Eq, Ord and Hash implementations are equivalent for borrowed and owned data
      
      My problem was that this invariant is not stated explicitly in documentation, and instead some  vague and philosophical notions are used.
      
      So I suggest to mention the requirements of `Borrow` very explicitly: instead of "use Borrow when X and use AsRef when Y", let's phrase this as `Borrow` differs from `AsRef` in `W`, so that's why `Borrow` is for `X` and `AsRef` is for `Y`.
      
      Note that this change could be seen as tightening contract of the Borrow. Let's say Alice has written the following code:
      
      ```rust
      #[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
      struct Person {
          first_name: String,
          last_name: String,
      }
      
      impl Borrow<str> for Person {
            fn borrow(&self) -> &str { self.first_name.as_str() }
      }
      ```
      
      Now Bob uses this `Person` struct, puts it into `HashMap` and tries to look it up using `&str` for the first name. Bob's code naturally fails.
      
      The question is, who is to blame: Alice, who has written the impl, or Bob, who uses the HashMap. If I read the current docs literally, I would say that `Bob` is to blame: `Eq` and `Hash` bounds appear on HashMap, so it is the HashMap which requires that they are consistent. By using a type for which the `Borrow` impl does not yield well-behaved `Eq`, Bob is violating contract of HashMap.
      
      If, as this PR proposes, we unconditionally require that Eq & friends for borrow should be valid, then the blame shifts to Alice, which I think is more reasonable.
      
      closes https://github.com/rust-lang/rust/issues/44868
      b78cbe6d
    • Mazdak Farrokhzad's avatar
      Rollup merge of #59316 - flip1995:internal_lints_take_2, r=oli-obk · dcccab56
      Mazdak Farrokhzad authored
      Internal lints take 2
      
      cc #58701
      cc #49509
      
      TODO: Add `#![warn(internal)]` to crates (and fix violations)
      
      Crates depending on `rustc_data_structures`
      
      - [x] librustc_resolve
      - [x] librustc_driver
      - [x] librustc_passes
      - [x] librustc_metadata
      - [x] librustc_interface
      - [x] librustc_save_analysis
      - [x] librustc_lint
      - [x] librustc
      - [x] librustc_incremental
      - [x] librustc_codegen_utils
      - [x] libarena
      - [x] librustc_target
      - [x] librustc_allocator
      - [x] librustc_privacy
      - [x] librustc_traits
      - [x] librustc_borrowck
      - [x] libsyntax
      - [x] librustc_codegen_ssa
      - [x] libsyntax_ext
      - [x] librustc_errors
      - [x] librustc_mir
      - [x] libsyntax_pos
      - [x] librustc_typeck
      
      Crates with `feature(rustc_private)`
      Excluding crates, which are already in the list above. Also excluding tools and tests.
      
      - [ ] ~~libstd~~
      - [x] libfmt_macros
      - [x] librustdoc
      
      r? @oli-obk
      dcccab56
    • bors's avatar
      Auto merge of #59672 - o01eg:fix-59661, r=oli-obk · 314a79cd
      bors authored
      Revert rust-lld place changes
      
      Fixes #59661.
      
      Instead of https://github.com/rust-lang/rust/pull/59668 it reverts only failed part.
      314a79cd
    • Josh Stone's avatar
      Never return uninhabited values at all · c2e0d7f1
      Josh Stone authored
      Functions with uninhabited return values are already marked `noreturn`,
      but we were still generating return instructions for this. When running
      with `-C passes=lint`, LLVM prints:
      
          Unusual: Return statement in function with noreturn attribute
      
      The LLVM manual makes a stronger statement about `noreturn` though:
      
      > This produces undefined behavior at runtime if the function ever does
      dynamically return.
      
      We now emit an `abort` anywhere that would have tried to return an
      uninhabited value.
      c2e0d7f1
    • Mazdak Farrokhzad's avatar