1. 12 6月, 2021 18 次提交
    • B
      Auto merge of #82703 - iago-lito:nonzero_add_mul_pow, r=m-ou-se · da7ada58
      bors 提交于
      Implement nonzero arithmetics for NonZero types.
      
      Hello'all, this is my first PR to this repo.
      
      Non-zero natural numbers are stable by addition/multiplication/exponentiation, so it makes sense to make this arithmetic possible with `NonZeroU*`.
      
      The major pitfall is that overflowing underlying `u*` types possibly lead to underlying `0` values, which break the major invariant of `NonZeroU*`. To accommodate it, only `checked_` and `saturating_` operations are implemented.
      
      Other variants allowing wrapped results like `wrapping_` or `overflowing_` are ruled out *de facto*.
      
      `impl Add<u*> for NonZeroU* { .. }` was considered, as it panics on overflow which enforces the invariant, but it does not so in release mode. I considered forcing `NonZeroU*::add` to panic in release mode by deferring the check to `u*::checked_add`, but this is less explicit for the user than directly using `NonZeroU*::checked_add`.
      Following `@Lokathor's` advice on zulip, I have dropped the idea.
      
      `@poliorcetics` on Discord also suggested implementing `_sub` operations, but I'd postpone this to another PR if there is a need for it. My opinion is that it could be useful in some cases, but that it makes less sense because non-null natural numbers are not stable by subtraction even in theory, while the overflowing problem is just about technical implementation.
      
      One thing I don't like is that the type of the `other` arg differs in every implementation: `_add` methods accept any raw positive integer, `_mul` methods only accept non-zero values otherwise the invariant is also broken, and `_pow` only seems to accept `u32` for a reason I ignore but that seems consistent throughout `std`. Maybe there is a better way to harmonize this?
      
      This is it, Iope I haven't forgotten anything and I'll be happy to read your feedback.
      da7ada58
    • B
      Auto merge of #86215 - FabianWolff:unnameable-types, r=jackh726 · 60f1a2fc
      bors 提交于
      Do not suggest to add type annotations for unnameable types
      
      Consider this example:
      ```rust
      const A = || 42;
      
      struct S<T> { t: T }
      const B: _ = S { t: || 42 };
      ```
      This currently produces the following output:
      ```
      error: missing type for `const` item
       --> src/lib.rs:1:7
        |
      1 | const A = || 42;
        |       ^ help: provide a type for the item: `A: [closure@src/lib.rs:1:11: 1:16]`
      
      error[E0121]: the type placeholder `_` is not allowed within types on item signatures
       --> src/lib.rs:4:10
        |
      4 | const B: _ = S { t: || 42 };
        |          ^
        |          |
        |          not allowed in type signatures
        |          help: replace `_` with the correct type: `S<[closure@src/lib.rs:4:21: 4:26]>`
      
      error: aborting due to 2 previous errors
      ```
      However, these suggestions are obviously useless, because the suggested types cannot be written down. With my changes, the suggestion is replaced with a note, because there is no simple fix:
      ```
      error: missing type for `const` item
       --> test.rs:1:7
        |
      1 | const A = || 42;
        |       ^
        |
      note: however, the inferred type `[closure@test.rs:1:11: 1:16]` cannot be named
       --> test.rs:1:11
        |
      1 | const A = || 42;
        |           ^^^^^
      
      error[E0121]: the type placeholder `_` is not allowed within types on item signatures
       --> test.rs:4:10
        |
      4 | const B: _ = S { t: || 42 };
        |          ^ not allowed in type signatures
        |
      note: however, the inferred type `S<[closure@test.rs:4:21: 4:26]>` cannot be named
       --> test.rs:4:14
        |
      4 | const B: _ = S { t: || 42 };
        |              ^^^^^^^^^^^^^^
      
      error: aborting due to 2 previous errors
      ```
      60f1a2fc
    • I
      Stop relying on #[feature(try_trait)] in doctests. · 7afdaf2c
      Iago-lito 提交于
      7afdaf2c
    • B
      Auto merge of #86130 - BoxyUwU:abstract_const_as_cast, r=oli-obk · d59b80d5
      bors 提交于
      const_eval_checked: Support as casts in abstract consts
      d59b80d5
    • B
      Auto merge of #86180 - cjgillot:defmv, r=petrochenkov · 0f6ba39f
      bors 提交于
      Hash DefId in rustc_span.
      
      This is mostly just moving code around. Changes are simplifications of unneeded callbacks from rustc_span to rustc_middle.
      
      r? `@petrochenkov`
      0f6ba39f
    • B
      Auto merge of #86234 - Mark-Simulacrum:new-vers, r=Mark-Simulacrum · b84ffce1
      bors 提交于
      Bump to 1.55
      
      r? `@Mark-Simulacrum`
      b84ffce1
    • B
      Auto merge of #86226 - JohnTitor:rollup-5ubdolf, r=JohnTitor · 3198c523
      bors 提交于
      Rollup of 7 pull requests
      
      Successful merges:
      
       - #85800 (Fix some diagnostic issues with const_generics_defaults feature gate)
       - #85823 (Do not suggest ampmut if rhs is already mutable)
       - #86153 (Print dummy spans as `no-location`)
       - #86174 (Detect incorrect vtable alignment during const eval)
       - #86189 (Make `relate_type_and_mut` public)
       - #86205 (Run full const-generics test for issue-72293)
       - #86217 (Remove "generic type" in boxed.rs)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      3198c523
    • M
      Bump to 1.54 · 0dc44561
      Mark Rousskov 提交于
      0dc44561
    • F
      Suggest a FnPtr type if a FnDef type is found · 79dc9a76
      Fabian Wolff 提交于
      79dc9a76
    • Y
      Rollup merge of #86217 - fee1-dead:adjust-box-doc, r=m-ou-se · e13b53ea
      Yuki Okushi 提交于
      Remove "generic type" in boxed.rs
      
      r? ``@m-ou-se``
      e13b53ea
    • D
      Remove "generic type" in boxed.rs · 8f78660c
      Deadbeef 提交于
      8f78660c
    • Y
      Rollup merge of #86205 - JohnTitor:full-test-for-72293, r=oli-obk · 2b3884f6
      Yuki Okushi 提交于
      Run full const-generics test for issue-72293
      
      Closes #72293
      r? ```@oli-obk```
      2b3884f6
    • Y
      Rollup merge of #86189 - JohnTitor:relate-fn-pub, r=Aaron1011 · 5b78e6de
      Yuki Okushi 提交于
      Make `relate_type_and_mut` public
      
      #85343 improved diagnostics around `Relate` impls but made `relate_type_and_mut` private, which was accessible as `relate` previously. This makes it public so that we can use it on rust-semverver.
      
      r? ```@Aaron1011```
      5b78e6de
    • Y
      Rollup merge of #86174 - lqd:const-ub-align, r=RalfJung · 91faabb4
      Yuki Okushi 提交于
      Detect incorrect vtable alignment during const eval
      
      This PR fixes #86132 by detecting invalid alignment values for trait objects in the interpreter, and emitting an error about this conversion failure, to avoid the ICE.
      
      I've noticed that the error emitted at https://github.com/rust-lang/rust/blob/a50d72158e08e02cfc051b863017bdbd2c45b637/compiler/rustc_mir/src/interpret/traits.rs#L163-L166 doesn't seem to be present in the const-ub tests, so I've tried adding a test that triggers both of these cases: one for the invalid size, and another for the invalid alignment that #86132 tracks (I have found different magic values triggering different `Align::from_bytes` errors than the "power of 2" one, if need be).
      
      However, when doing that, I *cannot* for the life of me figure out the correct incantation to make these 2 errors trigger with the "it is undefined behavior to use this value" message rather than the "any use of this value will cause an error" lint.
      
      I've tried Oli's suggestions of different values, tuples and arrays, using the transparent wrapper trick from the other tests and I was only able to trigger the regular const-ub errors about the size of the vtable, or that the drop pointer was invalid. Maybe these "type validation failed" errors happen before this part of the interpreter is reached and there just needs some magic incorrect values to bypass them, I don't know.
      
      Since this fixes an ICE, and if the constants are indeed used, these 2 tests will turn into a hard error, I thought I'd open the PR anyways. And if ```@RalfJung``` you know of a way I could manage that (if you think that these tests are worth checking that the `throw_ub_format!` does indeed create const-ub errors as we expect) I'd be grateful.
      
      For that reason, r? ```@RalfJung``` and cc ```@oli-obk.```
      91faabb4
    • Y
      Rollup merge of #86153 - tmiasko:dummy-span, r=estebank · 79c0559c
      Yuki Okushi 提交于
      Print dummy spans as `no-location`
      
      Fixes #58808.
      79c0559c
    • Y
      Rollup merge of #85823 - fee1-dead:borrowck-0, r=jackh726 · 883e1a5f
      Yuki Okushi 提交于
      Do not suggest ampmut if rhs is already mutable
      
      Removes invalid suggestion in #85765, although it should highlight the user type instead of the local variable.
      
      Looking at the comments of this line:
      https://github.com/rust-lang/rust/blob/84b1005bfd22e2cb2a4c13b0b81958fe72628354/compiler/rustc_mir_build/src/build/matches/mod.rs#L2107
      
      It was intentionally set to `None`, causing it to highlight the local variable instead. I am not sure if I will be able to fix it.
      
      Fixes #85765
      883e1a5f
    • Y
      Rollup merge of #85800 - BoxyUwU:const-param-default-diagnostics, r=oli-obk · 3b47d337
      Yuki Okushi 提交于
      Fix some diagnostic issues with const_generics_defaults feature gate
      
      This PR makes a few changes:
      - print out const param defaults in "lifetime ordering" errors rather than discarding them
      - update `is_simple_text` to account for const params when checking if a type has no generics, this was causing a note to be failed to add to an error message
      - fixes some diagnostic wording that incorrectly said there was ordering restrictions between type/const params despite the `const_generics_defaults` feature gate is active
      3b47d337
    • B
      Auto merge of #85885 - bjorn3:remove_box_region, r=cjgillot · 0a8629bf
      bors 提交于
      Don't use a generator for BoxedResolver
      
      The generator is non-trivial and requires unsafe code anyway. Using regular unsafe code without a generator is much easier to follow.
      
      Based on #85810 as it touches rustc_interface too.
      0a8629bf
  2. 11 6月, 2021 15 次提交
    • C
      Make DummyHashStableContext dummier. · 72e95891
      Camille GILLOT 提交于
      72e95891
    • C
      Sprinkle inline. · d1931b64
      Camille GILLOT 提交于
      d1931b64
    • F
      f687d5c4
    • B
      Auto merge of #86116 - FabianWolff:issue-86100, r=varkor · dddebf94
      bors 提交于
      Suggest a trailing comma if a 1-tuple is expected and a parenthesized expression is found
      
      This pull request fixes #86100. The following code:
      ```rust
      fn main() {
          let t: (i32,) = (1);
      }
      ```
      currently produces:
      ```
      warning: unnecessary parentheses around assigned value
       --> test.rs:2:21
        |
      2 |     let t: (i32,) = (1);
        |                     ^^^ help: remove these parentheses
        |
        = note: `#[warn(unused_parens)]` on by default
      
      error[E0308]: mismatched types
       --> test.rs:2:21
        |
      2 |     let t: (i32,) = (1);
        |            ------   ^^^ expected tuple, found integer
        |            |
        |            expected due to this
        |
        = note: expected tuple `(i32,)`
                    found type `{integer}`
      
      error: aborting due to previous error; 1 warning emitted
      ```
      With my changes, I get the same warning and the following error:
      ```
      error[E0308]: mismatched types
       --> test.rs:2:21
        |
      2 |     let t: (i32,) = (1);
        |            ------   ^^^ expected tuple, found integer
        |            |
        |            expected due to this
        |
        = note: expected tuple `(i32,)`
                    found type `{integer}`
      help: use a trailing comma to create a tuple with one element
        |
      2 |     let t: (i32,) = (1,);
        |                     ^^^^
      ```
      i.e. I have added a suggestion to add a trailing comma to create a 1-tuple. This suggestion is only issued if a 1-tuple is expected and the expression (`(1)` in the example above) is surrounded by parentheses and does not already have a tuple type. In this situation, I'd say that it is pretty likely that the user meant to create a tuple.
      dddebf94
    • C
      Hash DefId in rustc_span. · a7a50b0c
      Camille GILLOT 提交于
      a7a50b0c
    • B
      Auto merge of #85994 - tmiasko:monomorphic-needs-drop, r=RalfJung · 66ba8105
      bors 提交于
      Disallow non-monomorphic calls to `needs_drop` in interpreter
      
      otherwise evaluation could change after further substitutions.
      66ba8105
    • B
      Auto merge of #86204 - alexcrichton:wasm-simd-stable, r=Amanieu · 68aa6b2d
      bors 提交于
      std: Stabilize wasm simd intrinsics
      
      This commit performs two changes to stabilize Rust support for
      WebAssembly simd intrinsics:
      
      * The stdarch submodule is updated to pull in rust-lang/stdarch#1179.
      * The `wasm_target_feature` feature gate requirement for the `simd128`
        feature has been removed, stabilizing the name `simd128`.
      
      This should conclude the FCP started on #74372 and...
      
      Closes #74372
      68aa6b2d
    • A
      std: Stabilize wasm simd intrinsics · e05bb26d
      Alex Crichton 提交于
      This commit performs two changes to stabilize Rust support for
      WebAssembly simd intrinsics:
      
      * The stdarch submodule is updated to pull in rust-lang/stdarch#1179.
      * The `wasm_target_feature` feature gate requirement for the `simd128`
        feature has been removed, stabilizing the name `simd128`.
      
      This should conclude the FCP started on #74372 and...
      
      Closes #74372
      e05bb26d
    • B
      Auto merge of #85961 - 1000teslas:issue-71519-fix, r=petrochenkov · 72868e01
      bors 提交于
      MVP for using rust-lld as part of cc
      
      Will fix #71519. I need to figure out how to write a test showing that lld is used instead of whatever linker cc normally uses. When I manually run rustc using `echo 'fn main() {}' | RUSTC_LOG=rustc_codegen_ssa::back::link=debug ./rustc -Clinker-flavor=gcc-lld --crate-type bin -Clink-arg=-Wl,-v` (thanks to bjorn3 on Zulip), I can see that lld is used, but I'm not sure how to inspect that output in a test.
      72868e01
    • B
      Auto merge of #85630 - gilescope:to_digit_speedup3, r=nagisa · 46ad16b7
      bors 提交于
      to_digit simplification (less jumps)
      
      I just realised we might be able to make use of the fact that changing case in ascii is easy to help simplify to_digit some more.
      
      It looks a bit cleaner and it looks like it's less jumps and there's less instructions in the generated assembly:
      
      https://godbolt.org/z/84Erh5dhz
      
      The benchmarks don't really tell me much. Maybe a slight improvement on the var radix.
      
      Before:
      ```
      test char::methods::bench_to_digit_radix_10                     ... bench:      53,819 ns/iter (+/- 8,314)
      test char::methods::bench_to_digit_radix_16                     ... bench:      57,265 ns/iter (+/- 10,730)
      test char::methods::bench_to_digit_radix_2                      ... bench:      55,077 ns/iter (+/- 5,431)
      test char::methods::bench_to_digit_radix_36                     ... bench:      56,549 ns/iter (+/- 3,248)
      test char::methods::bench_to_digit_radix_var                    ... bench:      43,848 ns/iter (+/- 3,189)
      
      test char::methods::bench_to_digit_radix_10                     ... bench:      51,707 ns/iter (+/- 10,946)
      test char::methods::bench_to_digit_radix_16                     ... bench:      52,835 ns/iter (+/- 2,689)
      test char::methods::bench_to_digit_radix_2                      ... bench:      51,012 ns/iter (+/- 2,746)
      test char::methods::bench_to_digit_radix_36                     ... bench:      53,210 ns/iter (+/- 8,645)
      test char::methods::bench_to_digit_radix_var                    ... bench:      40,386 ns/iter (+/- 4,711)
      
      test char::methods::bench_to_digit_radix_10                     ... bench:      54,088 ns/iter (+/- 5,677)
      test char::methods::bench_to_digit_radix_16                     ... bench:      55,972 ns/iter (+/- 17,229)
      test char::methods::bench_to_digit_radix_2                      ... bench:      52,083 ns/iter (+/- 2,425)
      test char::methods::bench_to_digit_radix_36                     ... bench:      54,132 ns/iter (+/- 1,548)
      test char::methods::bench_to_digit_radix_var                    ... bench:      41,250 ns/iter (+/- 5,299)
      ```
      After:
      ```
      test char::methods::bench_to_digit_radix_10                     ... bench:      48,907 ns/iter (+/- 19,449)
      test char::methods::bench_to_digit_radix_16                     ... bench:      52,673 ns/iter (+/- 8,122)
      test char::methods::bench_to_digit_radix_2                      ... bench:      48,509 ns/iter (+/- 2,885)
      test char::methods::bench_to_digit_radix_36                     ... bench:      50,526 ns/iter (+/- 4,610)
      test char::methods::bench_to_digit_radix_var                    ... bench:      38,618 ns/iter (+/- 3,180)
      
      test char::methods::bench_to_digit_radix_10                     ... bench:      54,202 ns/iter (+/- 6,994)
      test char::methods::bench_to_digit_radix_16                     ... bench:      56,585 ns/iter (+/- 8,448)
      test char::methods::bench_to_digit_radix_2                      ... bench:      50,548 ns/iter (+/- 1,674)
      test char::methods::bench_to_digit_radix_36                     ... bench:      52,749 ns/iter (+/- 2,576)
      test char::methods::bench_to_digit_radix_var                    ... bench:      40,215 ns/iter (+/- 3,327)
      
      test char::methods::bench_to_digit_radix_10                     ... bench:      50,233 ns/iter (+/- 22,272)
      test char::methods::bench_to_digit_radix_16                     ... bench:      50,841 ns/iter (+/- 19,981)
      test char::methods::bench_to_digit_radix_2                      ... bench:      50,386 ns/iter (+/- 4,555)
      test char::methods::bench_to_digit_radix_36                     ... bench:      52,369 ns/iter (+/- 2,737)
      test char::methods::bench_to_digit_radix_var                    ... bench:      40,417 ns/iter (+/- 2,766)
      ```
      
      I removed the likely as it resulted in a few less instructions. (It's not been in there long - I added it in the last to_digit iteration).
      46ad16b7
    • Y
      Run full const-generics test for issue-72293 · d7e0f431
      Yuki Okushi 提交于
      d7e0f431
    • B
      Auto merge of #80080 - rylev:qpath-on-struct, r=petrochenkov · 16e18395
      bors 提交于
      Allow qualified paths in struct construction (both expressions and patterns)
      
      Fixes #79658
      16e18395
    • G
      Further simplification of to_digit · 9c3d81e1
      Giles Cope 提交于
      9c3d81e1
    • B
      Auto merge of #86098 - pietroalbini:test-stable, r=Mark-Simulacrum · c622840b
      bors 提交于
      Add the x86_64-gnu-stable builder
      
      During the 1.52 release process we had to deal with some commits that passed the test suite on the nightly branch but failed on the beta or stable branch. In that case it was due to some UI tests including the channel name in the output, but other changes might also be dependent on the channel.
      
      This commit adds a new CI job that runs the Linux x86_64 test suite with the stable branch, ensuring nightly changes also work as stable. To ensure the new job works the following other changes are present:
      
      * The `ui-fulldeps/session-derive-errors.rs` test has been disabled on beta and stable, which required adding support for `// ignore-{channel}` and `// only-{channel}`.
      * The `rustdoc/intra-doc/field.rs` has been fixed.
      
      r? `@Mark-Simulacrum`
      fixes https://github.com/rust-lang/release-team/issues/11
      c622840b
    • B
      Remove unnecessary transmute · 4301d1ee
      bjorn3 提交于
      4301d1ee
  3. 10 6月, 2021 7 次提交
    • B
      Auto merge of #86020 - nagisa:nagisa/outliner, r=pnkfelix · 1f949e94
      bors 提交于
      Disable the machine outliner by default
      
      This addresses a codegen-issue that needs to be fixed upstream in LLVM.
      While we wait for the fix, we can disable it.
      
      Verified manually that the outliner is no longer run when
      `-Copt-level=z` is specified, and also that you can override this with
      `-Cllvm-args=-enable-machine-outliner` if you need it anyway.
      
      A regression test is not really feasible in this instance, given that we
      do not have any minimal reproducers.
      
      Fixes #85351
      
      cc `@pnkfelix`
      1f949e94
    • E
      support `as _` and add tests · 17cd7909
      Ellen 提交于
      17cd7909
    • B
      Auto merge of #82639 - jyn514:stable-options, r=Mark-Simulacrum · 40c1623b
      bors 提交于
      Don't pass -Z unstable-options by default for UI tests
      
      Unconditionally passing -Z unstable-options makes it impossible to test whether an option requires unstable-options or not.
      
      This uncovered quite a lot of bugs, I'll open issues for each. These don't strictly need to be fixed before this is merged, it just makes the diff much larger because of the changes to diagnostics.
      
      - https://github.com/rust-lang/rust/issues/82636
      - https://github.com/rust-lang/rust/issues/82637
      - https://github.com/rust-lang/rust/issues/82638
      40c1623b
    • R
      69363492
    • B
      Auto merge of #85741 - tmiasko:ssa, r=nagisa · 0279cb11
      bors 提交于
      Use preorder traversal when checking for SSA locals
      
      Traverse blocks in topological sort of dominance partial order, to ensure that
      local analyzer correctly identifies locals that are already in static single
      assignment form, while avoiding dependency on implicit numeric order of blocks.
      
      When rebuilding the standard library, this change reduces the number of locals
      that require an alloca from 62452 to 62348.
      0279cb11
    • 1
      gcc-lld mvp · 2a767626
      1000teslas 提交于
      ignore test if rust-lld not found
      
      create ld -> rust-lld symlink at build time instead of run time
      
      for testing in ci
      
      copy instead of symlinking
      
      remove linux check
      
      test for linker, suggestions from bjorn3
      
      fix overly restrictive lld matcher
      
      use -Zgcc-ld flag instead of -Clinker-flavor
      
      refactor code adding lld to gcc path
      
      revert ci changes
      
      suggestions from petrochenkov
      
      rename gcc_ld to gcc-ld in dirs
      2a767626
    • B
      Auto merge of #86186 - JohnTitor:rollup-upaw6wx, r=JohnTitor · c5fbcd35
      bors 提交于
      Rollup of 7 pull requests
      
      Successful merges:
      
       - #82037 (Make symbols stripping work on MacOS X)
       - #84687 (Multiple improvements to RwLocks)
       - #85997 (rustdoc: Print a warning if the diff when comparing to old nightlies is empty)
       - #86051 (Updated code examples and wording in move keyword documentation )
       - #86111 (fix off by one in `std::iter::Iterator` documentation)
       - #86113 (build doctests with lld if use-lld = true)
       - #86175 (update Miri)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      c5fbcd35