Commit Graph

226330 Commits

Author SHA1 Message Date
Matthias Krüger
53881f91b0
Rollup merge of #112356 - Nilstrieb:get-region-var-origins, r=compiler-errors
Fix comment for `get_region_var_origins`

#109753 changed the logic but not the comment.

r? `@compiler-errors`
2023-06-06 22:00:21 +02:00
Matthias Krüger
fd6efcf960
Rollup merge of #112350 - Nilstrieb:borrow-me-some-cleanups, r=compiler-errors
Avoid duplicate type sanitization of local decls in borrowck

The type of the local decl is already sanitized in `visit_local_decl`.
2023-06-06 22:00:20 +02:00
Matthias Krüger
38ddff516c
Rollup merge of #112343 - GuillaumeGomez:extern-crate-missing-docs, r=notriddle
Prevent emitting `missing_docs` for `pub extern crate`

Fixes #112308.

r? `@notriddle`
2023-06-06 22:00:20 +02:00
Matthias Krüger
e937fa49dd
Rollup merge of #112340 - lcnr:tyctxt-cleanup, r=compiler-errors
remove `TyCtxt::has_error_field` helper method
2023-06-06 22:00:20 +02:00
Matthias Krüger
319a905a92
Rollup merge of #112334 - fee1-dead-contrib:add-rotation, r=Nilstrieb
Add myself to highfive rotation
2023-06-06 22:00:19 +02:00
Matthias Krüger
157d0f03ab
Rollup merge of #112310 - loongarch-rs:bare-metal, r=WaffleLapkin
Add new Tier-3 targets: `loongarch64-unknown-none*`

This PR adds new Tier-3 targets `loongarch64-unknown-none*` that are introduced by MCP rust-lang/compiler-team#628
2023-06-06 22:00:19 +02:00
Matthias Krüger
1788d49789
Rollup merge of #111250 - spastorino:smir-terminator-2, r=oli-obk
Add Terminator conversion from MIR to SMIR, part #2

r? `@oli-obk`
2023-06-06 22:00:18 +02:00
Nilstrieb
5593e7e2ba Avoid duplicate type sanitization of local decls
The type of the local decl is already sanitized in `visit_local_decl`.
2023-06-06 18:52:47 +00:00
Nilstrieb
0e01088f07 Fix comment for get_region_var_origins 2023-06-06 18:50:38 +00:00
Guillaume Gomez
550fe634bf Add regression test for #112308 2023-06-06 11:50:24 +02:00
Guillaume Gomez
4711c3078a Prevent emitting missing_docs for pub extern crate 2023-06-06 11:50:04 +02:00
bors
3572d7451d Auto merge of #112312 - nikic:llvm-16.0.5, r=cuviper
Update to LLVM 16.0.5

Rebase to LLVM 16.0.5, plus one cherry-pick.

Fixes #111823.
Fixes #112061.
Fixes #112170.
2023-06-06 09:40:31 +00:00
lcnr
01aaad3f1f remove has_error_field helper method 2023-06-06 09:37:30 +02:00
Deadbeef
aaca1712db Add myself to highfive rotation 2023-06-06 03:15:52 +00:00
WANG Rui
bd32075934 Add new Tier-3 targets: loongarch64-unknown-none*
MCP: https://github.com/rust-lang/compiler-team/issues/628
2023-06-06 10:55:52 +08:00
bors
fd9bf59436 Auto merge of #111999 - scottmcm:codegen-less-memcpy, r=compiler-errors
Use `load`+`store` instead of `memcpy` for small integer arrays

I was inspired by #98892 to see whether, rather than making `mem::swap` do something smart in the library, we could update MIR assignments like `*_1 = *_2` to do something smarter than `memcpy` for sufficiently-small types that doing it inline is going to be better than a `memcpy` call in assembly anyway.  After all, special code may help `mem::swap`, but if the "obvious" MIR can just result in the correct thing that helps everything -- other code like `mem::replace`, people doing it manually, and just passing around by value in general -- as well as makes MIR inlining happier since it doesn't need to deal with all the complicated library code if it just sees a couple assignments.

LLVM will turn the short, known-length `memcpy`s into direct instructions in the backend, but that's too late for it to be able to remove `alloca`s.  In general, replacing `memcpy`s with typed instructions is hard in the middle-end -- even for `memcpy.inline` where it knows it won't be a function call -- is hard [due to poison propagation issues](https://rust-lang.zulipchat.com/#narrow/stream/187780-t-compiler.2Fwg-llvm/topic/memcpy.20vs.20load-store.20for.20MIR.20assignments/near/360376712).  So because we know more about the type invariants -- these are typed copies -- rustc can emit something more specific, allowing LLVM to `mem2reg` away the `alloca`s in some situations.

#52051 previously did something like this in the library for `mem::swap`, but it ended up regressing during enabling mir inlining (cbbf06b0cd), so this has been suboptimal on stable for ≈5 releases now.

The code in this PR is narrowly targeted at just integer arrays in LLVM, but works via a new method on the [`LayoutTypeMethods`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/traits/trait.LayoutTypeMethods.html) trait, so specific backends based on cg_ssa can enable this for more situations over time, as we find them.  I don't want to try to bite off too much in this PR, though.  (Transparent newtypes and simple things like the 3×usize `String` would be obvious candidates for a follow-up.)

Codegen demonstrations: <https://llvm.godbolt.org/z/fK8hT9aqv>

Before:
```llvm
define void `@swap_rgb48_old(ptr` noalias nocapture noundef align 2 dereferenceable(6) %x, ptr noalias nocapture noundef align 2 dereferenceable(6) %y) unnamed_addr #1 {
  %a.i = alloca [3 x i16], align 2
  call void `@llvm.lifetime.start.p0(i64` 6, ptr nonnull %a.i)
  call void `@llvm.memcpy.p0.p0.i64(ptr` noundef nonnull align 2 dereferenceable(6) %a.i, ptr noundef nonnull align 2 dereferenceable(6) %x, i64 6, i1 false)
  tail call void `@llvm.memcpy.p0.p0.i64(ptr` noundef nonnull align 2 dereferenceable(6) %x, ptr noundef nonnull align 2 dereferenceable(6) %y, i64 6, i1 false)
  call void `@llvm.memcpy.p0.p0.i64(ptr` noundef nonnull align 2 dereferenceable(6) %y, ptr noundef nonnull align 2 dereferenceable(6) %a.i, i64 6, i1 false)
  call void `@llvm.lifetime.end.p0(i64` 6, ptr nonnull %a.i)
  ret void
}
```
Note it going to stack:
```nasm
swap_rgb48_old:                         # `@swap_rgb48_old`
        movzx   eax, word ptr [rdi + 4]
        mov     word ptr [rsp - 4], ax
        mov     eax, dword ptr [rdi]
        mov     dword ptr [rsp - 8], eax
        movzx   eax, word ptr [rsi + 4]
        mov     word ptr [rdi + 4], ax
        mov     eax, dword ptr [rsi]
        mov     dword ptr [rdi], eax
        movzx   eax, word ptr [rsp - 4]
        mov     word ptr [rsi + 4], ax
        mov     eax, dword ptr [rsp - 8]
        mov     dword ptr [rsi], eax
        ret
```

Now:
```llvm
define void `@swap_rgb48(ptr` noalias nocapture noundef align 2 dereferenceable(6) %x, ptr noalias nocapture noundef align 2 dereferenceable(6) %y) unnamed_addr #0 {
start:
  %0 = load <3 x i16>, ptr %x, align 2
  %1 = load <3 x i16>, ptr %y, align 2
  store <3 x i16> %1, ptr %x, align 2
  store <3 x i16> %0, ptr %y, align 2
  ret void
}
```
still lowers to `dword`+`word` operations, but has no stack traffic:
```nasm
swap_rgb48:                             # `@swap_rgb48`
        mov     eax, dword ptr [rdi]
        movzx   ecx, word ptr [rdi + 4]
        movzx   edx, word ptr [rsi + 4]
        mov     r8d, dword ptr [rsi]
        mov     dword ptr [rdi], r8d
        mov     word ptr [rdi + 4], dx
        mov     word ptr [rsi + 4], cx
        mov     dword ptr [rsi], eax
        ret
```

And as a demonstration that this isn't just `mem::swap`, a `mem::replace` on a small array (since replace doesn't use swap since #83022), which used to be `memcpy`s in LLVM changes in IR
```llvm
define void `@replace_short_array(ptr` noalias nocapture noundef sret([3 x i32]) dereferenceable(12) %0, ptr noalias noundef align 4 dereferenceable(12) %r, ptr noalias nocapture noundef readonly dereferenceable(12) %v) unnamed_addr #0 {
start:
  %1 = load <3 x i32>, ptr %r, align 4
  store <3 x i32> %1, ptr %0, align 4
  %2 = load <3 x i32>, ptr %v, align 4
  store <3 x i32> %2, ptr %r, align 4
  ret void
}
```
but that lowers to reasonable `dword`+`qword` instructions still
```nasm
replace_short_array:                    # `@replace_short_array`
        mov     rax, rdi
        mov     rcx, qword ptr [rsi]
        mov     edi, dword ptr [rsi + 8]
        mov     dword ptr [rax + 8], edi
        mov     qword ptr [rax], rcx
        mov     rcx, qword ptr [rdx]
        mov     edx, dword ptr [rdx + 8]
        mov     dword ptr [rsi + 8], edx
        mov     qword ptr [rsi], rcx
        ret
```
2023-06-06 01:50:28 +00:00
bors
adc719d714 Auto merge of #112324 - matthiaskrgr:rollup-qscmi3c, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #112081 (Avoid ICE on `#![doc(test(...)]` with literal parameter)
 - #112196 (Resolve vars in result from `scrape_region_constraints`)
 - #112303 (Normalize in infcx instead of globally for `Option::as_deref` suggestion)
 - #112316 (Ensure space is inserted after keyword in `unused_delims`)
 - #112318 (Merge method, type and const object safety checks)
 - #112322 (Don't mention `IMPLIED_BOUNDS_ENTAILMENT` if signatures reference error)

Failed merges:

 - #112251 (rustdoc: convert `if let Some()` that always matches to variable)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-06-05 22:44:59 +00:00
Matthias Krüger
dcdd867a52
Rollup merge of #112322 - compiler-errors:no-IMPLIED_BOUNDS_ENTAILMENT-if-errs, r=eholk
Don't mention `IMPLIED_BOUNDS_ENTAILMENT` if signatures reference error

Fixes #112321
2023-06-05 23:48:00 +02:00
Matthias Krüger
44acf796c7
Rollup merge of #112318 - oli-obk:assoc_ty_sized_bound_for_object_safety, r=compiler-errors
Merge method, type and const object safety checks

cc `@spastorino` and `@compiler-errors` on the first commit. I believe it to be correct, as the field is only `Some` for assoc types, so just checking the field without checking the assoc kind to be `Type` is fine.

The second commit avoids going through all associated items thrice and just goes over all of them once, running the object safety checks per assoc item kind.
2023-06-05 23:48:00 +02:00
Matthias Krüger
0ff5a6ee57
Rollup merge of #112316 - clubby789:unused-parens-space, r=compiler-errors
Ensure space is inserted after keyword in `unused_delims`

Fixes #112276
2023-06-05 23:47:59 +02:00
Matthias Krüger
ff43249b0e
Rollup merge of #112303 - Nilstrieb:as-deref, r=compiler-errors
Normalize in infcx instead of globally for `Option::as_deref` suggestion

fixes #112293

The projection may contain inference variables. These inference variables are local to the local inference context. Using `tcx.normalize_erasing_regions` doesn't work here because this method is global and does not have access to the inference context. It's therefore unable to deal with the inference variables. We normalize in the local inference context instead, which knowns about the inference variables.

The test looks a little different than the issue example, I made it more minimal and verified that it still ICEs on nightly.

Also contains a drive-by fix to properly compare the types.

r? `@compiler-errors`
2023-06-05 23:47:59 +02:00
Matthias Krüger
9ce0c7951c
Rollup merge of #112196 - compiler-errors:new-solver-resolv, r=lcnr
Resolve vars in result from `scrape_region_constraints`

Since we perform `type_op::Normalize` in the local infcx when the new solver is enabled, vars aren't necessarily resolved, which triggers this ICE:

f85ab544df/compiler/rustc_infer/src/infer/nll_relate/mod.rs (L481)

There are more tests that go from ICE -> pass due to this change, but I just added revisions to a few for CI.

r? `@lcnr`
2023-06-05 23:47:58 +02:00
Matthias Krüger
129a57a9f6
Rollup merge of #112081 - obeis:doc-test-literal, r=compiler-errors
Avoid ICE on `#![doc(test(...)]` with literal parameter

Close #109066

r? `@compiler-errors`
2023-06-05 23:47:57 +02:00
Michael Goulet
0e9e91a95a Don't mention IMPLIED_BOUNDS_ENTAILMENT if signatures reference error 2023-06-05 21:20:51 +00:00
Michael Goulet
979379aff7 Resolve vars in result from scrape_region_constraints 2023-06-05 19:40:30 +00:00
bors
e6d4725c76 Auto merge of #112071 - WaffleLapkin:group-rfcs-tests, r=oli-obk
Group rfcs tests

This moves all RFC tests to `tests/ui/rfcs/rfc-NNNN-title-title-title/...`

I had to rename some tests due to conflicts, but otherwise this is just a move.
2023-06-05 19:36:17 +00:00
bors
408bbd0406 Auto merge of #112317 - GuillaumeGomez:rollup-toh0gpo, r=GuillaumeGomez
Rollup of 6 pull requests

Successful merges:

 - #112243 (Remove unneeded `Buffer` allocations when `&mut fmt::Write` can be used directly)
 - #112263 (Remove ExtendElement, ExtendWith, extend_with)
 - #112291 (Disable RustAnalyzer check by default, run Rustfmt check before)
 - #112299 (Don't double-print status messages in GHA)
 - #112311 (Ignore fluent message reordering in `git blame`)
 - #112315 (fix spelling error)

Failed merges:

 - #112251 (rustdoc: convert `if let Some()` that always matches to variable)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-06-05 16:50:32 +00:00
Oli Scherer
58972d19e7 Merge method, type and const object safety checks 2023-06-05 16:39:16 +00:00
Maybe Waffle
18e016f7e0 Bless tidy root entry limit 2023-06-05 16:10:46 +00:00
Maybe Waffle
9d3482c403 Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
Guillaume Gomez
7c363c22a2
Rollup merge of #112315 - lucascherzer:master, r=Nilstrieb
fix spelling error

"rexport" is not valid spelling: https://www.merriam-webster.com/dictionary/re-export
2023-06-05 17:02:53 +02:00
Guillaume Gomez
714ab6dc37
Rollup merge of #112311 - clubby789:blame-ignore-fluent-reorder, r=Nilstrieb
Ignore fluent message reordering in `git blame`

This commit reordered most of our Fluent message files. Since `git blame` can be useful in tracking mistakes made while adapting to translatable diagnostics, ignore this commit in `blame`.
r? `@jyn514`
2023-06-05 17:02:52 +02:00
Guillaume Gomez
154949dacd
Rollup merge of #112299 - jyn514:gha-progress, r=oli-obk
Don't double-print status messages in GHA

Before:

```
Building stage0 tool jsondocck (x86_64-unknown-linux-gnu)
  Building stage0 tool jsondocck (x86_64-unknown-linux-gnu)
   Downloading crates ...
```

After:

```
Building stage0 tool jsondocck (x86_64-unknown-linux-gnu)
   Downloading crates ...
```

r? `@oli-obk`
2023-06-05 17:02:52 +02:00
Guillaume Gomez
0258a16cdc
Rollup merge of #112291 - sigaloid:master, r=clubby789
Disable RustAnalyzer check by default, run Rustfmt check before

Fixes #112287.
2023-06-05 17:02:51 +02:00
Guillaume Gomez
200d03acad
Rollup merge of #112263 - GrishaVar:remove-extend-element, r=scottmcm
Remove ExtendElement, ExtendWith, extend_with

Related to  #104624, broken up into two commits. The first removes wrapper trait ExtendWith and its only implementer struct ExtendElement. The second may have perf issues so may be reverted/removed if no alternate fix is found; it should be profiled.

r? `@scottmcm`
2023-06-05 17:02:51 +02:00
Guillaume Gomez
aabffef06d
Rollup merge of #112243 - GuillaumeGomez:rm-unneeded-buffer-creations, r=notriddle
Remove unneeded `Buffer` allocations when `&mut fmt::Write` can be used directly

With the recent changes, `wrap_item` can now directly take `&mut Write`, which makes some `Buffer` creations unneeded.

r? `@notriddle`
2023-06-05 17:02:50 +02:00
clubby789
1fa769234e Ensure space is inserted after keyword in unused_delims 2023-06-05 14:25:00 +00:00
Oli Scherer
604ffab063 Avoid going through queries if a value of type AssocItem is already available 2023-06-05 14:22:45 +00:00
Luca Scherzer
e30c52d428 fix spelling error 2023-06-05 16:01:09 +02:00
Guillaume Gomez
48c46f275b Move write! arguments directly into the string 2023-06-05 15:31:18 +02:00
bors
2f896da247 Auto merge of #112305 - lnicola:sync-from-ra, r=lnicola
⬆️ rust-analyzer

r? `@ghost`
2023-06-05 13:31:08 +00:00
clubby789
679f29aa73 Ignore fluent message reordering in git blame 2023-06-05 13:25:23 +01:00
Nikita Popov
5ff8767b36 Update to LLVM 16.0.5 2023-06-05 14:19:09 +02:00
Laurențiu Nicola
6c1f108453 Merge commit 'ed87e0a20a9d196a5ea659ea46ae9574be666d4f' into sync-from-ra 2023-06-05 15:10:05 +03:00
bors
ed87e0a20a Auto merge of #14984 - lnicola:rm-test-gate, r=Veykril
Bring back sysroot-abi feature

https://github.com/rust-lang/rust/pull/112305
2023-06-05 11:54:45 +00:00
Laurențiu Nicola
768a6c5931 Add back sysroot-abi feature gate to rust-analyzer 2023-06-05 14:43:31 +03:00
bors
7452822843 Auto merge of #107583 - EsmeYi:aix_xcoff_metadata, r=bjorn3
Support the rustc metadata for AIX

Support the rustc metadata for rlibs and dylibs on AIX.
XCOFF is the object file format on AIX.
2023-06-05 10:42:05 +00:00
Laurențiu Nicola
b8a7d439db Merge commit 'aa9bc8612514d216f84eec218dfd19ab83f3598a' into sync-from-ra 2023-06-05 12:04:23 +03:00
Nilstrieb
c12575d317 Normalize in infcx instead of globally for Option::as_deref suggestion
The projection may contain inference variables. These inference
variables are local to the local inference context. Using
`tcx.normalize_erasing_regions` doesn't work here because this method is
global and does not have access to the inference context. It's therefore
unable to deal with the inference variables. We normalize in the local
inference context instead, which knowns about the inference variables.
2023-06-05 08:34:06 +00:00
bors
aa9bc86125 Auto merge of #14980 - lnicola:sync-from-rust, r=lnicola
Sync from downstream
2023-06-05 08:33:53 +00:00