1. 25 2月, 2022 40 次提交
    • M
      Rollup merge of #94252 - lcnr:def_kind-encoding, r=cjgillot · 133de6e1
      Matthias Krüger 提交于
      don't special case `DefKind::Ctor` in encoding
      
      considering that we still use `DefKind::Ctor` for these in `Res`, this seems weird and definitely felt like a bug when encountering it while working on #89862.
      
      r? `@cjgillot`
      133de6e1
    • M
      Rollup merge of #94155 - GuillaumeGomez:extend-toggle-gui-test, r=jsha · 7dcbe692
      Matthias Krüger 提交于
      Extend toggle GUI test a bit
      
      Fixes #84422.
      
      r? `@jsha`
      7dcbe692
    • M
      Rollup merge of #93845 - compiler-errors:in-band-lifetimes, r=cjgillot · ec4fc726
      Matthias Krüger 提交于
      Remove in band lifetimes
      
      As discussed in t-lang backlog bonanza, the `in_band_lifetimes` FCP closed in favor for the feature not being stabilized. This PR removes `#![feature(in_band_lifetimes)]` in its entirety.
      
      Let me know if this PR is too hasty, and if we should instead do something intermediate for deprecate the feature first.
      
      r? `@scottmcm` (or feel free to reassign, just saw your last comment on #44524)
      Closes #44524
      ec4fc726
    • G
      Extend toggle GUI test a bit · ec50cdbe
      Guillaume Gomez 提交于
      ec50cdbe
    • B
      Auto merge of #94350 - matthiaskrgr:rollup-eesfiyr, r=matthiaskrgr · 03c8ffaa
      bors 提交于
      Rollup of 6 pull requests
      
      Successful merges:
      
       - #92714 (Provide ignore message in the result of test)
       - #93273 (Always check cg_llvm with ./x.py check)
       - #94068 (Consider mutations as borrows in generator drop tracking)
       - #94184 (BTree: simplify test code)
       - #94297 (update const_generics_defaults release notes)
       - #94341 (Remove a duplicate space)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      03c8ffaa
    • M
      Rollup merge of #94341 - ChayimFriedman2:patch-1, r=Dylan-DPC · cff3472e
      Matthias Krüger 提交于
      Remove a duplicate space
      
      rustfmt doesn't format `let ... else`.
      cff3472e
    • M
      Rollup merge of #94297 - lcnr:rel-notes, r=Mark-Simulacrum · 10a43d2a
      Matthias Krüger 提交于
      update const_generics_defaults release notes
      
      supersedes #94294
      
      r? `@Mark-Simulacrum`
      10a43d2a
    • M
      Rollup merge of #94184 - ssomers:btree_tests, r=Dylan-DPC · e5bd222c
      Matthias Krüger 提交于
      BTree: simplify test code
      
      Mostly, use `from` & `from_iter`.
      e5bd222c
    • M
      Rollup merge of #94068 - eholk:drop-track-field-assign, r=tmandry · 10070118
      Matthias Krüger 提交于
      Consider mutations as borrows in generator drop tracking
      
      This is needed to match MIR more conservative approximation of any borrowed value being live across a suspend point (See #94067). This change considers an expression such as `x.y = z` to be a borrow of `x` and therefore keeps `x` live across suspend points.
      
      r? `@nikomatsakis`
      10070118
    • M
      Rollup merge of #93273 - bjorn3:rustbuild_improvements, r=Mark-Simulacrum · ae6770e4
      Matthias Krüger 提交于
      Always check cg_llvm with ./x.py check
      
      Previously it would be skipped if codegen-backends doesn't contain llvm.
      ae6770e4
    • M
      Rollup merge of #92714 - yanganto:ignore-message, r=Mark-Simulacrum · 6ec5b056
      Matthias Krüger 提交于
      Provide ignore message in the result of test
      
      Provide ignore the message in the result of the test.
      
      This PR does not need RFC, because it is about the presentation of the report of `cargo test`.
      
      However, the following document listed here helps you to know about PR.
      
      - [RFC](https://github.com/rust-lang/rfcs/pull/3217)
      - [Rendered](https://github.com/yanganto/rfcs/blob/ignore-test-message/text/0000-ignore-test-message.md)
      - [Previous discussion on IRLO](https://internals.rust-lang.org/t/pre-rfc-provide-ignore-message-when-the-test-ignored/15904)
      
      If there is something improper, please let me know.
      Thanks.
      6ec5b056
    • B
      Auto merge of #94130 - erikdesjardins:partially, r=nikic · ece55d41
      bors 提交于
      Use undef for (some) partially-uninit constants
      
      There needs to be some limit to avoid perf regressions on large arrays
      with undef in each element (see comment in the code).
      
      Fixes: #84565
      Original PR: #83698
      
      Depends on LLVM 14: #93577
      ece55d41
    • B
      Auto merge of #93878 - Aaron1011:newtype-macro, r=cjgillot · f6a79936
      bors 提交于
      Convert `newtype_index` to a proc macro
      
      The `macro_rules!` implementation was becomng excessively complicated,
      and difficult to modify. The new proc macro implementation should make
      it much easier to add new features (e.g. skipping certain `#[derive]`s)
      f6a79936
    • M
      Remove LifetimeDefOrigin · 9386ea9d
      Michael Goulet 提交于
      9386ea9d
    • M
      Remove in-band lifetimes · bb548a91
      Michael Goulet 提交于
      bb548a91
    • B
      Auto merge of #93368 - eddyb:diagbld-guarantee, r=estebank · d4de1f23
      bors 提交于
      rustc_errors: let `DiagnosticBuilder::emit` return a "guarantee of emission".
      
      That is, `DiagnosticBuilder` is now generic over the return type of `.emit()`, so we'll now have:
      * `DiagnosticBuilder<ErrorReported>` for error (incl. fatal/bug) diagnostics
        * can only be created via a `const L: Level`-generic constructor, that limits allowed variants via a `where` clause, so not even `rustc_errors` can accidentally bypass this limitation
        * asserts `diagnostic.is_error()` on emission, just in case the construction restriction was bypassed (e.g. by replacing the whole `Diagnostic` inside `DiagnosticBuilder`)
        * `.emit()` returns `ErrorReported`, as a "proof" token that `.emit()` was called
          (though note that this isn't a real guarantee until after completing the work on
           #69426)
      * `DiagnosticBuilder<()>` for everything else (warnings, notes, etc.)
        * can also be obtained from other `DiagnosticBuilder`s by calling `.forget_guarantee()`
      
      This PR is a companion to other ongoing work, namely:
      * #69426
        and it's ongoing implementation:
        #93222
        the API changes in this PR are needed to get statically-checked "only errors produce `ErrorReported` from `.emit()`", but doesn't itself provide any really strong guarantees without those other `ErrorReported` changes
      * #93244
        would make the choices of API changes (esp. naming) in this PR fit better overall
      
      In order to be able to let `.emit()` return anything trustable, several changes had to be made:
      * `Diagnostic`'s `level` field is now private to `rustc_errors`, to disallow arbitrary "downgrade"s from "some kind of error" to "warning" (or anything else that doesn't cause compilation to fail)
        * it's still possible to replace the whole `Diagnostic` inside the `DiagnosticBuilder`, sadly, that's harder to fix, but it's unlikely enough that we can paper over it with asserts on `.emit()`
      * `.cancel()` now consumes `DiagnosticBuilder`, preventing `.emit()` calls on a cancelled diagnostic
        * it's also now done internally, through `DiagnosticBuilder`-private state, instead of having a `Level::Cancelled` variant that can be read (or worse, written) by the user
        * this removes a hazard of calling `.cancel()` on an error then continuing to attach details to it, and even expect to be able to `.emit()` it
        * warnings were switched to *only* `can_emit_warnings` on emission (instead of pre-cancelling early)
        * `struct_dummy` was removed (as it relied on a pre-`Cancelled` `Diagnostic`)
      * since `.emit()` doesn't consume the `DiagnosticBuilder` <sub>(I tried and gave up, it's much more work than this PR)</sub>,
        we have to make `.emit()` idempotent wrt the guarantees it returns
        * thankfully, `err.emit(); err.emit();` can return `ErrorReported` both times, as the second `.emit()` call has no side-effects *only* because the first one did do the appropriate emission
      * `&mut Diagnostic` is now used in a lot of function signatures, which used to take `&mut DiagnosticBuilder` (in the interest of not having to make those functions generic)
        * the APIs were already mostly identical, allowing for low-effort porting to this new setup
        * only some of the suggestion methods needed some rework, to have the extra `DiagnosticBuilder` functionality on the `Diagnostic` methods themselves (that change is also present in #93259)
        * `.emit()`/`.cancel()` aren't available, but IMO calling them from an "error decorator/annotator" function isn't a good practice, and can lead to strange behavior (from the caller's perspective)
        * `.downgrade_to_delayed_bug()` was added, letting you convert any `.is_error()` diagnostic into a `delay_span_bug` one (which works because in both cases the guarantees available are the same)
      
      This PR should ideally be reviewed commit-by-commit, since there is a lot of fallout in each.
      
      r? `@estebank` cc `@Manishearth` `@nikomatsakis` `@mark-i-m`
      d4de1f23
    • C
      Remove a duplicate space · 4809a6d4
      Chayim Refael Friedman 提交于
      rustfmt doesn't format `let ... else`.
      4809a6d4
    • A
      Include ignore message in libtest output · bb3b5574
      Antonio Yang 提交于
      As an example:
      
          #[test]
          #[ignore = "not yet implemented"]
          fn test_ignored() {
              ...
          }
      
      Will now render as:
      
          running 2 tests
          test tests::test_ignored ... ignored, not yet implemented
      
          test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
      bb3b5574
    • B
      Auto merge of #94333 - Dylan-DPC:rollup-7yxtywp, r=Dylan-DPC · 4e82f354
      bors 提交于
      Rollup of 9 pull requests
      
      Successful merges:
      
       - #91795 (resolve/metadata: Stop encoding macros as reexports)
       - #93714 (better ObligationCause for normalization errors in `can_type_implement_copy`)
       - #94175 (Improve `--check-cfg` implementation)
       - #94212 (Stop manually SIMDing in `swap_nonoverlapping`)
       - #94242 (properly handle fat pointers to uninhabitable types)
       - #94308 (Normalize main return type during mono item collection & codegen)
       - #94315 (update auto trait lint for `PhantomData`)
       - #94316 (Improve string literal unescaping)
       - #94327 (Avoid emitting full macro body into JSON errors)
      
      Failed merges:
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      4e82f354
    • A
      Fix intra-doc link issues exposed by new macro · 7b7b0f14
      Aaron Hill 提交于
      These links never worked, but the lint was suppressed due to the fact
      that the span was pointing into the macro. With the new macro
      implementation, the span now points directly to the doc comment in the
      macro invocation, so it's no longer suppressed.
      7b7b0f14
    • A
      Address review comments · 01efe6d5
      Aaron Hill 提交于
      01efe6d5
    • A
      Fix test · e686aee4
      Aaron Hill 提交于
      e686aee4
    • A
      Convert `newtype_index` to a proc macro · 339bbebb
      Aaron Hill 提交于
      The `macro_rules!` implementation was becomng excessively complicated,
      and difficult to modify. The new proc macro implementation should make
      it much easier to add new features (e.g. skipping certain `#[derive]`s)
      339bbebb
    • D
      Rollup merge of #94327 - Mark-Simulacrum:avoid-macro-sp, r=petrochenkov · 3bd163f4
      Dylan DPC 提交于
      Avoid emitting full macro body into JSON errors
      
      While investigating https://github.com/rust-lang/rust/issues/94322, it was noted that currently the JSON diagnostics for macro backtraces include the full def_site span -- the whole macro body.
      
      It seems like this shouldn't be necessary, so this PR adjusts the span to just be the "guessed head", typically the macro name. It doesn't look like we keep enough information to synthesize a nicer span here at this time.
      
      Atop #92123, this reduces output for the src/test/ui/suggestions/missing-lifetime-specifier.rs test from 660 KB to 156 KB locally.
      3bd163f4
    • D
      Rollup merge of #94316 - nnethercote:improve-string-literal-unescaping, r=petrochenkov · ec44d48a
      Dylan DPC 提交于
      Improve string literal unescaping
      
      Some easy wins that affect a few popular crates.
      
      r? ```@matklad```
      ec44d48a
    • D
      9e7131a0
    • D
      Rollup merge of #94308 - tmiasko:normalize-main-ret-ty, r=oli-obk · 787c6f33
      Dylan DPC 提交于
      Normalize main return type during mono item collection & codegen
      
      The issue can be observed with `-Zprint-mono-items=lazy` in:
      
      ```rust
      #![feature(termination_trait_lib)]
      fn main() -> impl std::process::Termination { }
      ```
      ```
      BEFORE: MONO_ITEM fn std::rt::lang_start::<impl std::process::Termination> ````@@```` t.93933fa2-cgu.2[External]
      AFTER:  MONO_ITEM fn std::rt::lang_start::<()> ````@@```` t.df56e625-cgu.1[External]
      ```
      787c6f33
    • D
      Rollup merge of #94242 - compiler-errors:fat-uninhabitable-pointer, r=michaelwoerister · 6b03a46f
      Dylan DPC 提交于
      properly handle fat pointers to uninhabitable types
      
      Calculate the pointee metadata size by using `tcx.struct_tail_erasing_lifetimes` instead of duplicating the logic in `fat_pointer_kind`. Open to alternatively suggestions on how to fix this.
      
      Fixes #94149
      
      r? ````@michaelwoerister```` since you touched this code last, I think!
      6b03a46f
    • D
      Rollup merge of #94212 - scottmcm:swapper, r=dtolnay · 7fb55b4c
      Dylan DPC 提交于
      Stop manually SIMDing in `swap_nonoverlapping`
      
      Like I previously did for `reverse` (#90821), this leaves it to LLVM to pick how to vectorize it, since it can know better the chunk size to use, compared to the "32 bytes always" approach we currently have.
      
      A variety of codegen tests are included to confirm that the various cases are still being vectorized.
      
      It does still need logic to type-erase in some cases, though, as while LLVM is now smart enough to vectorize over slices of things like `[u8; 4]`, it fails to do so over slices of `[u8; 3]`.
      
      As a bonus, this change also means one no longer gets the spurious `memcpy`(s?) at the end up swapping a slice of `__m256`s: <https://rust.godbolt.org/z/joofr4v8Y>
      
      <details>
      
      <summary>ASM for this example</summary>
      
      ## Before (from godbolt)
      
      note the `push`/`pop`s and `memcpy`
      
      ```x86
      swap_m256_slice:
              push    r15
              push    r14
              push    r13
              push    r12
              push    rbx
              sub     rsp, 32
              cmp     rsi, rcx
              jne     .LBB0_6
              mov     r14, rsi
              shl     r14, 5
              je      .LBB0_6
              mov     r15, rdx
              mov     rbx, rdi
              xor     eax, eax
      .LBB0_3:
              mov     rcx, rax
              vmovaps ymm0, ymmword ptr [rbx + rax]
              vmovaps ymm1, ymmword ptr [r15 + rax]
              vmovaps ymmword ptr [rbx + rax], ymm1
              vmovaps ymmword ptr [r15 + rax], ymm0
              add     rax, 32
              add     rcx, 64
              cmp     rcx, r14
              jbe     .LBB0_3
              sub     r14, rax
              jbe     .LBB0_6
              add     rbx, rax
              add     r15, rax
              mov     r12, rsp
              mov     r13, qword ptr [rip + memcpy@GOTPCREL]
              mov     rdi, r12
              mov     rsi, rbx
              mov     rdx, r14
              vzeroupper
              call    r13
              mov     rdi, rbx
              mov     rsi, r15
              mov     rdx, r14
              call    r13
              mov     rdi, r15
              mov     rsi, r12
              mov     rdx, r14
              call    r13
      .LBB0_6:
              add     rsp, 32
              pop     rbx
              pop     r12
              pop     r13
              pop     r14
              pop     r15
              vzeroupper
              ret
      ```
      
      ## After (from my machine)
      
      Note no `rsp` manipulation, sorry for different ASM syntax
      
      ```x86
      swap_m256_slice:
      	cmpq	%r9, %rdx
      	jne	.LBB1_6
      	testq	%rdx, %rdx
      	je	.LBB1_6
      	cmpq	$1, %rdx
      	jne	.LBB1_7
      	xorl	%r10d, %r10d
      	jmp	.LBB1_4
      .LBB1_7:
      	movq	%rdx, %r9
      	andq	$-2, %r9
      	movl	$32, %eax
      	xorl	%r10d, %r10d
      	.p2align	4, 0x90
      .LBB1_8:
      	vmovaps	-32(%rcx,%rax), %ymm0
      	vmovaps	-32(%r8,%rax), %ymm1
      	vmovaps	%ymm1, -32(%rcx,%rax)
      	vmovaps	%ymm0, -32(%r8,%rax)
      	vmovaps	(%rcx,%rax), %ymm0
      	vmovaps	(%r8,%rax), %ymm1
      	vmovaps	%ymm1, (%rcx,%rax)
      	vmovaps	%ymm0, (%r8,%rax)
      	addq	$2, %r10
      	addq	$64, %rax
      	cmpq	%r10, %r9
      	jne	.LBB1_8
      .LBB1_4:
      	testb	$1, %dl
      	je	.LBB1_6
      	shlq	$5, %r10
      	vmovaps	(%rcx,%r10), %ymm0
      	vmovaps	(%r8,%r10), %ymm1
      	vmovaps	%ymm1, (%rcx,%r10)
      	vmovaps	%ymm0, (%r8,%r10)
      .LBB1_6:
      	vzeroupper
      	retq
      ```
      
      </details>
      
      This does all its copying operations as either the original type or as `MaybeUninit`s, so as far as I know there should be no potential abstract machine issues with reading padding bytes as integers.
      
      <details>
      
      <summary>Perf is essentially unchanged</summary>
      
      Though perhaps with more target features this would help more, if it could pick bigger chunks
      
      ## Before
      
      ```
      running 10 tests
      test slice::swap_with_slice_4x_usize_30                            ... bench:         894 ns/iter (+/- 11)
      test slice::swap_with_slice_4x_usize_3000                          ... bench:      99,476 ns/iter (+/- 2,784)
      test slice::swap_with_slice_5x_usize_30                            ... bench:       1,257 ns/iter (+/- 7)
      test slice::swap_with_slice_5x_usize_3000                          ... bench:     139,922 ns/iter (+/- 959)
      test slice::swap_with_slice_rgb_30                                 ... bench:         328 ns/iter (+/- 27)
      test slice::swap_with_slice_rgb_3000                               ... bench:      16,215 ns/iter (+/- 176)
      test slice::swap_with_slice_u8_30                                  ... bench:         312 ns/iter (+/- 9)
      test slice::swap_with_slice_u8_3000                                ... bench:       5,401 ns/iter (+/- 123)
      test slice::swap_with_slice_usize_30                               ... bench:         368 ns/iter (+/- 3)
      test slice::swap_with_slice_usize_3000                             ... bench:      28,472 ns/iter (+/- 3,913)
      ```
      
      ## After
      
      ```
      running 10 tests
      test slice::swap_with_slice_4x_usize_30                            ... bench:         868 ns/iter (+/- 36)
      test slice::swap_with_slice_4x_usize_3000                          ... bench:      99,642 ns/iter (+/- 1,507)
      test slice::swap_with_slice_5x_usize_30                            ... bench:       1,194 ns/iter (+/- 11)
      test slice::swap_with_slice_5x_usize_3000                          ... bench:     139,761 ns/iter (+/- 5,018)
      test slice::swap_with_slice_rgb_30                                 ... bench:         324 ns/iter (+/- 6)
      test slice::swap_with_slice_rgb_3000                               ... bench:      15,962 ns/iter (+/- 287)
      test slice::swap_with_slice_u8_30                                  ... bench:         281 ns/iter (+/- 5)
      test slice::swap_with_slice_u8_3000                                ... bench:       5,324 ns/iter (+/- 40)
      test slice::swap_with_slice_usize_30                               ... bench:         275 ns/iter (+/- 5)
      test slice::swap_with_slice_usize_3000                             ... bench:      28,277 ns/iter (+/- 277)
      ```
      
      </detail>
      7fb55b4c
    • D
      Rollup merge of #94175 - Urgau:check-cfg-improvements, r=petrochenkov · 000e38d9
      Dylan DPC 提交于
      Improve `--check-cfg` implementation
      
      This pull-request is a mix of improvements regarding the `--check-cfg` implementation:
      
      - Simpler internal representation (usage of `Option` instead of separate bool)
      - Add --check-cfg to the unstable book (based on the RFC)
      - Improved diagnostics:
          * List possible values when the value is unexpected
          * Suggest if possible a name or value that is similar
      - Add more tests (well known names, mix of combinations, ...)
      
      r? ```@petrochenkov```
      000e38d9
    • D
      Rollup merge of #93714 - compiler-errors:can-type-impl-copy-error-span, r=jackh726 · 7f995369
      Dylan DPC 提交于
      better ObligationCause for normalization errors in `can_type_implement_copy`
      
      Some logic is needed so we can point to the field when given totally nonsense types like `struct Foo(<u32 as Iterator>::Item);`
      
      Fixes #93687
      7f995369
    • D
      Rollup merge of #91795 - petrochenkov:nomacreexport, r=cjgillot · 6ba167a6
      Dylan DPC 提交于
      resolve/metadata: Stop encoding macros as reexports
      
      Supersedes https://github.com/rust-lang/rust/pull/88335.
      r? `@cjgillot`
      6ba167a6
    • V
      Update clippy tests · b91ec301
      Vadim Petrochenkov 提交于
      b91ec301
    • V
      179ce18c
    • V
      metadata: Tweak the way in which declarative macros are encoded · 50568b8e
      Vadim Petrochenkov 提交于
      To make the `macro_rules` flag more readily available without decoding everything else
      50568b8e
    • V
      resolve: Fix incorrect results of `opt_def_kind` query for some built-in macros · 17b1afdb
      Vadim Petrochenkov 提交于
      Previously it always returned `MacroKind::Bang` while some of those macros are actually attributes and derives
      17b1afdb
    • B
      Auto merge of #94131 - Mark-Simulacrum:fmt-string, r=oli-obk · 4b043fab
      bors 提交于
      Always format to internal String in FmtPrinter
      
      This avoids monomorphizing for different parameters, decreasing generic code
      instantiated downstream from rustc_middle -- locally seeing 7% unoptimized LLVM IR
      line wins on rustc_borrowck, for example.
      
      We likely can't/shouldn't get rid of the Result-ness on most functions, though some
      further cleanup avoiding fmt::Error where we now know it won't occur may be possible,
      though somewhat painful -- fmt::Write is a pretty annoying API to work with in practice
      when you're trying to use it infallibly.
      4b043fab
    • M
      restore spans for issue-50480 · ee98dc8b
      Michael Goulet 提交于
      ee98dc8b
    • M
    • M
      Avoid emitting full macro body into JSON · 34319ff4
      Mark Rousskov 提交于
      34319ff4