1. 15 6月, 2021 1 次提交
  2. 14 6月, 2021 9 次提交
  3. 13 6月, 2021 11 次提交
  4. 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
  5. 11 6月, 2021 1 次提交