1. 04 Apr, 2019 23 commits
  2. 03 Apr, 2019 17 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
    • Philipp Hansch's avatar
      rustfix coverage: Skip UI tests with non-json error-format · da99f467
      Philipp Hansch authored
      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.
      da99f467
    • Petr Hosek's avatar
      Support using LLVM's libunwind as the unwinder implementation · 86d16784
      Petr Hosek authored
      This avoids the dependency on host libraries such as libgcc_s which
      may be undesirable in some deployment environments where these aren't
      available.
      86d16784
    • flip1995's avatar
      c81ce069
    • flip1995's avatar
      Deny internal lints on two more crates · 076abfa0
      flip1995 authored
      - libfmt_macros
      - librustdoc
      076abfa0
    • flip1995's avatar
      Add trait_object_dummy_self to CommonTypes · 51a792d0
      flip1995 authored
      51a792d0
    • flip1995's avatar
      dd7483c7
    • flip1995's avatar
      Deny internal lints on librustc_typeck · 4d2a3bb1
      flip1995 authored
      4d2a3bb1
    • flip1995's avatar
      Deny internal lints on librustc_mir · e4b87f5e
      flip1995 authored
      e4b87f5e