Kirill Bulatov
57a0ad4343
Stop eagerly resolving inlay hint text edits for VSCode
...
After https://github.com/microsoft/vscode/issues/193124 was fixed,
this change is not needed anymore.
2024-03-11 10:22:02 +01:00
bors
a5035f4931
Auto merge of #16749 - Veykril:on-demand-validation-err, r=Veykril
...
internal: Some method resolution cleanups
2024-03-11 09:18:24 +00:00
bors
1069f57d8b
Auto merge of #16784 - Veykril:body-invalid, r=Veykril
...
internal: Remove synstructure const hack support
The latest version of it no longer emits these
2024-03-11 09:05:26 +00:00
Lukas Wirth
c679482d7e
Add method resolution deref inference var test
2024-03-11 10:02:03 +01:00
Lukas Wirth
458f4a2960
internal: Treat the self param as different from patterns when lowering
2024-03-11 09:46:28 +01:00
Lukas Wirth
558feeab61
internal: Remove synstructure const hack support
2024-03-11 09:44:40 +01:00
bors
15e18a8f07
Auto merge of #117156 - jmillikin:os-unix-socket-ext, r=Amanieu,dtolnay
...
Convert `Unix{Datagram,Stream}::{set_}passcred()` to per-OS traits
These methods are the pre-stabilized API for obtaining peer credentials from an `AF_UNIX` socket, part of the `unix_socket_ancillary_data` feature.
Their current behavior is to get/set one of the `SO_PASSCRED` (Linux), `LOCAL_CREDS_PERSISTENT` (FreeBSD), or `LOCAL_CREDS` (NetBSD) socket options. On other targets the `{set_}passcred()` methods do not exist.
There are two problems with this approach:
1. Having public methods only exist for certain targets isn't permitted in a stable `std` API.
2. These options have generally similar purposes, but they are non-POSIX and their details can differ in subtle and surprising ways (such as whether they continue to be set after the next call to `recvmsg()`).
Splitting into OS-specific extension traits is the preferred solution to both problems.
2024-03-11 07:46:01 +00:00
bors
0931361b8f
Auto merge of #16807 - lnicola:sync-from-rust3, r=lnicola
...
minor: sync last two releases from downstream
Turns out I made quite a mess on the last two syncs, and this PR is a mess too, but I hope it's fine.
2024-03-11 07:41:25 +00:00
Laurențiu Nicola
f65fe4e281
Fix import
2024-03-11 09:31:02 +02:00
Laurențiu Nicola
fb9744e97c
Merge branch 'master' into sync-from-rust3
2024-03-11 09:17:40 +02:00
bors
9eaefd97f1
Auto merge of #122050 - erikdesjardins:sret, r=nikic
...
Stop using LLVM struct types for byval/sret
For `byval` and `sret`, the type has no semantic meaning, only the size matters\*†. Using `[N x i8]` is a more direct way to specify that we want `N` bytes, and avoids relying on LLVM's struct layout.
\*: The alignment would matter, if we didn't explicitly specify it. From what I can tell, we always specified the alignment for `sret`; for `byval`, we didn't until #112157 .
†: For `byval`, the hidden copy may be impacted by padding in the LLVM struct type, i.e. padding bytes may not be copied. (I'm not sure if this is done today, but I think it would be legal.) But we manually pad our LLVM struct types specifically to avoid there ever being LLVM-visible padding, so that shouldn't be an issue.
Split out from #121577 .
r? `@nikic`
2024-03-11 04:45:27 +00:00
bors
db27f6c6ec
Auto merge of #121752 - mu001999:dead_code/improve, r=pnkfelix
...
Detect unused struct impls pub trait
Fixes #47851
2024-03-11 02:46:47 +00:00
bors
10d20311fd
Auto merge of #121561 - jieyouxu:compiletest-directive-typo-check, r=onur-ozkan
...
Detect typos for compiletest test directives
Checks directives against a known list of compiletest directives collected during migration from legacy-style compiletest directives. A suggestion for the best matching known directive will be made if an invalid directive is found.
This PR does not attempt to implement checks for Makefile directives because they still have the problem of regular comments and directives sharing the same comment prefix `#`.
Closes #83551 .
2024-03-10 16:26:18 +00:00
bors
638c880ced
Auto merge of #122272 - lnicola:sync-from-ra, r=lnicola
...
Subtree update of `rust-analyzer`
r? ghost
2024-03-10 14:29:05 +00:00
Laurențiu Nicola
ce642071d8
Bring back in-rust-tree feature to ide
2024-03-10 11:08:11 +02:00
Laurențiu Nicola
dc850b3a86
Bring back in-rust-tree feature to ide
2024-03-10 11:08:11 +02:00
Laurențiu Nicola
aa74d57825
Merge commit '574e23ec508064613783cba3d1833a95fd9a5080' into sync-from-ra
2024-03-10 08:47:38 +02:00
Laurențiu Nicola
9252f33403
Merge commit '574e23ec508064613783cba3d1833a95fd9a5080' into sync-from-ra
2024-03-10 08:47:38 +02:00
Laurențiu Nicola
717ba1d56a
Clippy fixes
2024-03-10 08:42:50 +02:00
bors
ad370bd6e7
Auto merge of #122064 - Zoxc:dep-graph-encode-tweaks, r=cjgillot
...
Dep node encoding cleanups
This does some cleanups around dep node encoding.
Performance change with `-Zthreads=2`:
<table><tr><td rowspan="2">Benchmark</td><td colspan="1"><b>Before</b></th><td colspan="2"><b>After</b></th><td colspan="1"><b>Before</b></th><td colspan="2"><b>After</b></th></tr><tr><td align="right">Time</td><td align="right">Time</td><td align="right">%</th><td align="right">Memory</td><td align="right">Memory</td><td align="right">%</th></tr><tr><td>🟣 <b>clap</b>:check:unchanged</td><td align="right">0.4337s</td><td align="right">0.4306s</td><td align="right"> -0.72%</td><td align="right">88.90 MiB</td><td align="right">89.04 MiB</td><td align="right"> 0.15%</td></tr><tr><td>🟣 <b>hyper</b>:check:unchanged</td><td align="right">0.1541s</td><td align="right">0.1528s</td><td align="right"> -0.86%</td><td align="right">51.99 MiB</td><td align="right">52.03 MiB</td><td align="right"> 0.07%</td></tr><tr><td>🟣 <b>regex</b>:check:unchanged</td><td align="right">0.3286s</td><td align="right">0.3248s</td><td align="right">💚 -1.15%</td><td align="right">71.89 MiB</td><td align="right">71.74 MiB</td><td align="right"> -0.21%</td></tr><tr><td>🟣 <b>syn</b>:check:unchanged</td><td align="right">0.6118s</td><td align="right">0.6057s</td><td align="right">💚 -1.01%</td><td align="right">106.59 MiB</td><td align="right">106.66 MiB</td><td align="right"> 0.06%</td></tr><tr><td>🟣 <b>syntex_syntax</b>:check:unchanged</td><td align="right">1.4570s</td><td align="right">1.4463s</td><td align="right"> -0.74%</td><td align="right">197.29 MiB</td><td align="right">197.33 MiB</td><td align="right"> 0.02%</td></tr><tr><td>Total</td><td align="right">2.9852s</td><td align="right">2.9601s</td><td align="right"> -0.84%</td><td align="right">516.66 MiB</td><td align="right">516.80 MiB</td><td align="right"> 0.03%</td></tr><tr><td>Summary</td><td align="right">1.0000s</td><td align="right">0.9911s</td><td align="right"> -0.89%</td><td align="right">1 byte</td><td align="right">1.00 bytes</td><td align="right"> 0.02%</td></tr></table>
r? `@cjgillot`
2024-03-10 06:27:41 +00:00
Wyatt Herkamp
948a2dee09
Clippy Fix
2024-03-09 14:12:27 -05:00
Wyatt Herkamp
79f2651262
Add cfg_attr and cleanup code
2024-03-09 13:25:56 -05:00
bors
5cdf8948a5
Auto merge of #120985 - Kobzol:linux-update-host-llvm, r=Mark-Simulacrum
...
Update host LLVM on x64 Linux to LLVM 18
Updates host LLVM on Linux to `18.1.0`.
2024-03-09 17:53:30 +00:00
bors
574e23ec50
Auto merge of #16794 - HKalbasi:test-explorer, r=lnicola
...
Some minor changes in the test explorer lsp extension
followup #16662
cc `@nemethf` `@ShuiRuTian`
2024-03-09 10:01:41 +00:00
bors
e175372228
Auto merge of #122102 - Urgau:optimize-symbol-integer, r=cjgillot
...
Optimize `Symbol::integer` by utilizing in-place formatting
This PR optimize `Symbol::integer` by utilizing `itoa` in-place formatting instead of going through a dynamically allocated `String` and the format machinery.
<details>
For some context: I was profiling `rustc --check-cfg` with callgrind and due to the way we currently setup all the targets and we end-up calling `Symbol::integer` multiple times for all the targets. Using `itoa` reduced the number of instructions.
</details>
2024-03-09 08:47:57 +00:00
bors
8f08bbe637
Auto merge of #16795 - mu001999:master, r=Veykril
...
remove unused struct Snap in lsif
Detected by #121752 , see https://github.com/rust-lang/rust/pull/121752#issuecomment-1986378328
2024-03-09 06:30:07 +00:00
bors
f3f4fd0e99
Auto merge of #122095 - lukas-code:windows-shutdown-test, r=ChrisDenton
...
fix `close_read_wakes_up` test
On windows, `shutdown` does not interrupt `read`, even though we document that it does (see https://github.com/rust-lang/rust/issues/121594 ).
The `close_read_wakes_up` test has a race condition and only passes on windows if the `shutdown` happens before the `read`. This PR ignores the test on windows adds a sleep to make it more likely that the `read` happens before the `shutdown` and the test actually tests what it is supposed to test on other platforms.
I'm submitting this before any docs changes, so that we can find out on what platforms `shutdown` actually works as documented.
r? `@ChrisDenton`
2024-03-09 06:23:18 +00:00
bors
0d69dc38cb
Auto merge of #122010 - oli-obk:intrinsics3.0, r=pnkfelix
...
Avoid invoking the `intrinsic` query for DefKinds other than `Fn` or `AssocFn`
fixes the perf regression from https://github.com/rust-lang/rust/pull/120675 by only invoking (and thus inserting into the dep graph) the `intrinsic` query if the `DefKind` matches items that can actually be intrinsics
2024-03-09 01:18:13 +00:00
r0cky
79508d909a
remove unused struct Snap in lsif
2024-03-09 09:09:27 +08:00
hkalbasi
dc99ad912a
Some minor changes in the test explorer lsp extension
2024-03-09 01:21:27 +03:30
Laurențiu Nicola
a12ccd5923
Fix test
2024-03-08 20:39:47 +02:00
Laurențiu Nicola
0f43b55e83
Stop using an Arc when setting the file text
2024-03-08 20:30:12 +02:00
Laurențiu Nicola
02b6c181dd
Compress file text using lz4 in salsa
2024-03-08 20:22:08 +02:00
Wyatt Herkamp
f45b080965
Starting Fix for cfg stripping
2024-03-08 11:10:29 -05:00
bors
2397e7a887
Auto merge of #16787 - pksunkara:remove-macro-call-check, r=lnicola
...
Remove unncessary check for macro call
Since `macro_rules` is a contextual keyword, it is an `IDENT` token and thus `is_path_start` already identifies it correctly. You can tell the previous check is unnecessary because the relevant tests still pass.
2024-03-08 13:23:31 +00:00
bors
2b7b44bf27
Auto merge of #16786 - pksunkara:improve-readability, r=lnicola
...
internal: Improve readability of the parser code
The code is basically equivalent to the previous version, but it improves the readability by making it much more simpler and concise.
2024-03-08 12:21:18 +00:00
bors
f026435289
Auto merge of #122078 - gurry:121443-ice-layout-is-sized-alt, r=oli-obk
...
Check that return type is WF in typeck
Ensures that non-WF types do not pass typeck and then later ICE in MIR/const eval
Fixes #121443
2024-03-08 12:16:42 +00:00
bors
1487bc2af6
Auto merge of #16785 - pksunkara:remove-crate-visibility-recovery, r=lnicola
...
internal: Remove unused keyword from visibility recovery
We removed support `crate` visibility keyword, but forgot to remove it from the recovery token list.
2024-03-08 12:08:06 +00:00
Pavan Kumar Sunkara
a838e44032
Remove unncessary check for macro call
2024-03-08 12:03:35 +00:00
Pavan Kumar Sunkara
2a41b2cd94
Improve readability of the parser code
2024-03-08 12:00:24 +00:00
Pavan Kumar Sunkara
b37ccfce44
Remove unused keyword from visibility recovery
2024-03-08 11:53:03 +00:00
bors
00a0125372
Auto merge of #16782 - DropDemBits:format-string-exprs-comments, r=Veykril
...
fix: Preserve $ and \ in postfix format completions
`parse_format_exprs` doesn't escape these two as of #16781 , so they have to be escaped as a separate step.
2024-03-08 08:23:04 +00:00
bors
31a98cb57d
Auto merge of #122059 - nyurik:with-as-const-str, r=cuviper
...
Optimize write with as_const_str for shorter code
Following up on #121001
Apparently this code generates significant code block for each call to `write()` with non-simple formatting string - approx 100 lines of assembly code, possibly due to `dyn` (?). See generated assembly code [here](https://github.com/nyurik/rust-optimize-format-str/compare/before-changes..with-my-change#diff-6b404e954c692d8cdc8c452d819a216aa5dcf40522b5944639e9ad947279a477 ):
<details><summary>Details</summary>
<p>
This is the inlining of `write!(buffer, "Iteration {value} was written")`
```asm
core::fmt::Write::write_fmt:
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 194
fn write_fmt(&mut self, args: Arguments<'_>) -> Result {
push r15
push r14
push r13
push r12
push rbx
mov rdx, rsi
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 427
match (self.pieces, self.args) {
mov rcx, qword ptr [rsi + 8]
mov rax, qword ptr [rsi + 24]
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 428
([], []) => Some(""),
cmp rcx, 1
je .LBB0_8
test rcx, rcx
jne .LBB0_9
test rax, rax
jne .LBB0_9
// /home/nyurik/dev/rust/rust/library/alloc/src/vec/mod.rs : 911
self.buf.reserve(self.len, additional);
lea r12, [rdi + 16]
lea rsi, [rip + .L__unnamed_2]
xor ebx, ebx
.LBB0_6:
mov r14, qword ptr [r12]
jmp .LBB0_7
.LBB0_8:
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 429
([s], []) => Some(s),
test rax, rax
je .LBB0_4
.LBB0_9:
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 1108
if let Some(s) = args.as_str() { output.write_str(s) } else { write_internal(output, args) }
lea rsi, [rip + .L__unnamed_1]
pop rbx
pop r12
pop r13
pop r14
pop r15
jmp qword ptr [rip + core::fmt::write_internal@GOTPCREL]
.LBB0_4:
mov rax, qword ptr [rdx]
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 429
([s], []) => Some(s),
mov rsi, qword ptr [rax]
mov rbx, qword ptr [rax + 8]
// /home/nyurik/dev/rust/rust/library/alloc/src/raw_vec.rs : 248
if T::IS_ZST { usize::MAX } else { self.cap.0 }
mov rax, qword ptr [rdi]
// /home/nyurik/dev/rust/rust/library/alloc/src/vec/mod.rs : 911
self.buf.reserve(self.len, additional);
mov r14, qword ptr [rdi + 16]
// /home/nyurik/dev/rust/rust/library/core/src/num/mod.rs : 1281
uint_impl! {
sub rax, r14
// /home/nyurik/dev/rust/rust/library/alloc/src/raw_vec.rs : 392
additional > self.capacity().wrapping_sub(len)
cmp rax, rbx
// /home/nyurik/dev/rust/rust/library/alloc/src/raw_vec.rs : 309
if self.needs_to_grow(len, additional) {
jb .LBB0_5
.LBB0_7:
mov rax, qword ptr [rdi + 8]
// /home/nyurik/dev/rust/rust/library/core/src/ptr/mut_ptr.rs : 1046
unsafe { intrinsics::offset(self, count) }
add rax, r14
mov r15, rdi
// /home/nyurik/dev/rust/rust/library/core/src/intrinsics.rs : 2922
copy_nonoverlapping(src, dst, count)
mov rdi, rax
mov rdx, rbx
call qword ptr [rip + memcpy@GOTPCREL]
// /home/nyurik/dev/rust/rust/library/alloc/src/vec/mod.rs : 2040
self.len += count;
add r14, rbx
mov qword ptr [r15 + 16], r14
// /home/nyurik/dev/rust/rust/library/core/src/fmt/mod.rs : 216
}
xor eax, eax
pop rbx
pop r12
pop r13
pop r14
pop r15
ret
.LBB0_5:
// /home/nyurik/dev/rust/rust/library/alloc/src/vec/mod.rs : 911
self.buf.reserve(self.len, additional);
lea r12, [rdi + 16]
mov r15, rdi
mov r13, rsi
// /home/nyurik/dev/rust/rust/library/alloc/src/raw_vec.rs : 310
do_reserve_and_handle(self, len, additional);
mov rsi, r14
mov rdx, rbx
call alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle
mov rsi, r13
mov rdi, r15
jmp .LBB0_6
```
</p>
</details>
```rust
#[inline]
pub fn write(output: &mut dyn Write, args: Arguments<'_>) -> Result {
if let Some(s) = args.as_str() { output.write_str(s) } else { write_internal(output, args) }
}
```
So, this brings back the older experiment - where I used `if core::intrinsics::is_val_statically_known(s.is_some()) { s } else { None }` helper function, and called it in multiple places that used `write`. This is not as optimal because now every user of `write` must do this logic, but at least it results in significantly smaller assembly code for the formatting case, and results in identical code as now for the "simple" (no formatting) case. See [assembly comparison](https://github.com/nyurik/rust-optimize-format-str/compare/with-my-change..with-as-const-str#diff-6b404e954c692d8cdc8c452d819a216aa5dcf40522b5944639e9ad947279a477 ) of what is now with what this change brings (focus only on `fmt/intel-lib.txt` and `str/intel-lib.txt` files).
```rust
if let Some(s) = args.as_const_str() {
self.write_str(s)
} else {
write(self, args)
}
```
2024-03-08 04:15:17 +00:00
bors
8e6c740226
Auto merge of #122048 - erikdesjardins:inbounds, r=oli-obk
...
Use GEP inbounds for ZST and DST field offsets
ZST field offsets have been non-`inbounds` since I made [this old layout change](https://github.com/rust-lang/rust/pull/73453/files#diff-160634de1c336f2cf325ff95b312777326f1ab29fec9b9b21d5ee9aae215ecf5 ). Before that, they would have been `inbounds` due to using `struct_gep`. Using `inbounds` for ZSTs likely doesn't matter for performance, but I'd like to remove the special case.
DST field offsets have been non-`inbounds` since the alignment-aware DST field offset computation was first [implemented](a2557d472e (diff-04fd352da30ca186fe0bb71cc81a503d1eb8a02ca17a3769e1b95981cd20964aR1188)
) in 1.6 (back then `GEPi()` would be used for `inbounds`), but I don't think there was any reason for it.
Split out from #121577 / #121665 .
r? `@oli-obk`
cc `@RalfJung` -- is there some weird situation where field offsets can't be `inbounds`?
Note that it's fine for `inbounds` offsets to be one-past-the-end, so it's okay even if there's a ZST as the last field in the layout:
> The base pointer has an in bounds address of an allocated object, which means that it points into an allocated object, or to its end. [(link)](https://llvm.org/docs/LangRef.html#getelementptr-instruction )
For https://github.com/rust-lang/unsafe-code-guidelines/issues/93 , zero-offset GEP is (now) always `inbounds`:
> Note that getelementptr with all-zero indices is always considered to be inbounds, even if the base pointer does not point to an allocated object. [(link)](https://llvm.org/docs/LangRef.html#getelementptr-instruction )
2024-03-08 02:01:51 +00:00
DropDemBits
bc381837e3
fix: Preserve $
and \
in postfix format completions
...
`parse_format_exprs` doesn't escape these two anymore, so they have to be escaped as a separate step.
2024-03-07 16:55:09 -05:00
DropDemBits
7dadc64d1c
minor: Update comments in format_string_exprs
...
`parse_format_exprs` no longer handles escaping `$` and `\`
2024-03-07 16:08:20 -05:00
bors
48cb059182
Auto merge of #16781 - DropDemBits:extract-format-args-escaping, r=Veykril
...
fix: Don't escape `\` and `$` in "Extract format expressions" assist
Fixes #16745
2024-03-07 20:04:33 +00:00
DropDemBits
1f37e5ac9a
fix: Don't escape \
and $
in "Extract format expressions" assist
2024-03-07 14:20:23 -05:00
bors
7f19beb9b4
Auto merge of #16779 - lnicola:skip-unknown-types-match-diagnostics, r=Veykril
...
minor: Skip match diagnostics for partially unknown types
CC https://github.com/rust-lang/rust-analyzer/issues/16746#issuecomment-1981071008
2024-03-07 17:26:16 +00:00
Laurențiu Nicola
cd2347e132
Skip match diagnostics for partially unknown types
2024-03-07 19:11:23 +02:00