1. 16 6月, 2020 4 次提交
    • B
      Auto merge of #73285 - Mark-Simulacrum:clippy-fail, r=RalfJung,oli-obk · 435f97ce
      bors 提交于
      Avoid prematurely recording toolstates
      
      When we're running with dry_run enabled (i.e. all builds do this initially), we're
      guaranteed to save of a toolstate of TestFail for tools that aren't tested. In practice,
      we do test tools as well, so for those tools we would initially record them as being
      TestPass, and then later on re-record the correct state after actually testing them.
      However, this would not work well if the build failed for whatever reason (e.g. panicking
      in bootstrap, or as was the case in #73097, clippy failing to test successfully), we would
      just go on believing that things passed when they in practice did not.
      
      This commit also adjusts saving toolstate to never record clippy explicitly (otherwise, it
      would be recorded when building it); eventually that'll likely move to other tools as well
      but not yet. This is deemed simpler than checking everywhere we generically save
      toolstate.
      
      We also move clippy out of the "toolstate" no-fail-fast build into a separate x.py
      invocation; this should no longer be technically required but provides the nice state of
      letting us check toolstate for all tools and only then check clippy (giving full results
      on every build).
      
      r? @oli-obk
      
      Supercedes #73275, also fixes #73274
      435f97ce
    • B
      Auto merge of #72962 - lcnr:ObligationCause-lrc, r=ecstatic-morse · c8a9c340
      bors 提交于
      store `ObligationCause` on the heap
      
      Stores `ObligationCause` on the heap using an `Rc`.
      
      This PR trades off some transient memory allocations to reduce the size of–and thus the number of instructions required to memcpy–a few widely used data structures in trait solving.
      c8a9c340
    • M
      Disable clippy tests · 399bf383
      Mark Rousskov 提交于
      399bf383
    • M
      Avoid prematurely recording toolstates · 51e11e31
      Mark Rousskov 提交于
      When we're running with dry_run enabled (i.e. all builds do this initially), we're
      guaranteed to save of a toolstate of TestFail for tools that aren't tested. In practice,
      we do test tools as well, so for those tools we would initially record them as being
      TestPass, and then later on re-record the correct state after actually testing them.
      However, this would not work well if the build failed for whatever reason (e.g. panicking
      in bootstrap, or as was the case in 73097, clippy failing to test successfully), we would
      just go on believing that things passed when they in practice did not.
      
      This commit also adjusts saving toolstate to never record clippy explicitly (otherwise, it
      would be recorded when building it); eventually that'll likely move to other tools as well
      but not yet. This is deemed simpler than checking everywhere we generically save
      toolstate.
      
      We also move clippy out of the "toolstate" no-fail-fast build into a separate x.py
      invocation; this should no longer be technically required but provides the nice state of
      letting us check toolstate for all tools and only then check clippy (giving full results
      on every build).
      51e11e31
  2. 15 6月, 2020 36 次提交
    • B
      Auto merge of #72357 - ortem:new-dbg-pretty-printers, r=pnkfelix · f315c35a
      bors 提交于
      Implement new gdb/lldb pretty-printers
      
      Reopened #60826
      
      This PR replaces current gdb and lldb pretty-printers with new ones that were originally written for [IntelliJ Rust](https://github.com/intellij-rust/intellij-rust/tree/master/prettyPrinters).
      
      The current state of lldb pretty-printers is poor, because [they don't use synthetic children](https://github.com/rust-lang/rust/issues/55586#issuecomment-436610063). When I started to reimplement lldb pretty-printers with synthetic children support, I've found current version strange and hard to support. I think `debugger_pretty_printers_common.py` is overkill, so I got rid of it.
      
      The new pretty-printers have to support all types supported by current pretty-printers, and also support `Rc`, `Arc`, `Cell`, `Ref`, `RefCell`, `RefMut`, `HashMap`, `HashSet`.
      
      Fixes #56252
      f315c35a
    • B
      Auto merge of #73369 - RalfJung:rollup-hl8g9zf, r=RalfJung · ff4a2533
      bors 提交于
      Rollup of 10 pull requests
      
      Successful merges:
      
       - #72707 (Use min_specialization in the remaining rustc crates)
       - #72740 (On recursive ADT, provide indirection structured suggestion)
       - #72879 (Miri: avoid tracking current location three times)
       - #72938 (Stabilize Option::zip)
       - #73086 (Rename "cyclone" to "apple-a7" per changes in upstream LLVM)
       - #73104 (Example about explicit mutex dropping)
       - #73139 (Add methods to go from a nul-terminated Vec<u8> to a CString)
       - #73296 (Remove vestigial CI job msvc-aux.)
       - #73304 (Revert heterogeneous SocketAddr PartialEq impls)
       - #73331 (extend network support for HermitCore)
      
      Failed merges:
      
      r? @ghost
      ff4a2533
    • R
      Rollup merge of #73331 - hermitcore:listen, r=kennytm · 54bd077c
      Ralf Jung 提交于
      extend network support for HermitCore
      
      - add basic support of TcpListerner for HermitCore
      - revise TcpStream to support peer_addr
      54bd077c
    • R
      Rollup merge of #73304 - dtolnay:socketeq, r=Mark-Simulacrum · 202499fb
      Ralf Jung 提交于
      Revert heterogeneous SocketAddr PartialEq impls
      
      Originally added in #72239.
      
      These lead to inference regressions (mostly in tests) in code that looks like:
      
      ```rust
      let socket = SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080);
      assert_eq!(socket, "127.0.0.1:8080".parse().unwrap());
      ```
      
      That compiles as of stable 1.44.0 but fails in beta with:
      
      ```console
      error[E0284]: type annotations needed
       --> src/main.rs:3:41
        |
      3 |     assert_eq!(socket, "127.0.0.1:8080".parse().unwrap());
        |                                         ^^^^^ cannot infer type for type parameter `F` declared on the associated function `parse`
        |
        = note: cannot satisfy `<_ as std::str::FromStr>::Err == _`
      help: consider specifying the type argument in the method call
        |
      3 |     assert_eq!(socket, "127.0.0.1:8080".parse::<F>().unwrap());
        |
      ```
      
      Closes #73242.
      202499fb
    • R
      Rollup merge of #73296 - ehuss:remove-msvc-aux, r=Mark-Simulacrum · fb75d4a7
      Ralf Jung 提交于
      Remove vestigial CI job msvc-aux.
      
      This CI job isn't really doing anything, so it seems prudent to remove it.
      
      For some history:
      * This was introduced in #48809 when the msvc job was split in two to keep it under 2 hours (oh the good old days). At the time, this check-aux job did a bunch of things:
          * tidy
          * src/test/pretty
          * src/test/run-pass/pretty
          * src/test/run-fail/pretty
          * src/test/run-pass-valgrind/pretty
          * src/test/run-pass-fulldeps/pretty
          * src/test/run-fail-fulldeps/pretty
      * Tidy was removed in #60777.
      * run-pass and run-pass-fulldeps moved to UI in #63029
      * src/test/pretty removed in #58140
      * src/test/run-fail moved to UI in #71185
      * run-fail-fulldeps removed in #51285
      
      Over time through attrition, the job was left with one lonely thing: `src/test/run-pass-valgrind/pretty`. And of course, this wasn't actually running the "pretty" tests. The normal `run-pass-valgrind` tests ran, and then when it tried to run in "pretty" mode, all the tests were ignored because compiletest thought nothing had changed (apparently compiletest isn't fingerprinting the mode?  Needs more investigation…). `run-pass-valgrind` is already being run as part of `x86_64-msvc-1`, so there's no need to run it here.
      
      I've taken the liberty of removing `src/test/run-pass-valgrind/pretty` as a distinct test. I'm guessing from the other PR's that the pretty tests should now live in `src/test/pretty`, and that the team has moved away from doing pretty tests on other parts of the `src/test` tree.
      fb75d4a7
    • R
      Rollup merge of #73139 - poliorcetics:cstring-from-vec-with-nul, r=dtolnay · ec6fe42d
      Ralf Jung 提交于
      Add methods to go from a nul-terminated Vec<u8> to a CString
      
      Fixes #73100.
      
      Doc tests have been written and the documentation on the error type
      updated too.
      
      I used `#[stable(feature = "cstring_from_vec_with_nul", since = "1.46.0")]` but I don't know if the version is correct.
      ec6fe42d
    • R
      Rollup merge of #73104 - poliorcetics:explicit-mutex-drop-example, r=dtolnay · 7c8b9413
      Ralf Jung 提交于
      Example about explicit mutex dropping
      
      Fixes #67457.
      
      Following the remarks made in #73074, I added an example on the main `Mutex` type, with a situation where there is mutable data and a computation result.
      
      In my testing it is effectively needed to explicitly drop the lock, else it deadlocks.
      
      r? @dtolnay because you were the one to review the previous PR.
      7c8b9413
    • R
      Rollup merge of #73086 - trevyn:apple-a7, r=nikic · 34409571
      Ralf Jung 提交于
      Rename "cyclone" to "apple-a7" per changes in upstream LLVM
      
      It looks like they intended to keep "cyclone" as a legacy option, but removed it from the list of subtarget features. This created a flood of warnings when targeting aarch64-apple-ios, and probably also created incorrectly optimized artifacts.
      
      See:
      https://reviews.llvm.org/D70779
      https://reviews.llvm.org/D70779#C1703593NL568
      
      LLVM 10 merged into master at:
      https://github.com/rust-lang/rust/pull/67759
      34409571
    • R
      Rollup merge of #72938 - lzutao:stabilize_option_zip, r=dtolnay · 89eb74dc
      Ralf Jung 提交于
      Stabilize Option::zip
      
      This PR stabilizes the following API:
      
      ```rust
      impl<T> Option<T> {
          pub fn zip<U>(self, other: Option<U>) -> Option<(T, U)>;
      }
      ```
      
      This API has real world usage as seen in <https://grep.app/search?q=-%3E%20Option%3C%5C%28T%2C%5Cs%3FU%5C%29%3E&regexp=true&filter[lang][0]=Rust>.
      
      The `zip_with` method is left unstably as this API is kinda niche
      and it hasn't received much usage in Rust repositories on GitHub.
      
      cc #70086
      89eb74dc
    • R
      Rollup merge of #72879 - RalfJung:miri-tctx-at, r=oli-obk · f9c8a675
      Ralf Jung 提交于
      Miri: avoid tracking current location three times
      
      Miri tracks the current instruction to execute in the call stack, but it also additionally has two `TyCtxtAt` that carry a `Span` that also tracks the current instruction. That is quite silly, so this PR uses `TyCtxt` instead, and then uses a method for computing the current span when a `TyCtxtAt` is needed. Having less redundant (semi-)global state seems like a good improvement to me. :D
      
      To keep the ConstProp errors the same, I had to add the option to `error_to_const_error` to overwrite the span. Also for some reason this changes cycle errors a bit -- not sure if we are now better or worse as giving those queries the right span. (It is unfortunately quite easy to accidentally use `DUMMY_SP` by calling the query on a `TyCtxt` instead of a `TyCtxtAt`.)
      
      r? @oli-obk @EddyB
      f9c8a675
    • R
      Rollup merge of #72740 - estebank:recursive-indirection, r=matthewjasper · d97e8ca3
      Ralf Jung 提交于
      On recursive ADT, provide indirection structured suggestion
      d97e8ca3
    • R
      Rollup merge of #72707 - matthewjasper:rustc_min_spec, r=oli-obk · eef9356e
      Ralf Jung 提交于
      Use min_specialization in the remaining rustc crates
      
      This adds a lot of `transmute` calls to replace the unsound uses of specialization.
      It's ugly, but at least it's honest about what's going on.
      
      cc #71420, @RalfJung
      eef9356e
    • B
      Auto merge of #73367 - RalfJung:rollup-4ewvk9b, r=RalfJung · d4ecf31e
      bors 提交于
      Rollup of 10 pull requests
      
      Successful merges:
      
       - #71824 (Check for live drops in constants after drop elaboration)
       - #72389 (Explain move errors that occur due to method calls involving `self`)
       - #72556 (Fix trait alias inherent impl resolution)
       - #72584 (Stabilize vec::Drain::as_slice)
       - #72598 (Display information about captured variable in `FnMut` error)
       - #73336 (Group `Pattern::strip_*` method together)
       - #73341 (_match.rs: fix module doc comment)
       - #73342 (Fix iterator copied() documentation example code)
       - #73351 (Update E0446.md)
       - #73353 (structural_match: non-structural-match ty closures)
      
      Failed merges:
      
      r? @ghost
      d4ecf31e
    • S
      remove obsolete , to pass the format check · 76f1581a
      Stefan Lankes 提交于
      76f1581a
    • R
      Rollup merge of #73353 - davidtwco:issue-73003-non-structural-match-ty-closures, r=varkor · bca9e90f
      Ralf Jung 提交于
      structural_match: non-structural-match ty closures
      
      Fixes #73003.
      
      This PR adds a `Closure` variant to `NonStructuralMatchTy` in `structural_match`, fixing an ICE which can occur when `impl_trait_in_bindings` is used with constants.
      bca9e90f
    • R
      Rollup merge of #73351 - gnodarse:patch-1, r=ecstatic-morse · 192e9bde
      Ralf Jung 提交于
      Update E0446.md
      
      The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself):
      https://github.com/rust-lang/rust/issues/30905
      https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
      192e9bde
    • R
      Rollup merge of #73342 - schteve:master, r=jonas-schievink · 1f3e4e6e
      Ralf Jung 提交于
      Fix iterator copied() documentation example code
      
      The documentation for copied() gives example code with variable v_cloned instead of v_copied. This seems like a copy/paste error from cloned() and it would be clearer to use v_copied.
      1f3e4e6e
    • R
      Rollup merge of #73341 - jonas-schievink:matchdoc, r=davidtwco · 35cfde14
      Ralf Jung 提交于
      _match.rs: fix module doc comment
      
      It was applied to a `use` item, not to the module
      35cfde14
    • R
      Rollup merge of #73336 - lzutao:pattern-group, r=sfackler · ec0cb574
      Ralf Jung 提交于
      Group `Pattern::strip_*` method together
      ec0cb574
    • R
      Rollup merge of #72598 - Aaron1011:feature/fnmut-capture-span, r=nikomatsakis · 5193c5d6
      Ralf Jung 提交于
      Display information about captured variable in `FnMut` error
      
      Fixes #69446
      
      When we encounter a region error involving an `FnMut` closure, we
      display a specialized error message. However, we currently do not
      tell the user which upvar was captured. This makes it difficult to
      determine the cause of the error, especially when the closure is large.
      
      This commit records marks constraints involving closure upvars
      with `ConstraintCategory::ClosureUpvar`. When we decide to 'blame'
      a `ConstraintCategory::Return`, we additionall store
      the captured upvar if we found a `ConstraintCategory::ClosureUpvar` in
      the path.
      
      When generating an error message, we point to relevant spans if we have
      closure upvar information available. We further customize the message if
      an `async` closure is being returned, to make it clear that the captured
      variable is being returned indirectly.
      5193c5d6
    • R
      Rollup merge of #72584 - CAD97:stabilize-58957, r=dtolnay · e6510bab
      Ralf Jung 提交于
      Stabilize vec::Drain::as_slice
      
      and add `AsRef<[T]> for Drain<'_, T>`.
      
      Tracking issue: #58957. Does not stabilize `slice::IterMut::as_slice` yet. cc @cuviper
      This PR proposes stabilizing just the `vec::Drain::as_slice` part of that tracking issue.
      
      My ultimate goal here: being able to use `for<T, I: Iterator<Item=T> + AsRef<[T]>> I` to refer to `vec::IntoIter`, `vec::Drain`, and eventually `array::IntoIter`, as an approximation of the set of by-value iterators that can be "previewed" as by-ref iterators. (Actually expressing that as a trait requires GAT.)
      e6510bab
    • R
      Rollup merge of #72556 - matthew-mcallister:trait-alias-inherent-impl, r=estebank · 3d41252f
      Ralf Jung 提交于
      Fix trait alias inherent impl resolution
      
      Fixes #60021 and fixes #72415.
      
      Obviously, the fix was very easy, but getting started with the testing and debugging rust compiler was an interesting experience. Now I can cross it off my bucket list!
      3d41252f
    • R
      Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis · 372cb9b6
      Ralf Jung 提交于
      Explain move errors that occur due to method calls involving `self`
      
      When calling a method that takes `self` (e.g. `vec.into_iter()`), the method receiver is moved out of. If the method receiver is used again, a move error will be emitted::
      
      ```rust
      fn main() {
          let a = vec![true];
          a.into_iter();
          a;
      }
      ```
      
      emits
      
      ```
      error[E0382]: use of moved value: `a`
       --> src/main.rs:4:5
        |
      2 |     let a = vec![true];
        |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
      3 |     a.into_iter();
        |     - value moved here
      4 |     a;
        |     ^ value used here after move
      ```
      
      However, the error message doesn't make it clear that the move is caused by the call to `into_iter`.
      
      This PR adds additional messages to move errors when the move is caused by using a value as the receiver of a `self` method::
      
      ```
      error[E0382]: use of moved value: `a`
         --> vec.rs:4:5
          |
      2   |     let a = vec![true];
          |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
      3   |     a.into_iter();
          |     ------------- value moved due to this method call
      4   |     a;
          |     ^ value used here after move
          |
      note: this function takes `self`, which moves the receiver
         --> /home/aaron/repos/rust/src/libcore/iter/traits/collect.rs:239:5
          |
      239 |     fn into_iter(self) -> Self::IntoIter;
      ```
      
      TODO:
      
      - [x] Add special handling for `FnOnce/FnMut/Fn` - we probably don't want to point at the unstable trait methods
      - [x] Consider adding additional context for operations (e.g. `Shr::shr`) when the call was generated using the operator syntax (e.g. `a >> b`)
      - [x] Consider pointing to the method parent (impl or trait block) in addition to the method itself.
      372cb9b6
    • R
      Rollup merge of #71824 - ecstatic-morse:const-check-post-drop-elab, r=oli-obk · 5c61a8dc
      Ralf Jung 提交于
      Check for live drops in constants after drop elaboration
      
      Resolves #66753.
      
      This PR splits the MIR "optimization" pass series in two and introduces a query–`mir_drops_elaborated_and_const_checked`–that holds the result of the `post_borrowck_cleanup` analyses and checks for live drops. This query is invoked in `rustc_interface` for all items requiring const-checking, which means we now do `post_borrowck_cleanup` for items even if they are unused in the crate.
      
      As a result, we are now more precise about when drops are live. This is because drop elaboration can e.g. eliminate drops of a local when all its fields are moved from. This does not mean we are doing value-based analysis on move paths, however; Storing a `Some(CustomDropImpl)` into a field of a local will still set the qualifs for that entire local.
      
      r? @oli-obk
      5c61a8dc
    • S
      add comment about the usage of Arc · a8e3746e
      Stefan Lankes 提交于
      a8e3746e
    • S
      use Ipv6Addr::from to build the IPv6 address · 6c983a73
      Stefan Lankes 提交于
      6c983a73
    • S
      Revert "simplify conversion to IpAddr::V6" · 9c9f21fb
      Stefan Lankes 提交于
      This reverts commit d221ffc6.
      9c9f21fb
    • S
      Revert "changes to pass the format check" · aa53a037
      Stefan Lankes 提交于
      This reverts commit 9d596b50.
      aa53a037
    • S
      remove obsolete line · 810ba395
      Stefan Lankes 提交于
      810ba395
    • S
      changes to pass the format check · 9d596b50
      Stefan Lankes 提交于
      9d596b50
    • B
      Auto merge of #72080 - matthewjasper:uniform-impl-trait, r=nikomatsakis · ce6d3a73
      bors 提交于
      Clean up type alias impl trait implementation
      
      - Removes special case for top-level impl trait
      - Removes associated opaque types
      - Forbid lifetime elision in let position impl trait. This is consistent with the behavior for inferred types.
      - Handle lifetimes in type alias impl trait more uniformly with other parameters
      
      cc #69323
      cc #63063
      Closes #57188
      Closes #62988
      Closes #69136
      Closes #73061
      ce6d3a73
    • S
      simplify conversion to IpAddr::V6 · d221ffc6
      Stefan Lankes 提交于
      d221ffc6
    • A
    • A
      Add a new error type for the new method · 685f0661
      Alexis Bourget 提交于
      685f0661
    • G
      Update E0446.md · 8361ee5b
      gnodarse 提交于
      The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself):
      https://github.com/rust-lang/rust/issues/30905
      https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958
      8361ee5b
    • D
      structural_match: non-structural-match ty closures · 79e08bbc
      David Wood 提交于
      This commit adds a `Closure` variant to `NonStructuralMatchTy` in
      `structural_match`, fixing an ICE which can occur when
      `impl_trait_in_bindings` is used with constants.
      Signed-off-by: NDavid Wood <david@davidtw.co>
      79e08bbc