1. 23 8月, 2021 5 次提交
    • G
      Rollup merge of #88211 - petrochenkov:withhilo, r=jyn514 · 167ae26a
      Guillaume Gomez 提交于
      cleanup: `Span::new` -> `Span::with_lo`
      
      Extracted from https://github.com/rust-lang/rust/pull/84373 as suggested in https://github.com/rust-lang/rust/pull/84373#issuecomment-857773867.
      It turned out less useful then I expected, but anyway.
      r? `@cjgillot`
      `@bors` rollup
      167ae26a
    • G
      Rollup merge of #88164 - durin42:llvm-14-san-opts, r=nikic · 2638d27b
      Guillaume Gomez 提交于
      PassWrapper: adapt for LLVM 14 changes
      
      These API changes appear to have all taken place in
      https://reviews.llvm.org/D105007, which moved HWAddressSanitizerPass and
      AddressSanitizerPass to only accept their options type as a ctor
      argument instead of the sequence of bools etc. This required a couple of
      parameter additions, which I made match the default prior to the
      mentioned upstream LLVM change.
      
      This patch restores rustc to building (though not quite passing all
      tests, I've mailed other patches for those issues) against LLVM HEAD.
      2638d27b
    • G
      Rollup merge of #88077 - kit-981:feature/fix-minimum-os-version-in-header, r=petrochenkov · c6da5b08
      Guillaume Gomez 提交于
      Generate an iOS LLVM target with a specific version
      
      This commit adds the `LC_VERSION_MIN_IPHONEOS` load command to the Mach-O header generated for `aarch64-apple-ios` binaries. The operating system will look for this load command to determine the minimum supported operating system version and will not allow the binary to run if it's absent. This logic already exists for the simulator toolchain.
      
      I've been using `otool` from a [cctools](https://github.com/tpoechtrager/cctools-port) toolchain to parse the header and validate that this change adds the required load command.
      
      This change appears to be enough to build Rust binaries that can run on a jailbroken iPhone.
      c6da5b08
    • G
      Rollup merge of #87166 - de-vri-es:show-discriminant-before-overflow, r=jackh726 · 3b1e7b1f
      Guillaume Gomez 提交于
      Show discriminant before overflow in diagnostic for duplicate values.
      
      This PR adds the value before overflow for explicit discriminant values in the error for duplicate discriminant values.
      I found it rather confusing to see only the overflowed value.
      
      It only does this for literals, since overflows in const evaluated arithmetic are already a hard error.
      
      This is my first PR to the compiler, so please let me know if the implementation can be improved :)
      
      Before:
      ![image](https://user-images.githubusercontent.com/786213/125850097-bf5fb7e0-d800-4386-a738-c30f41822964.png)
      
      After:
      ![image](https://user-images.githubusercontent.com/786213/125850120-e2bb765d-ad86-4888-a6cb-dec34fba3fea.png)
      3b1e7b1f
    • G
      Rollup merge of #86747 - FabianWolff:issue-86653, r=GuillaumeGomez · 2627db6a
      Guillaume Gomez 提交于
      Improve wording of the `drop_bounds` lint
      
      This PR addresses #86653. The issue is sort of a false positive of the `drop_bounds` lint, but I would argue that the best solution for #86653 is simply a rewording of the warning message and lint description, because even if the lint is _technically_ wrong, it still forces the programmer to think about what they are doing, and they can always use `#[allow(drop_bounds)]` if they think that they really need the `Drop` bound.
      
      There are two issues with the current warning message and lint description:
      - First, it says that `Drop` bounds are "useless", which is technically incorrect because they actually do have the effect of allowing you e.g. to call methods that also have a `Drop` bound on their generic arguments for some reason. I have changed the wording to emphasize not that the bound is "useless", but that it is most likely not what was intended.
      - Second, it claims that `std::mem::needs_drop` detects whether a type has a destructor. But I think this is also technically wrong: The `Drop` bound says whether the type has a destructor or not, whereas `std::mem::needs_drop` also takes nested types with destructors into account, even if the top-level type does not itself have one (although I'm not 100% sure about the exact terminology here, i.e. whether the "drop glue" of the top-level type counts as a destructor or not).
      
      cc `@jonhoo,` does this solve the issue for you?
      
      r? `@GuillaumeGomez`
      2627db6a
  2. 22 8月, 2021 21 次提交
    • B
      Auto merge of #88163 - camsteffen:collapsible-match-fix, r=Manishearth · 7481e6d1
      bors 提交于
      Fix clippy::collapsible_match with let expressions
      
      This fixes rust-lang/rust-clippy#7575 which is a regression from #80357. I am fixing the bug here instead of in the clippy repo (if that's okay) because a) the regression has not been synced yet and b) I would like to land the fix on nightly asap.
      
      The fix is basically to re-generalize `match` and `if let` for the lint implementation (they were split because `if let` no longer desugars to `match` in the HIR).
      
      Also fixes rust-lang/rust-clippy#7586 and fixes rust-lang/rust-clippy#7591
      cc `@rust-lang/clippy`
      `@xFrednet` do you want to review this?
      7481e6d1
    • B
      Auto merge of #88139 - lcnr:marker-trait-attr, r=nikomatsakis · 1eb187c1
      bors 提交于
      marker_traits: require `EvaluatedToOk` during winnowing
      
      closes #84955, while it doesn't really fix it in a way that makes me happy it should prevent the issue for now and this
      test can't be reproduced anyways, so it doesn't make much sense to keep it open.
      
      fixes #84917 as only one of the impls depends on regions, so we now drop the ambiguous one instead of the correct one.
      
      cc https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/winnowing.20soundly/near/247899832
      
      r? `@nikomatsakis`
      1eb187c1
    • B
      Auto merge of #88122 - Seppel3210:master, r=dtolnay · 80dad647
      bors 提交于
      Fix example in `Extend<(A, B)>` impl
      
      After looking over the examples in my last PR (#85835) on doc.rust-lang.org/nightly I realized that the example didn't actually show what I wanted it to show 😅
      So here's the better example
      80dad647
    • B
      Auto merge of #85166 - mbhall88:file-prefix, r=dtolnay · 2ad56d5c
      bors 提交于
      add file_prefix method to std::path
      
      This is an initial implementation of `std::path::Path::file_prefix`. It is effectively a "left" variant of the existing [`file_stem`](https://doc.rust-lang.org/std/path/struct.Path.html#method.file_stem) method. An illustration of the difference is
      
      ```rust
      use std::path::Path;
      
      let path = Path::new("foo.tar.gz");
      assert_eq!(path.file_stem(), Some("foo.tar"));
      assert_eq!(path.file_prefix(), Some("foo"));
      ```
      
      In my own development, I generally find I almost always want the prefix, rather than the stem, so I thought it might be best to suggest it's addition to libstd.
      
      Of course, as this is my first contribution, I expect there is probably more work that needs to be done. Additionally, if the libstd team feel this isn't appropriate then so be it.
      
      There has been some [discussion about this on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/file_lstem/near/238076313) and a user there suggested I open a PR to see whether someone in the libstd team thinks it is worth pursuing.
      2ad56d5c
    • B
      Auto merge of #88217 - jackh726:rollup-3k74o2m, r=jackh726 · 50731df2
      bors 提交于
      Rollup of 13 pull requests
      
      Successful merges:
      
       - #87604 (CI: Verify commits in beta & stable are in upstream branches.)
       - #88057 (Update RELEASES to clarify attribute macro values.)
       - #88072 (Allow the iOS toolchain to be built on Linux)
       - #88170 (Update release note for 1.55.0.)
       - #88172 (Test that type alias impl trait happens in a submodule)
       - #88179 (Mailmap entry for myself)
       - #88182 (We meant to use a trait instead of lifetime here)
       - #88183 (test TAIT in different positions)
       - #88189 (Add TAIT struct test)
       - #88192 (Use of impl trait in an impl as the value for an associated type in a dyn)
       - #88194 (Test use of impl Trait in an impl as the value for an associated type in an impl trait)
       - #88197 (Test tait use in a fn type)
       - #88201 (Test that incomplete inference for TAITs fail)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      50731df2
    • J
      Rollup merge of #88201 - spastorino:tait-incomplete-inference-test, r=oli-obk · b9b53c8e
      Jack Huey 提交于
      Test that incomplete inference for TAITs fail
      
      r? `@oli-obk`
      
      Related to #86727
      b9b53c8e
    • J
      Rollup merge of #88197 - spastorino:tait-test-fn-type, r=oli-obk · 1d0d7c34
      Jack Huey 提交于
      Test tait use in a fn type
      
      r? `@oli-obk`
      
      I thought this was going to work but doesn't, quickly checked with Niko and he told me that we ruled this out for now. I'm not exactly sure why and how but here we have a test with a FIXME :)
      
      Related to #86727
      1d0d7c34
    • J
      Rollup merge of #88194 - spastorino:test-tait-assoc-impl-trait, r=oli-obk · 66b04c65
      Jack Huey 提交于
      Test use of impl Trait in an impl as the value for an associated type in an impl trait
      
      r? `@oli-obk`
      
      Related to #86727
      66b04c65
    • J
      Rollup merge of #88192 - spastorino:add-tait-test-for-assoc-dyn, r=oli-obk · d6492b13
      Jack Huey 提交于
      Use of impl trait in an impl as the value for an associated type in a dyn
      
      r? `@oli-obk`
      
      Related to #86727
      d6492b13
    • J
      Rollup merge of #88189 - spastorino:add-tait-struct-test, r=oli-obk · 73d97586
      Jack Huey 提交于
      Add TAIT struct test
      
      r? `@oli-obk`
      
      Related to #86727
      73d97586
    • J
      Rollup merge of #88183 - spastorino:add-tait-in-different-tuple-position, r=oli-obk · ae58c51f
      Jack Huey 提交于
      test TAIT in different positions
      
      r? `@oli-obk`
      
      Related to #86727
      ae58c51f
    • J
      Rollup merge of #88182 - spastorino:use-trait-in-tait-tests, r=oli-obk · 5be51f27
      Jack Huey 提交于
      We meant to use a trait instead of lifetime here
      
      r? `@oli-obk`
      
      Related to #86727
      5be51f27
    • J
      Rollup merge of #88179 - steffahn:mailmap, r=Mark-Simulacrum · 1a48b566
      Jack Huey 提交于
      Mailmap entry for myself
      1a48b566
    • J
      Rollup merge of #88172 - spastorino:tait-defining-use-submodule-test, r=oli-obk · 0689152b
      Jack Huey 提交于
      Test that type alias impl trait happens in a submodule
      
      r? `@oli-obk`
      
      Related to #86727
      0689152b
    • J
      Rollup merge of #88170 - nebkor:release-note-1.55, r=Mark-Simulacrum · 908b2ead
      Jack Huey 提交于
      Update release note for 1.55.0.
      
      Added a line about new formatting option, `{lib}`, for `cargo
      tree` (https://github.com/rust-lang/cargo/pull/9663).
      908b2ead
    • J
      Rollup merge of #88072 - kit-981:feature/build-ios-toolchain-on-linux, r=Mark-Simulacrum · 5ffff5cc
      Jack Huey 提交于
      Allow the iOS toolchain to be built on Linux
      
      The iOS toolchain can be built on Linux with minor changes. The compilation will invoke `xcrun` to find the path to the iPhone SDK but a fake `xcrun` executable can be used.
      
      ```
      #!/bin/sh
      echo "/path/to/sdk"
      ```
      
      The iOS toolchain can then be built and linked with rustup.
      
      ```
      $ ./x.py build --stage 2 --host x86_64-unknown-linux-gnu \
        	 --target aarch64-apple-ios
      $ rustup toolchain link stage1 build/x86_64-unknown-linux-gnu/stage1
      ```
      
      It's possible to take this toolchain and compile an iOS executable with it. This requires the ld64 linker and an iOS SDK. The ld64 linker can be taken from [cctools](https://github.com/tpoechtrager/cctools-port). A project's .cargo/config can then be edited to use the linker for this target.
      
      ```
      [target.aarch64-apple-ios]
      linker = "/path/to/cctools/bin/arm-apple-darwin-ld"
      rustflags = [
          "-C",
          """
      link-args=
          -F/path/to/sdk/System/Library/Frameworks
          -L/path/to/sdk/usr/lib
          -L/path/to/sdk/usr/lib/system/
          -adhoc_codesign
          """,
      ]
      ```
      5ffff5cc
    • J
      Rollup merge of #88057 - ehuss:releases-doc-macros, r=Mark-Simulacrum · 9e8b143e
      Jack Huey 提交于
      Update RELEASES to clarify attribute macro values.
      
      As noted in #87681, macros do not work with the `#[path]` attribute.  Since the places where macros *can* be used is very limited, I have changed this to just focus on `#[doc]` which is the only attribute where this is really useful.
      9e8b143e
    • J
      Rollup merge of #87604 - yaymukund:verify-backported-commits, r=Mark-Simulacrum · 8660e3d1
      Jack Huey 提交于
      CI: Verify commits in beta & stable are in upstream branches.
      
      Closes #74721
      
      I think this does the trick. https://github.com/rust-lang/rust/pull/87597 is an example of it failing as it should.
      8660e3d1
    • B
      Auto merge of #88075 - Xuanwo:vec_deque_retain, r=dtolnay · 9faa7141
      bors 提交于
      Optimize unnecessary check in VecDeque::retain
      
      This pr is highly inspired by https://github.com/rust-lang/rust/pull/88060 which shared the same idea: we can split the `for` loop into stages so that we can remove unnecessary checks like `del > 0`.
      
      ## Benchmarks
      
      Before
      
      ```rust
      test collections::vec_deque::tests::bench_retain_half_10000  ... bench:     290,125 ns/iter (+/- 8,717)
      test collections::vec_deque::tests::bench_retain_odd_10000   ... bench:     291,588 ns/iter (+/- 9,621)
      test collections::vec_deque::tests::bench_retain_whole_10000 ... bench:     287,426 ns/iter (+/- 9,009)
      ```
      
      After
      
      ```rust
      test collections::vec_deque::tests::bench_retain_half_10000  ... bench:     243,940 ns/iter (+/- 8,563)
      test collections::vec_deque::tests::bench_retain_odd_10000   ... bench:     242,768 ns/iter (+/- 3,903)
      test collections::vec_deque::tests::bench_retain_whole_10000 ... bench:     202,926 ns/iter (+/- 6,332)
      ```
      
      Based on the current benchmark, this PR will improve the perf of `VecDeque::retain` by around 16%. For special cases, the improvement will be up to 30%.
      Signed-off-by: NXuanwo <github@xuanwo.io>
      9faa7141
    • B
      Auto merge of #88135 - crlf0710:trait_upcasting_part_3, r=nikomatsakis · d3e2578c
      bors 提交于
      Trait upcasting coercion (part 3)
      
      By using separate candidates for each possible choice, this fixes type-checking issues in previous commits.
      
      r? `@nikomatsakis`
      d3e2578c
    • B
      Auto merge of #82776 - jyn514:extern-url-fallback, r=GuillaumeGomez · b1928aa3
      bors 提交于
      Give precedence to `html_root_url` over `--extern-html-root-url` by default, but add a way to opt-in to the previous behavior
      
      ## What is an HTML root url?
      
      It tells rustdoc where it should link when documentation for a crate is
      not available locally; for example, when a crate is a dependency of a
      crate documented with `cargo doc --no-deps`.
      
       ## What is the difference between `html_root_url` and `--extern-html-root-url`?
      
      Both of these tell rustdoc what the HTML root should be set to.
      `doc(html_root_url)` is set by the crate author, while
      `--extern-html-root-url` is set by the person documenting the crate.
      These are often different. For example, docs.rs uses
      `--extern-html-root-url https://docs.rs/crate-name/version` to ensure
      all crates have documentation, even if `html_root_url` is not set.
      Conversely, crates such as Rocket set `doc(html_root_url =
      "https://api.rocket.rs")`, because they prefer users to view the
      documentation on their own site.
      
      Crates also set `html_root_url` to ensure they have
      documentation when building locally when offline. This is unfortunate to
      require, because it's more work from the library author. It also makes
      it impossible to distinguish between crates that want to be viewed on a
      different site (e.g. Rocket) and crates that just want documentation to
      be visible offline at all (e.g. Tokio). I have authored a separate
      change to the API guidelines to no longer recommend doing this:
      rust-lang/api-guidelines#230.
      
       ## Why change the default?
      
      In the past, docs.rs has been the main user of `--extern-html-root-url`.
      However, it's useful for other projects as well. In particular, Cargo
      wants to pass it by default when running `--no-deps`
      (rust-lang/cargo#8296).
      
      Unfortunately, for these other use cases, the priority order is
      inverted. They want to give *precedence* to the URL the crate picks, and
      only fall back to the `--extern-html-root` if no `html_root_url` is
      present. That allows passing `--extern-html-root` unconditionally,
      without having to parse the source code to see what attributes are
      present.
      
      For docs.rs, however, we still want to keep the old behavior, so that
      all links on docs.rs stay on the site.
      b1928aa3
  3. 21 8月, 2021 14 次提交