Skip to content

Rollup of 15 pull requests #144071

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

Closed
wants to merge 82 commits into from
Closed

Conversation

fmease
Copy link
Member

@fmease fmease commented Jul 17, 2025

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

cjgillot and others added 30 commits July 1, 2025 11:37
See RUST-141600: this test is broken in two ways:

1. This test triggers `-Wincompatible-pointer-types` on GCC 14.
2. This test requires ARMv8.5+ w/ MTE extensions enabled, but GHA CI
   runner hardware do not have this enabled.
./x is recommended over running ./x.py directly,
and is the more commonly-used invocation of bootstrap in the guide
use a consistent (and recommended) invocation
- --depth=1 is more useful for once-off uses, like on ci
- .git postfix on github repo url is not needed
That is, calling it an example is misleading
Nowhere else is this called "Dist check"
distcheck has only one possible invocation
fmease added 3 commits July 17, 2025 14:59
…buginfo, r=wesleywiser

tests: Test line number in debuginfo for diverging function calls

Closes rust-lang#59558 which just [E-needs-test](rust-lang#59558 (comment)).

The bug seems to have been fixed in **nightly-2021-05-10**:

```sh
for toolchain in nightly-2021-05-09 \
                 nightly-2021-05-10 \
                 1.88; do
    echo -e "\nWith $toolchain:"
    rustc +$toolchain tests/codegen/diverging-function-call-debuginfo.rs --emit llvm-ir -o /tmp/out.ll -g -Clto -Copt-level=0
    build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck --input-file /tmp/out.ll tests/codegen/diverging-function-call-debuginfo.rs --check-prefix=CHECK --dump-input-context 10 2>/dev/null && echo OK || echo FAIL
done
```

```
With nightly-2021-05-09:
FAIL

With nightly-2021-05-10:
OK

With 1.88:
OK
```

which gives the following list of candidate commits. Not clear which one it is exactly but it doesn't matter much since we can confirm that the test works. I have confirmed locally that with **nightly-2021-05-09** we get `line: 0` for the last call.

<details>
<summary>click to expand</summary>

```
$ git log ^881c1ac408d93bb7adaa3a51dabab9266e82eee8 ca82264 --no-merges --oneline
```
f25aa57 Remove unused `opt_span_warn` function
ebbc949 Note why `Handler::fatal` is different from `Sesssion::fatal`
96509b4 Make `Diagnostic::span_fatal` unconditionally raise an error
e49f447 Remove some unnecessary uses of `struct_span_fatal`
955fdae Rename `Parser::span_fatal_err` -> `Parser::span_err`
4b7c8b0 Add `#[track_caller]` to `FakeDefId::expect_real()`
ba13225 Remove `FakeDefId::expect_local()`
020d83d Enable `-W semicolon_in_expressions_from_macros` in bootstrap
1b928ff Update LLVM submodule
c2b15a6 Support -C passes in NewPM
5519cbf Don't force -O1 with ThinLTO
7c4989a Drop -opt-bisect-limit=0 flag from test
db140de Explicitly register GCOV profiling pass as well
5ecbe7f Explicitly register instrprof pass
0318883 Make -Z new-llvm-pass-manager an Option<bool>
0367e24 Avoid predecessors having Drop impls

</details>
rustc-dev-guide subtree update

r? ghost
Copy GCC sources into the build directory even outside CI

It takes ~3.5s on my Linux notebook to perform the copy, but it should only be executed when we actually go build GCC, and that will almost certainly take much longer :) So I think it should be fine. At least we won't be polluting the source directory for local builds.

Fixes: rust-lang#143986

r? ``@nikic``
@rustbot rustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-run-make Area: port run-make Makefiles to rmake.rs A-rustc-dev-guide Area: rustc-dev-guide PG-exploit-mitigations Project group: Exploit mitigations S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-clippy Relevant to the Clippy team. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jul 17, 2025
@fmease
Copy link
Member Author

fmease commented Jul 17, 2025

[@]matthiaskrgr, if you're reading this. I've preemptively/already created this rollup PR so that the p=1 rollup=always PR #143879 doesn't immediately get tested solo once rollup #144058 merges but instead gets tested as part of a rollup.

@fmease
Copy link
Member Author

fmease commented Jul 17, 2025

@bors r+ rollup=never p=5

@bors
Copy link
Collaborator

bors commented Jul 17, 2025

📌 Commit ba0656f has been approved by fmease

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 17, 2025
@bors
Copy link
Collaborator

bors commented Jul 17, 2025

⌛ Testing commit ba0656f with merge df829ad...

bors added a commit that referenced this pull request Jul 17, 2025
Rollup of 15 pull requests

Successful merges:

 - #142300 (Disable `tests/run-make/mte-ffi` because no CI runners have MTE extensions enabled)
 - #143271 (Store the type of each GVN value)
 - #143293 (fix `-Zsanitizer=kcfi` on `#[naked]` functions)
 - #143719 (Emit warning when there is no space between `-o` and arg)
 - #143833 (Ban projecting into SIMD types [MCP838])
 - #143846 (pass --gc-sections if -Zexport-executable-symbols is enabled and improve tests)
 - #143879 (parse `const trait Trait`)
 - #143891 (Port `#[coverage]` to the new attribute system)
 - #143967 (constify `Option` methods)
 - #143985 (rustc_public: de-StableMIR-ize)
 - #144008 (Fix false positive double negations with macro invocation)
 - #144010 (Boostrap: add warning on `optimize = false`)
 - #144034 (tests: Test line number in debuginfo for diverging function calls)
 - #144049 (rustc-dev-guide subtree update)
 - #144056 (Copy GCC sources into the build directory even outside CI)

r? `@ghost`
`@rustbot` modify labels: rollup
@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-19-3 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
---- [ui] tests/ui/rustc_public-ir-print/async-closure.rs stdout ----
Saved the actual stdout to `/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/async-closure/async-closure.stdout`
diff of stdout:

- // WARNING: This is highly experimental output it's intended for stable-mir developers only.
+ // WARNING: This is highly experimental output it's intended for rustc_public developers only.
2 // If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
3 fn foo() -> () {
4     let mut _0: ();


The actual stdout differed from the expected stdout
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args rustc_public-ir-print/async-closure.rs`

error: 1 errors occurred comparing output.
status: exit status: 0
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" "/checkout/tests/ui/rustc_public-ir-print/async-closure.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/async-closure" "-A" "unused" "-A" "internal_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2024" "-Z" "unpretty=stable-mir" "--crate-type" "lib" "-C" "panic=abort" "-Zmir-opt-level=0"
--- stdout -------------------------------
// WARNING: This is highly experimental output it's intended for rustc_public developers only.
// If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
fn foo() -> () {
    let mut _0: ();
    let  _1: i32;
    let  _2: {async closure@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:13: 9:21};
    let mut _3: &i32;
    debug y => _1;
    debug x => _2;
    bb0: {
        StorageLive(_1);
        _1 = 0_i32;
        StorageLive(_2);
        StorageLive(_3);
        _3 = &_1;
        _2 = {coroutine-closure@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:13: 9:21}(move _3);
        StorageDead(_3);
        _0 = ();
        StorageDead(_2);
        StorageDead(_1);
        return;
    }
}
fn foo::{closure#0}(_1: &{async closure@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:13: 9:21}) -> {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6} {
    let mut _0: {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    let mut _2: &i32;
    let mut _3: &i32;
    debug y => (*((*_1).0: &i32));
    bb0: {
        StorageLive(_2);
        _3 = CopyForDeref(((*_1).0: &i32));
        _2 = &(*_3);
        _0 = {coroutine@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}(move _2);
        StorageDead(_2);
        return;
    }
}
fn foo::{closure#0}::{closure#0}(_1: Pin<&mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}>, _2: &mut Context<'_>) -> Poll<()> {
    let mut _0: Poll<()>;
    let  _3: i32;
    let mut _4: &i32;
    let mut _5: ();
    let mut _6: &mut Context<'_>;
    let mut _7: u32;
    let mut _8: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    let mut _9: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    let mut _10: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    debug _task_context => _6;
    debug y => (*((*(_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6})).0: &i32));
    debug y => _3;
    bb0: {
        _8 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        _7 = discriminant((*_8));
        switchInt(move _7) -> [0: bb1, 1: bb2, otherwise: bb3];
    }
    bb1: {
        _6 = move _2;
        StorageLive(_3);
        _9 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        _4 = CopyForDeref(((*_9).0: &i32));
        _3 = (*_4);
        _5 = ();
        StorageDead(_3);
        _0 = std::task::Poll::Ready(move _5);
        _10 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        discriminant((*_10) = 1;
        return;
    }
    bb2: {
        assert(false, `async fn` resumed after completion) -> [success: bb2, unwind unreachable];
    }
    bb3: {
        unreachable;
    }
}
fn foo::{closure#0}::{synthetic#0}(_1: Pin<&mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}>, _2: &mut Context<'_>) -> Poll<()> {
    let mut _0: Poll<()>;
    let  _3: i32;
    let mut _4: &i32;
    let mut _5: ();
    let mut _6: &mut Context<'_>;
    let mut _7: u32;
    let mut _8: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    let mut _9: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    let mut _10: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6};
    debug _task_context => _6;
    debug y => (*((*(_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6})).0: &i32));
    debug y => _3;
    bb0: {
        _8 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        _7 = discriminant((*_8));
        switchInt(move _7) -> [0: bb1, 1: bb2, otherwise: bb3];
    }
    bb1: {
        _6 = move _2;
        StorageLive(_3);
        _9 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        _4 = CopyForDeref(((*_9).0: &i32));
        _3 = (*_4);
        _5 = ();
        StorageDead(_3);
        _0 = std::task::Poll::Ready(move _5);
        _10 = CopyForDeref((_1.0: &mut {async closure body@/checkout/tests/ui/rustc_public-ir-print/async-closure.rs:9:22: 11:6}));
        discriminant((*_10) = 1;
        return;
    }
    bb2: {
        assert(false, `async fn` resumed after completion) -> [success: bb2, unwind unreachable];
    }
    bb3: {
        unreachable;
    }
}
---
---- [ui] tests/ui/rustc_public-ir-print/basic_function.rs stdout ----
Saved the actual stdout to `/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/basic_function/basic_function.stdout`
diff of stdout:

- // WARNING: This is highly experimental output it's intended for stable-mir developers only.
+ // WARNING: This is highly experimental output it's intended for rustc_public developers only.
2 // If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
3 fn foo(_1: i32) -> i32 {
4     let mut _0: i32;


The actual stdout differed from the expected stdout
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args rustc_public-ir-print/basic_function.rs`

error: 1 errors occurred comparing output.
status: exit status: 0
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" "/checkout/tests/ui/rustc_public-ir-print/basic_function.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/basic_function" "-A" "unused" "-A" "internal_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-Z" "unpretty=stable-mir" "-Zmir-opt-level=0"
--- stdout -------------------------------
// WARNING: This is highly experimental output it's intended for rustc_public developers only.
// If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
fn foo(_1: i32) -> i32 {
    let mut _0: i32;
    let mut _2: i32;
    let mut _3: (i32, bool);
    debug i => _1;
    bb0: {
        StorageLive(_2);
        _2 = _1;
        _3 = CheckedAdd(_2, 1_i32);
        assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, 1_i32) -> [success: bb1, unwind continue];
    }
    bb1: {
        _0 = move (_3.0: i32);
        StorageDead(_2);
        return;
    }
}
fn bar(_1: &mut Vec<i32>) -> Vec<i32> {
---
    debug new_vec => _2;
    bb0: {
        StorageLive(_2);
        StorageLive(_3);
        _3 = &(*_1);
        _2 = <Vec<i32> as Clone>::clone(move _3) -> [return: bb1, unwind continue];
    }
    bb1: {
        StorageDead(_3);
        StorageLive(_4);
        StorageLive(_5);
        _5 = &mut _2;
        _4 = Vec::<i32>::push(move _5, 1_i32) -> [return: bb2, unwind: bb3];
    }
    bb2: {
        StorageDead(_5);
        StorageDead(_4);
        _0 = move _2;
        StorageDead(_2);
        return;
    }
    bb3: {
        drop(_2) -> [return: bb4, unwind terminate];
    }
    bb4: {
        resume;
    }
}
fn demux(_1: u8) -> u8 {
    let mut _0: u8;
    debug input => _1;
    bb0: {
        switchInt(_1) -> [0: bb4, 1: bb3, 2: bb2, otherwise: bb1];
    }
    bb1: {
        _0 = 0_u8;
        goto -> bb5;
    }
---
---- [ui] tests/ui/rustc_public-ir-print/operands.rs stdout ----
Saved the actual stdout to `/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/operands/operands.stdout`
diff of stdout:

- // WARNING: This is highly experimental output it's intended for stable-mir developers only.
+ // WARNING: This is highly experimental output it's intended for rustc_public developers only.
2 // If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
3 fn operands(_1: u8) -> () {
4     let mut _0: ();


The actual stdout differed from the expected stdout
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args rustc_public-ir-print/operands.rs`

error: 1 errors occurred comparing output.
status: exit status: 0
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1/bin/rustc" "/checkout/tests/ui/rustc_public-ir-print/operands.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage1" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/rustc_public-ir-print/operands" "-A" "unused" "-A" "internal_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-Z" "unpretty=stable-mir" "--crate-type" "lib" "-C" "panic=abort" "-Zmir-opt-level=0"
--- stdout -------------------------------
// WARNING: This is highly experimental output it's intended for rustc_public developers only.
// If you find a bug or want to improve the output open a issue at https://github.com/rust-lang/project-stable-mir.
fn operands(_1: u8) -> () {
    let mut _0: ();
    let  _2: [u8; 10];
    let mut _3: u8;
    let  _4: u8;
    let  _5: usize;
    let mut _6: bool;
    let  _7: u8;
    let  _8: usize;
    let mut _9: (usize, bool);
    let mut _10: bool;
    let  _11: ();
    let mut _12: (&u8, &u8);
    let mut _13: &u8;
    let mut _14: &u8;
    let  _15: &u8;
    let  _16: &u8;
    let mut _17: bool;
    let mut _18: u8;
    let mut _19: u8;
    let mut _20: !;
    let  _21: core::panicking::AssertKind;
    let  _22: !;
    let mut _23: core::panicking::AssertKind;
    let mut _24: &u8;
    let  _25: &u8;
    let mut _26: &u8;
    let  _27: &u8;
    let mut _28: Option<Arguments<'_>>;
    let  _29: &u8;
    let  _30: u8;
    let  _31: ();
    let mut _32: (&u8, &u8);
    let mut _33: &u8;
    let mut _34: &u8;
    let  _35: &u8;
    let  _36: &u8;
    let mut _37: bool;
    let mut _38: u8;
    let mut _39: u8;
    let mut _40: !;
    let  _41: core::panicking::AssertKind;
    let  _42: !;
    let mut _43: core::panicking::AssertKind;
    let mut _44: &u8;
    let  _45: &u8;
    let mut _46: &u8;
    let  _47: &u8;
    let mut _48: Option<Arguments<'_>>;
    let  _49: (u8, u8);
    let mut _50: u8;
    let mut _51: u8;
    let  _52: u8;
    let  _53: u8;
    let  _54: ();
    let mut _55: (&u8, &u8);
    let mut _56: &u8;
    let mut _57: &u8;
    let  _58: &u8;
    let  _59: &u8;
    let mut _60: bool;
    let mut _61: u8;
    let mut _62: u8;
    let mut _63: !;
    let  _64: core::panicking::AssertKind;
    let  _65: !;
    let mut _66: core::panicking::AssertKind;
    let mut _67: &u8;
    let  _68: &u8;
    let mut _69: &u8;
    let  _70: &u8;
    let mut _71: Option<Arguments<'_>>;
    let  _72: usize;
    let mut _73: &[u8];
    let mut _74: &[u8; 10];
    let  _75: usize;
    let mut _76: &usize;
    let  _77: &usize;
    let  _78: ();
    let mut _79: (&usize, &usize);
    let mut _80: &usize;
    let mut _81: &usize;
    let  _82: &usize;
    let  _83: &usize;
    let mut _84: bool;
    let mut _85: usize;
    let mut _86: usize;
    let mut _87: !;
    let  _88: core::panicking::AssertKind;
    let  _89: !;
    let mut _90: core::panicking::AssertKind;
    let mut _91: &usize;
    let  _92: &usize;
    let mut _93: &usize;
    let  _94: &usize;
    let mut _95: Option<Arguments<'_>>;
    debug val => _1;
    debug array => _2;
    debug first => _4;
    debug last => _7;
    debug left_val => _15;
    debug right_val => _16;
    debug kind => _21;
    debug reference => _29;
    debug dereferenced => _30;
    debug left_val => _35;
    debug right_val => _36;
    debug kind => _41;
    debug tuple => _49;
    debug first_again => _52;
    debug first_again_again => _53;
    debug left_val => _58;
    debug right_val => _59;
    debug kind => _64;
    debug length => _72;
    debug size_of => _75;
    debug left_val => _82;
    debug right_val => _83;
    debug kind => _88;
    bb0: {
        StorageLive(_2);
        StorageLive(_3);
        _3 = _1;
        _2 = [move _3; 10];
        StorageDead(_3);
        StorageLive(_4);
        StorageLive(_5);
        _5 = 0_usize;
        _6 = Lt(_5, 10_usize);
        assert(move _6, "index out of bounds: the length is {} but the index is {}", 10_usize, _5) -> [success: bb1, unwind unreachable];
    }
    bb1: {
        _4 = _2[_5];
        StorageDead(_5);
        StorageLive(_7);
        StorageLive(_8);
        _9 = CheckedSub(10_usize, 1_usize);
        assert(!move (_9.1: bool), "attempt to compute `{} - {}`, which would overflow", 10_usize, 1_usize) -> [success: bb2, unwind unreachable];
    }
    bb2: {
        _8 = move (_9.0: usize);
        _10 = Lt(_8, 10_usize);
        assert(move _10, "index out of bounds: the length is {} but the index is {}", 10_usize, _8) -> [success: bb3, unwind unreachable];
    }
    bb3: {
        _7 = _2[_8];
        StorageDead(_8);
        StorageLive(_11);
        StorageLive(_12);
        StorageLive(_13);
        _13 = &_4;
        StorageLive(_14);
        _14 = &_7;
        _12 = (move _13, move _14);
        StorageDead(_14);
        StorageDead(_13);
        StorageLive(_15);
        _15 = (_12.0: &u8);
        StorageLive(_16);
        _16 = (_12.1: &u8);
        StorageLive(_17);
        StorageLive(_18);
        _18 = (*_15);
        StorageLive(_19);
        _19 = (*_16);
        _17 = Eq(move _18, move _19);
        switchInt(move _17) -> [0: bb5, otherwise: bb4];
    }
    bb4: {
        StorageDead(_19);
        StorageDead(_18);
        _11 = ();
---
        StorageLive(_32);
        StorageLive(_33);
        _33 = &_30;
        StorageLive(_34);
        _34 = &_4;
        _32 = (move _33, move _34);
        StorageDead(_34);
        StorageDead(_33);
        StorageLive(_35);
        _35 = (_32.0: &u8);
        StorageLive(_36);
        _36 = (_32.1: &u8);
        StorageLive(_37);
        StorageLive(_38);
        _38 = (*_35);
        StorageLive(_39);
        _39 = (*_36);
        _37 = Eq(move _38, move _39);
        switchInt(move _37) -> [0: bb7, otherwise: bb6];
    }
    bb5: {
        StorageDead(_19);
        StorageDead(_18);
        StorageLive(_21);
---
        _27 = &(*_16);
        _26 = &(*_27);
        StorageLive(_28);
        _28 = std::option::Option::None;
        _22 = core::panicking::assert_failed::<u8, u8>(move _23, move _24, move _26, move _28) -> unwind unreachable;
    }
    bb6: {
        StorageDead(_39);
        StorageDead(_38);
        _31 = ();
---
        StorageLive(_49);
        StorageLive(_50);
        _50 = _4;
        StorageLive(_51);
        _51 = _7;
        _49 = (move _50, move _51);
        StorageDead(_51);
        StorageDead(_50);
        StorageLive(_52);
        _52 = (_49.0: u8);
        StorageLive(_53);
        _53 = (_49.0: u8);
        StorageLive(_54);
        StorageLive(_55);
        StorageLive(_56);
        _56 = &_52;
        StorageLive(_57);
        _57 = &_53;
        _55 = (move _56, move _57);
        StorageDead(_57);
        StorageDead(_56);
        StorageLive(_58);
        _58 = (_55.0: &u8);
        StorageLive(_59);
        _59 = (_55.1: &u8);
        StorageLive(_60);
        StorageLive(_61);
        _61 = (*_58);
        StorageLive(_62);
        _62 = (*_59);
        _60 = Eq(move _61, move _62);
        switchInt(move _60) -> [0: bb9, otherwise: bb8];
    }
    bb7: {
        StorageDead(_39);
        StorageDead(_38);
        StorageLive(_41);
---
        _47 = &(*_36);
        _46 = &(*_47);
        StorageLive(_48);
        _48 = std::option::Option::None;
        _42 = core::panicking::assert_failed::<u8, u8>(move _43, move _44, move _46, move _48) -> unwind unreachable;
    }
    bb8: {
        StorageDead(_62);
        StorageDead(_61);
        _54 = ();
---
        StorageDead(_54);
        StorageLive(_72);
        StorageLive(_73);
        StorageLive(_74);
        _74 = &_2;
        _73 = move _74 as &[u8];
        StorageDead(_74);
        _72 = core::slice::<impl [u8]>::len(move _73) -> [return: bb10, unwind unreachable];
    }
    bb9: {
        StorageDead(_62);
        StorageDead(_61);
        StorageLive(_64);
---
        _70 = &(*_59);
        _69 = &(*_70);
        StorageLive(_71);
        _71 = std::option::Option::None;
        _65 = core::panicking::assert_failed::<u8, u8>(move _66, move _67, move _69, move _71) -> unwind unreachable;
    }
    bb10: {
        StorageDead(_73);
        StorageLive(_75);
        StorageLive(_76);
        StorageLive(_77);
        _77 = &_72;
        _76 = &(*_77);
        _75 = std::mem::size_of_val::<usize>(move _76) -> [return: bb11, unwind unreachable];
    }
    bb11: {
        StorageDead(_76);
        StorageDead(_77);
        StorageLive(_78);
        StorageLive(_79);
        StorageLive(_80);
        _80 = &_72;
        StorageLive(_81);
        _81 = &_75;
        _79 = (move _80, move _81);
        StorageDead(_81);
        StorageDead(_80);
        StorageLive(_82);
        _82 = (_79.0: &usize);
        StorageLive(_83);
        _83 = (_79.1: &usize);
        StorageLive(_84);
        StorageLive(_85);
        _85 = (*_82);
        StorageLive(_86);
        _86 = (*_83);
        _84 = Eq(move _85, move _86);
        switchInt(move _84) -> [0: bb13, otherwise: bb12];
    }
    bb12: {
        StorageDead(_86);
        StorageDead(_85);
        _78 = ();
---
        _94 = &(*_83);
        _93 = &(*_94);
        StorageLive(_95);
        _95 = std::option::Option::None;
        _89 = core::panicking::assert_failed::<usize, usize>(move _90, move _91, move _93, move _95) -> unwind unreachable;
    }
}
fn operands::{constant#0}() -> usize {
    let mut _0: usize;
    bb0: {
        _0 = 10_usize;
        return;
    }
}
fn more_operands() -> [Ctors; 3] {
    let mut _0: [Ctors; 3];
    let  _1: Dummy;
    let  _2: Ctors;
    let  _3: Ctors;
    let mut _4: Dummy;
    let  _5: Ctors;
    let mut _6: Ctors;
    let mut _7: Ctors;
    let mut _8: Ctors;
    debug dummy => _1;
    debug unit => _2;
    debug struct_like => _3;
    debug tup_like => _5;
    bb0: {
        StorageLive(_1);
        _1 = Dummy('a', core::num::<impl i32>::MIN);
        StorageLive(_2);
        _2 = Ctors::Unit;
        StorageLive(_3);
        StorageLive(_4);
        _4 = move _1;
        _3 = Ctors::StructLike(move _4);
        StorageDead(_4);
        StorageLive(_5);
        _5 = Ctors::TupLike(false);
        StorageLive(_6);
        _6 = move _2;
        StorageLive(_7);
        _7 = move _3;
        StorageLive(_8);
        _8 = move _5;
        _0 = [move _6, move _7, move _8];
        StorageDead(_8);
        StorageDead(_7);
        StorageDead(_6);
        StorageDead(_5);
        StorageDead(_3);
        StorageDead(_2);
        StorageDead(_1);
        return;
    }
}
fn more_operands::{constant#0}() -> usize {
    let mut _0: usize;
    bb0: {
        _0 = 3_usize;
        return;
    }
}
fn closures(_1: bool, _2: bool) -> {closure@/checkout/tests/ui/rustc_public-ir-print/operands.rs:47:5: 47:19} {
    let mut _0: {closure@/checkout/tests/ui/rustc_public-ir-print/operands.rs:47:5: 47:19};
    debug x => _1;
    debug z => _2;
    bb0: {
        _0 = {closure@/checkout/tests/ui/rustc_public-ir-print/operands.rs:47:5: 47:19}(_1, _2);
        return;
    }
}
fn closures::{closure#0}(_1: {closure@/checkout/tests/ui/rustc_public-ir-print/operands.rs:47:5: 47:19}, _2: bool) -> bool {
    let mut _0: bool;
    let mut _3: bool;
    let mut _4: bool;
    let mut _5: bool;
    debug y => _2;
    debug x => (_1.0: bool);
    debug z => (_1.1: bool);
    bb0: {
        StorageLive(_3);
        StorageLive(_4);
        _4 = (_1.0: bool);
        StorageLive(_5);
        _5 = _2;
        _3 = BitXor(move _4, move _5);
        switchInt(move _3) -> [0: bb2, otherwise: bb1];
    }
    bb1: {
        StorageDead(_5);
        StorageDead(_4);
        _0 = true;
---
        StorageDead(_3);
        return;
    }
}
fn Ctors::TupLike(_1: bool) -> Ctors {
    let mut _0: Ctors;
    bb0: {
        _0 = Ctors::TupLike(move _1);
        return;
    }
}
------------------------------------------
stderr: none

@bors
Copy link
Collaborator

bors commented Jul 17, 2025

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jul 17, 2025
@fmease fmease closed this Jul 17, 2025
@rustbot rustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 17, 2025
@fmease fmease deleted the rollup-xt98bx0 branch July 17, 2025 15:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-attributes Area: Attributes (`#[…]`, `#![…]`) A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-run-make Area: port run-make Makefiles to rmake.rs A-rustc-dev-guide Area: rustc-dev-guide PG-exploit-mitigations Project group: Exploit mitigations rollup A PR which is a rollup T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-clippy Relevant to the Clippy team. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.