Skip to content

compiler: Require mir_opt_level > 1 for SingleUseConsts MIR pass#151426

Open
Enselic wants to merge 2 commits intorust-lang:mainfrom
Enselic:single-use-consts-mir-opt-level
Open

compiler: Require mir_opt_level > 1 for SingleUseConsts MIR pass#151426
Enselic wants to merge 2 commits intorust-lang:mainfrom
Enselic:single-use-consts-mir-opt-level

Conversation

@Enselic
Copy link
Member

@Enselic Enselic commented Jan 20, 2026

The default MIR opt level is 1 for non-optimized builds:

.unwrap_or_else(|| if self.opts.optimize != OptLevel::No { 2 } else { 1 })

Require mir_opt_level > 1 for SingleUseConsts MIR pass to make tests/debuginfo/basic-stepping.rs work again which builds with debuginfo but without optimizations. That test regressed when a precursor to SingleUseConsts was enabled. Well, the test didn't exist back then (I added it in #144876), but if it had existed, it would have regressed. ConstDebugInfo was later replaced by SingleUseConsts.

This takes us one step closer towards closing #33013.

Blocked On:

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jan 20, 2026
@rust-log-analyzer

This comment has been minimized.

@Enselic Enselic changed the title compiler: Require mir-opt-level > 2 for SingleUseConsts compiler: Require mir-opt-level > 1 for SingleUseConsts Jan 20, 2026
@Enselic Enselic force-pushed the single-use-consts-mir-opt-level branch from 3c16dbc to 2be3ec0 Compare January 20, 2026 19:51
@Enselic Enselic force-pushed the single-use-consts-mir-opt-level branch from 2be3ec0 to 6b292c7 Compare January 21, 2026 05:47
@Enselic Enselic changed the title compiler: Require mir-opt-level > 1 for SingleUseConsts compiler: Require mir-opt-level > 1 for SingleUseConsts Jan 21, 2026
@Enselic Enselic changed the title compiler: Require mir-opt-level > 1 for SingleUseConsts compiler: Require mir-opt-level > 1 for SingleUseConsts Jan 21, 2026
@rust-bors

This comment has been minimized.

@Enselic Enselic force-pushed the single-use-consts-mir-opt-level branch from 6b292c7 to d7fffab Compare January 22, 2026 05:15
@Enselic Enselic changed the title compiler: Require mir-opt-level > 1 for SingleUseConsts compiler: Require mir_opt_level > 1 for SingleUseConsts MIR pass Jan 22, 2026
@Enselic Enselic marked this pull request as ready for review January 22, 2026 06:39
@rustbot
Copy link
Collaborator

rustbot commented Jan 22, 2026

Some changes occurred to MIR optimizations

cc @rust-lang/wg-mir-opt

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jan 22, 2026
@rustbot
Copy link
Collaborator

rustbot commented Jan 22, 2026

r? @chenyukang

rustbot has assigned @chenyukang.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@Enselic
Copy link
Member Author

Enselic commented Jan 23, 2026

I have an idea for a better fix to check_allocation.rs.

@rustbot author

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 23, 2026
@chenyukang
Copy link
Member

@rustbot reroll

@Enselic
Copy link
Member Author

Enselic commented Feb 14, 2026

I have an idea for a better fix to check_allocation.rs.

Here is a PR with the proper solution:

I have updated the PR description of this PR accordingly.

tests: rustc_public: Check const allocation for all variables (1 of 11 was missing)

In the test `tests/ui-fulldeps/rustc_public/check_allocation.rs` there
is a check for constant allocations of local variables of this function:

    fn other_consts() {{
        let _max_u128 = u128::MAX;
        let _min_i128 = i128::MIN;
        let _max_i8 = i8::MAX;
        let _char = 'x';
        let _false = false;
        let _true = true;
        let _ptr = &BAR;
        let _null_ptr: *const u8 = NULL;
        let _tuple = TUPLE;
        let _char_id = const {{ type_id::<char>() }};
        let _bool_id = const {{ type_id::<bool>() }};
    }}

The current test only finds 10 out of 11 allocations. The constant
allocation for

    let _ptr = &BAR;

is not checked, because the `SingleUseConsts` MIR pass does not optimize
away that assignment. Add code to also collect constant allocation from
assignment rvalues. Not only does this change make sense on its own, it
also makes the test pass both with and without the `SingleUseConsts`
pass.
To make `tests/debuginfo/basic-stepping.rs` prevent further regressions
of issue 33013.
@Enselic Enselic force-pushed the single-use-consts-mir-opt-level branch from d7fffab to 9eabf52 Compare February 16, 2026 17:29
@rustbot
Copy link
Collaborator

rustbot commented Feb 16, 2026

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants