| Age | Commit message (Collapse) | Author | Lines |
|
|
|
Add `mir-opt` test for more precise drop elaboration
Depends on #69676. This test should ensure that the problem fixed in that PR does not reoccur.
This has been split out from #69676 since the test fails on certain targets where no cleanup blocks are emitted. I have to find the correct `ignore` directives.
r? @oli-obk
|
|
Don't store locals in generators that are immediately overwritten with the resume argument
This fixes https://github.com/rust-lang/rust/issues/69672 and makes https://github.com/rust-lang/rust/pull/69033 pass the async fn size tests again (in other words, there will be no size regression of async fn if both this and https://github.com/rust-lang/rust/pull/69033 land).
~~This is a small botch and I'd rather have a more precise analysis, but that seems much harder to pull off, so this special-cases `Yield` terminators that store the resume argument into a simple local (ie. without any field projections) and explicitly marks that local as "not live" in the suspend point of that yield. We know that this local does not need to be stored in the generator for this suspend point because the next resume would immediately overwrite it with the passed-in resume argument anyways. The local might still end up in the state if it is used across another yield.~~ (this now properly updates the dataflow framework to handle this case)
|
|
Optimize catch_unwind to match C++ try/catch
This refactors the implementation of catching unwinds to allow LLVM to inline the "try" closure directly into the happy path, avoiding indirection. This means that the catch_unwind implementation is (after this PR) zero-cost unless a panic is thrown.
https://rust.godbolt.org/z/cZcUSB is an example of the current codegen in a simple case. Notably, the codegen is *exactly the same* if `-Cpanic=abort` is passed, which is clearly not great.
This PR, on the other hand, generates the following assembly:
```asm
# -Cpanic=unwind:
push rbx
mov ebx,0x2a
call QWORD PTR [rip+0x1c53c] # <happy>
mov eax,ebx
pop rbx
ret
mov rdi,rax
call QWORD PTR [rip+0x1c537] # cleanup function call
call QWORD PTR [rip+0x1c539] # <unfortunate>
mov ebx,0xd
mov eax,ebx
pop rbx
ret
# -Cpanic=abort:
push rax
call QWORD PTR [rip+0x20a1] # <happy>
mov eax,0x2a
pop rcx
ret
```
Fixes #64224, and resolves #64222.
|
|
Rollup of 12 pull requests
Successful merges:
- #69403 (Implement `Copy` for `IoSlice`)
- #69460 (Move some `build-pass` tests to `check-pass`)
- #69723 (Added doc on keyword Pub.)
- #69802 (fix more clippy findings)
- #69809 (remove lifetimes that can be elided (clippy::needless_lifetimes))
- #69947 (Clean up E0423 explanation)
- #69949 (triagebot.toml: add ping aliases)
- #69954 (rename panic_if_ intrinsics to assert_)
- #69960 (miri engine: fix treatment of abort intrinsic)
- #69966 (Add more regression tests)
- #69973 (Update stable-since version for const_int_conversion)
- #69974 (Clean up E0434 explanation)
Failed merges:
r? @ghost
|
|
Clean up E0434 explanation
r? @Dylan-DPC
|
|
Update stable-since version for const_int_conversion
Since #69373 was not merged in time for 1.43.0 beta, update to `since = "1.44.0"`.
|
|
Add more regression tests
Closes #58490, closes #60390, closes #62504, closes #67739, closes #69092
r? @Centril
|
|
miri engine: fix treatment of abort intrinsic
I screwed up in https://github.com/rust-lang/rust/pull/69830 and added `abort` to the wrong block of intrinsics, namely the one that actually has a return place. So that branch was never actually reached.
r? @oli-obk
|
|
rename panic_if_ intrinsics to assert_
[Suggested by @eddyb](https://github.com/rust-lang/miri/issues/1222#issuecomment-598087523)
|
|
triagebot.toml: add ping aliases
I think I got the syntax right.
Closes https://github.com/rust-lang/triagebot/issues/402.
r? @Mark-Simulacrum
cc @pnkfelix
|
|
Clean up E0423 explanation
r? @Dylan-DPC
|
|
remove lifetimes that can be elided (clippy::needless_lifetimes)
|
|
fix more clippy findings
* reduce references on match patterns (clippy::match_ref_pats)
* Use writeln!(fmt, "word") instead of write!(fmt, "word\n") (clippy::write_with_newline)
* libtest: remove redundant argument to writeln!() (clippy::writeln_empty_string)
* remove unneeded mutable references (cippy::unnecessary_mut_passed)
* libtest: declare variables as floats instead of casting them (clippy::unnecessary_cast)
* rustdoc: remove redundant static lifetimes (clippy::redundant_static_lifetimes)
* call .as_deref() instead of .as_ref().map(Deref::deref) (clippy::option_as_ref_deref)
* iterate over a maps values directly. (clippy::for_kv_map)
* rustdoc: simplify boolean condition (clippy::nonminimal_bool)
* Use ?-operator in more places (clippy::question_mark, had some false negatives fixed recently)
* rustdoc: Use .any(p) instead of find(p).is_some(). (clippy::search_is_some)
* rustdoc: don't call into_iter() on iterator. (clippy::identity_conversion)
|
|
Added doc on keyword Pub.
Hi, this is my first pull request. I hope it's OK. Please let me know if it would benefit from any changes. Thank you.
|
|
Move some `build-pass` tests to `check-pass`
Helps with #62277.
r? @cramertj cc @Centril
|
|
Implement `Copy` for `IoSlice`
Resolves #69395
r? @sfackler
|
|
Add support for LLVM globals corresponding to miri allocations should be named alloc123
Adds support for this request from @eddyb in #69134:
> That is, if -Zfewer-names is false (usually only because of --emit=llvm-ir), we should use the same name for LLVM globals we generate out of miri allocs as #67133 does in MIR output (allocN).
>
>This way, we can easily see the mapping between MIR and LLVM IR (and it shouldn't be any costlier for regular compilation, which would continue to use unnamed globals).
r? @eddyb
cc @oli-obk
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rollup of 10 pull requests
Successful merges:
- #68899 (Add Display and Error impls for proc_macro::LexError)
- #69011 (Document unsafe blocks in core::fmt)
- #69674 (Rename DefKind::Method and TraitItemKind::Method )
- #69705 (Toolstate: remove redundant beta-week check.)
- #69722 (Tweak output for invalid negative impl AST errors)
- #69747 (Rename rustc guide)
- #69792 (Implement Error for TryReserveError)
- #69830 (miri: ICE on invalid terminators)
- #69921 (rustdoc: remove unused import)
- #69945 (update outdated comment)
Failed merges:
r? @ghost
|
|
|
|
update outdated comment
|
|
rustdoc: remove unused import
```
Checking rustdoc v0.0.0 (/home/matthias/vcs/github/rust/src/librustdoc)
warning: unused import: `rustc_span::symbol::sym`
--> src/librustdoc/clean/inline.rs:15:5
|
15 | use rustc_span::symbol::sym;
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
```
|
|
miri: ICE on invalid terminators
We've run a lot of MIR in Miri (including some generators) and never seen these.
@tmandry is it correct that `Yield` and `GeneratorDrop` get lowered away?
@eddyb @oli-obk what's with this `Abort` that does not seem to ever actually exist? Codegen *does* seem to handle it, so I wonder why Miri can get away without that. In fact, codegen handles it twice:
https://github.com/rust-lang/rust/blob/1d5241c96208ca7d925442b1a5fa45ad18717a6f/src/librustc_codegen_ssa/mir/block.rs#L796
https://github.com/rust-lang/rust/blob/1d5241c96208ca7d925442b1a5fa45ad18717a6f/src/librustc_codegen_ssa/mir/mod.rs#L296
|
|
Implement Error for TryReserveError
I noticed that the Error trait wasn't implemented for TryReserveError. (#48043)
Not sure if the error messages and code style are 100% correct, it's my first time contributing to the Rust std.
|
|
Rename rustc guide
This is in preparation for https://github.com/rust-lang/rustc-guide/issues/470
Needs to be merged after we actually rename the guide.
Have used this to rename:
`git grep -l 'rustc_guide' | xargs sed -i 's/rustc_guide/rustc_dev_guide/g'`
`git grep -l 'rustc-guide' | xargs sed -i 's/rustc-guide/rustc-dev-guide/g'`
`git grep -l 'rustc guide' | xargs sed -i 's/rustc guide/rustc dev guide/g'`
|
|
Tweak output for invalid negative impl AST errors
Use more accurate spans for negative `impl` errors.
r? @Centril
|
|
r=Mark-Simulacrum
Toolstate: remove redundant beta-week check.
I made a bit of a mistake in #69624. The "beta regression" doesn't need to be checked twice.
I also rolled up #69693 to avoid merge conflicts.
|
|
Rename DefKind::Method and TraitItemKind::Method
r? @eddyb, @Centril, or @matthewjasper
cc #69498 #60163
|
|
Document unsafe blocks in core::fmt
r? @RalfJung
CC: @rust-lang/wg-unsafe-code-guidelines
#66219
Sorry for the hiatus, but here's a few more files with the unsafe blocks documented! I think working on it smaller chunks like this will be easier for everyone.
|
|
Add Display and Error impls for proc_macro::LexError
This should allow LexError to play much nicer with the `?` operator.
Fixes #68896.
(I'm not sure if I did the stability attributes right, so if I need to change them, please let me know!)
|
|
|
|
|
|
|
|
|
|
perf: Reuse a Vec in mir simplification
Just moves the vec out of the outer loop so it is reused every iteration
|