Runtime code is generated for functions only used in const eval
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Code
I tried this code:
- https://godbolt.org/z/M33K6afz8
- https://play.rust-lang.org/?version=beta&mode=release&edition=2018&gist=095cc1d85dfd25b5dd1bc742fbf98432
I expected to see this happen: Both check1 and check2 should compile to functions that just use a compiletime-evaluated struct value
Instead, this happened: check1 disapeared from the assembly, and it looks like all the code needed to runtime-evaluate it got added instead
The weird thing is that the function that regressed is the one that uses a const item by name, rather than the one that just calls a const function inside a non-const function body.
Version it worked on
It most recently worked on: 1.74.1 (stable as of writing this)
Version with regression
from playground:
1.76.0-beta.1 (2023-12-21 0e09125c6c3c2fd70d7d)
1.77.0-nightly (2023-12-21 3d0e6bed600c0175628e)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked Godbolt and Rust Playground reproductions, comparing stable 1.74.1 with the listed beta and nightly versions and inspecting the generated assembly. Trace the compiler behavior for the named const item versus the direct const-function call. Done means both functions compile to code using the compile-time-evaluated value without unnecessary runtime evaluation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100