-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 5 pull requests #95414
Rollup of 5 pull requests #95414
Conversation
…f feature gives change of builded crates: 238 -> 224.
…leywiser parallel_compiler: hide dependencies behind feature Separate dependencies for `parallel_compiler` feature, so they will not be compiled if feature not selected, reducing number of compiled crates from 238 to 224.
…wesleywiser diagnostics: correct generic bounds with doubled colon Fixes rust-lang#95208
Fix yet another Box<T, A> ICE Fixes rust-lang#95036. This widens the special case from rust-lang#94414 to make sure that boxes with a custom allocator are never directly dereferenced.
Link to std::io's platform-specific behavior disclaimer This PR adds some links in standard library documentation to point to https://doc.rust-lang.org/std/io/index.html#platform-specific-behavior. > ### Platform-specific behavior > > Many I/O functions throughout the standard library are documented to indicate what various library or syscalls they are delegated to. This is done to help applications both understand what’s happening under the hood as well as investigate any possibly unclear semantics. Note, however, that this is informative, not a binding contract. The implementation of many of these functions are subject to change over time and may call fewer or more syscalls/library functions. Many of the `std::fs` APIs already link to this disclaimer when discussing system calls.
…y, r=scottmcm Inline u8::is_utf8_char_boundary Since Rust beta, Rust is incapable of inlining this function in the following example function. ```rust pub fn safe_substr_to(s: &str, mut length: usize) -> &str { loop { if let Some(s) = s.get(..length) { return s; } length -= 1; } } ``` When compiled with beta or nightly compiler on Godbolt with `-C opt-level=3` flag it prints the following assembly. ```asm example::safe_substr_to: push r15 push r14 push r12 push rbx push rax mov r14, rdi test rdx, rdx je .LBB0_8 mov rbx, rdx mov r15, rsi mov r12, qword ptr [rip + core::num::<impl u8>::is_utf8_char_boundary@GOTPCREL] jmp .LBB0_4 .LBB0_2: je .LBB0_9 .LBB0_3: add rbx, -1 je .LBB0_8 .LBB0_4: cmp rbx, r15 jae .LBB0_2 movzx edi, byte ptr [r14 + rbx] call r12 test al, al je .LBB0_3 mov r15, rbx jmp .LBB0_9 .LBB0_8: xor r15d, r15d .LBB0_9: mov rax, r14 mov rdx, r15 add rsp, 8 pop rbx pop r12 pop r14 pop r15 ret ``` `qword ptr [rip + core::num::<impl u8>::is_utf8_char_boundary@GOTPCREL]` is not inlined. `-C remark=all` outputs the following message: ``` note: /rustc/7bccde19767082c7865a12902fa614ed4f8fed73/library/core/src/str/mod.rs:214:25: inline: _ZN4core3num20_$LT$impl$u20$u8$GT$21is_utf8_char_boundary17hace9f12f5ba07a7fE will not be inlined into _ZN4core3str21_$LT$impl$u20$str$GT$16is_char_boundary17hf2587e9a6b8c5e43E because its definition is unavailable ``` Stable compiler outputs more reasonable code: ```asm example::safe_substr_to: mov rcx, rdx mov rax, rdi test rdx, rdx je .LBB0_9 mov rdx, rsi jmp .LBB0_4 .LBB0_2: cmp rdx, rcx je .LBB0_7 .LBB0_3: add rcx, -1 je .LBB0_9 .LBB0_4: cmp rcx, rdx jae .LBB0_2 cmp byte ptr [rax + rcx], -64 jl .LBB0_3 mov rdx, rcx .LBB0_7: ret .LBB0_9: xor edx, edx ret ```
@bors r+ rollup=never p=5 |
📌 Commit 1f33cd1 has been approved by |
☀️ Test successful - checks-actions |
Finished benchmarking commit (ee915c3): comparison url. Summary: This benchmark run did not return any relevant results. 53 results were found to be statistically significant but too small to be relevant. If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf. @rustbot label: -perf-regression |
Successful merges:
Failed merges:
r? @ghost
@rustbot modify labels: rollup
Create a similar rollup