Skip to content

Rollup of 11 pull requests - #161092

Closed
JonathanBrouwer wants to merge 37 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-lKivu1S
Closed

Rollup of 11 pull requests#161092
JonathanBrouwer wants to merge 37 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-lKivu1S

Conversation

@JonathanBrouwer

Copy link
Copy Markdown
Contributor

Successful merges:

r? @ghost

Create a similar rollup

jyn514 and others added 30 commits August 12, 2026 19:42
The goal here is to *reduce the amount of slop PRs*, not as a blanket endorsement of using agents to work on `rust-lang/rust`.
To that end, I have [done extensive testing][ETOOMANYLUNAS] to make sure the new file actually helps that goal.

[ETOOMANYLUNAS]: https://github.com/jyn514/ETOOMANYLUNAS

The results are promising.
They show agents consistently asking their users to confirm they're read their own work;
requiring users to write their own PR descriptions;
and pointing people to other repos if they try to modify a submodule or subtrees,
as well as various other tests.

---

Summary of the AGENTS.md (taken from the test repo:

This is a rather long operationalization of the [dev-guide] as algorithmic instructions.
Most of it was itself generated with an agent.

Differences between this and the [dev-guide] / [policy]:

[dev-guide]: https://rustc-dev-guide.rust-lang.org/llm-guidance.html
[policy]: https://forge.rust-lang.org/policies/llm-usage.html

- "strong suggestions" in the docs are turned into absolute requirements here; LLMs have trouble with discretion and judgement.
- lang/edition/etc are not exempted; determining what falls under their scope was too hard to operationalize. members of those teams can still write their own AGENTS.md if this one interferes with their work (i wouldn’t expect it to, though, it’s mostly focused on code.)
- the LLM requires a reviewer before making edits, not before posting the PR. experimental PRs are not exempted (how could the LLM know it was experimental?).
- soundness changes are always rejected, even if allowed by the policy (how could the LLM know you’re in the org?)
This adds one vendor-specific file, for the benefit of getting Claude to
actually follow the instructions.

I've put this in a separate commit so that I can drop it if people feel
strongly. I *highly recommend* that we add a CLAUDE.md, it really makes
a difference. You can see examples of what Claude does without a file in
the [testing repo][ETOOMANYLUNAS].

[ETOOMANYLUNAS]: https://github.com/jyn514/ETOOMANYLUNAS
…r pr descriptions

Co-authored-by: Josh Triplett <josh@joshtriplett.org>
`rerunning_stalled_goal_may_make_progress` is split into always-inline
and never-inline variants, because it's biggish and has multiple call
sites but only one is hot. The other are easy, being either very small
or having a single call site.
When encountering a resolve error on a type parameter associated item constraint (which can be caused by a typo when trying to write a path), do not *also* complain about associated items not being able to be constrained there.
…at didn't resolve, silence error

When typoing `Vec<foo::Bar>` to `Vec<foo:Bar>`, do not emit error complaining about the wrong number of type parameters for `Vec`.
…e, r=Amanieu

PowerPC inline ASM: Fix scalar floats being in the wrong vector lane on little endian

64-bit PowerPC supports both big and little endian, however registers are always big endian. As a consequence of this, the order of vector lanes is reversed on little endian; however scalar `f32` and `f64` are always stored in the actual (big-endian) lane 0. This PR fixes the LLVM ASM fixup to take that into account.

Ping target maintainers: @daltenty @gilamn5tr @amy-kwan @Gelbpunkt @famfo @neuschaefer
Miri: give the incremental session a chance to finish

This helps with rust-lang/miri#5013. Reruns still aren't as fast as I'd like, but using nextest to run libcore tests shows a big difference:
```
before:
 Nextest run ID 56b7b355-6225-4083-96e3-aeeabbe80523 with nextest profile: default-miri
    Starting 10 tests across 2 binaries (2760 tests skipped)
        PASS [  31.264s] coretests::coretests any::any_downcast_mut
        PASS [  31.287s] coretests::coretests any::distinct_type_names
        PASS [  32.747s] coretests::coretests iter::traits::iterator::test_any
        PASS [  32.758s] coretests::coretests any::any_owning
        PASS [  32.864s] coretests::coretests any::dyn_type_name
        PASS [  32.973s] coretests::coretests any::any_downcast_ref
        PASS [  33.139s] coretests::coretests any::any_unsized
        PASS [  33.719s] coretests::coretests any::any_referenced
        PASS [  35.786s] coretests::coretests any::any_fixed_vec
        PASS [  38.951s] coretests::coretests num::dec2flt::parse::many_digits
────────────
     Summary [  38.955s] 10 tests run: 10 passed, 2760 skipped

after:
 Nextest run ID af603971-e41e-466d-8469-0425057fa325 with nextest profile: default-miri
    Starting 10 tests across 2 binaries (2761 tests skipped)
        PASS [  15.063s] coretests::coretests any::any_unsized
        PASS [  15.176s] coretests::coretests any::distinct_type_names
        PASS [  15.200s] coretests::coretests any::any_referenced
        PASS [  15.550s] coretests::coretests iter::traits::iterator::test_any
        PASS [  15.993s] coretests::coretests any::any_fixed_vec
        PASS [  17.506s] coretests::coretests num::dec2flt::parse::many_digits
        PASS [  17.902s] coretests::coretests any::any_downcast_ref
        PASS [  18.188s] coretests::coretests any::any_owning
        PASS [  19.270s] coretests::coretests any::dyn_type_name
        PASS [  19.702s] coretests::coretests any::any_downcast_mut
────────────
     Summary [  19.705s] 10 tests run: 10 passed, 2761 skipped
```
It still seems to spend at least 10s building the crate before Miri even begins running, no idea what it is doing in that time. But it's 15s less than before so that's good. :)
…=jdonszelmann

Inline some hot new-solver functions

`rerunning_stalled_goal_may_make_progress` is split into always-inline and never-inline variants, because it's biggish and has multiple call sites but only one is hot. The other are easy, being either very small or having a single call site.

r? @jdonszelmann
…unsigned-bound, r=clarfonthey

Optimize offset_from_unsigned result bounds

Hint that result cannot be larger than isize max
Updates the expect messages in library/std/src/net/udp.rs to follow the style guide

- [x] I did not use an LLM to create a change in this PR.
- [ ] I used an LLM to create a change in this PR, and I have explained below how it was used.
Add an AGENTS.md that enforces the LLM policy

The goal here is to *reduce the amount of slop PRs*, not as a blanket endorsement of using agents to work on `rust-lang/rust`.
For more info about motivation, see [the blog post](https://blog.rust-lang.org/inside-rust/2026/08/05/rust-langrust-is-adopting-an-llm-policy/).

To that end, I have [done extensive testing][ETOOMANYLUNAS] to make sure the new file actually helps that goal.
The results are promising.
They show agents consistently asking their users to confirm they're read their own work;
requiring users to write their own PR descriptions;
and pointing people to other repos if they try to modify a submodule or subtrees,
as well as various other tests.

[ETOOMANYLUNAS]: https://github.com/jyn514/ETOOMANYLUNAS

Almost all of the AGENTS.md was itself generated with an LLM.
See the [linked testing repo][ETOOMANYLUNAS] for more information about testing and methodology.
I wrote this PR description and both commit descriptions myself.

---

Summary of the AGENTS.md (taken from the test repo):

This is a rather long operationalization of the [dev-guide] as algorithmic instructions.
Most of it was itself generated with an agent.

Differences between this and the [dev-guide] / [policy]:

[dev-guide]: https://rustc-dev-guide.rust-lang.org/llm-guidance.html
[policy]: https://forge.rust-lang.org/policies/llm-usage.html

- "strong suggestions" in the docs are turned into absolute requirements here; LLMs have trouble with discretion and judgement.
- lang/edition/etc are not exempted; determining what falls under their scope was too hard to operationalize. members of those teams can still write their own AGENTS.md if this one interferes with their work (i wouldn’t expect it to, though, it’s mostly focused on code.)
- the LLM requires a reviewer before making edits, not before posting the PR. experimental PRs are not exempted (how could the LLM know it was experimental?).
- soundness changes are always rejected, even if allowed by the policy (how could the LLM know you’re in the org?)

This is not exhaustive; if you want a more detailed human-facing summary, see the [dev-guide].

---

The second commit adds a CLAUDE.md that links directly to AGENTS.md.
This adds one vendor-specific file, for the benefit of getting Claude to
actually follow the instructions.

I've put this in a separate commit so that I can drop it if people feel
strongly. I *highly recommend* that we add a CLAUDE.md, it really makes
a difference. You can see examples of what Claude does without a file in
the [testing repo][ETOOMANYLUNAS].

[ETOOMANYLUNAS]: https://github.com/jyn514/ETOOMANYLUNAS

r? @jieyouxu cc @jackh726 @camelid

@rustbot label +llm-assisted
…jieyouxu

Silence unecessary errors on `Vec<foo::Bar>` to `Vec<foo:Bar>` typo

When encountering a type path with a bound constraint instead of a type path and the bound type isn't resolved, only emit the resolve error, as that has an appropriate suggestion. This cuts down the verbosity of a relatively normal typo.

Fix rust-lang#92685.
bootstrap: Clean up imports related to `define_config!` and `check_ci_llvm!`

This PR takes the two macros defined in `core/config/mod.rs`, moves them to their own module, and adjusts all callers to import the macros from that module instead of from the crate root. This lets us remove `#[macro_export]` from the macro declarations.

Along the way, we also adjust `define_config!` to use more fully-qualified paths, so that callers don't have to add several mysterious imports in order to compile.

---

(Because macro-rules have weird namespacing by default, it's usually a good idea to isolate them in their own module, and then write `pub(use)` below to pull them into the normal name-resolution system.)

There should be no change to bootstrap's behaviour.
…-no-eased-handling, r=lcnr

propagate `RerunNonErased` in `projection_may_match`

`projection_may_match` treated `RerunNonErased` same as `NoSolution`, ICE'ing later in path instead of rerunning goal in original typing mode.

Fixes rust-lang#159462 rust-lang#159457

r? lcnr
…bzol

bootstrap: Restrict the normalization of relative paths

This is my follow-up to rust-lang#160970 (comment), which should hopefully retain the fixed behaviour for argument beginning with `./` while avoiding some undesirable side-effects.

In particular, I want to avoid ever modifying command-line arguments unless they specifically match the two patterns we're trying to account for: absolute paths, and relative paths beginning with an explicit `./`.

I also want to specifically avoid modifying arguments unless we can demonstrate that they correspond to a file that exists. For example, we shouldn't be accepting paths like `./tidyselftest` or `./mir-opt`, because those arguments don't actually make sense as paths relative to the source root.

r? Kobzol
@rust-bors rust-bors Bot added the rollup A PR which is a rollup label Aug 14, 2026
@rustbot rustbot added A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-meta Area: Issues & PRs about the rust-lang/rust repository itself 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-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. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) labels Aug 14, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Contributor Author

@bors r+ p=5

Trying commonly failed jobs
@bors try jobs=dist-various-1,test-various,x86_64-gnu-aux,x86_64-gnu-llvm-21-3,x86_64-msvc-1,aarch64-apple-1,aarch64-apple-2,x86_64-mingw-1,i686-msvc-1,i686-msvc-2

@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 2f93a8d has been approved by JonathanBrouwer

It is now in the queue for this repository.

@rust-bors rust-bors Bot 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 Aug 14, 2026
@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

⌛ Trying commit 2f93a8d with merge 67f2613

To cancel the try build, run the command @bors try cancel.

Workflow: https://github.com/rust-lang/rust/actions/runs/31798906876

rust-bors Bot pushed a commit that referenced this pull request Aug 14, 2026
Rollup of 11 pull requests


try-job: dist-various-1
try-job: test-various
try-job: x86_64-gnu-aux
try-job: x86_64-gnu-llvm-21-3
try-job: x86_64-msvc-1
try-job: aarch64-apple-1
try-job: aarch64-apple-2
try-job: x86_64-mingw-1
try-job: i686-msvc-1
try-job: i686-msvc-2
@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job test-various failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

---- [codegen] tests/codegen-llvm/lib-optimizations/append-elements.rs stdout ----
------FileCheck stdout------------------------------

------FileCheck stderr------------------------------
/checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs:16:12: error: CHECK: expected string not found in input
 // CHECK: call void @llvm.memcpy.{{.*}}[[DST]].i{{.*}}[[SRC]]
           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: scanning from here
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: with "DST" equal to "%dst"
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: with "SRC" equal to "%src"
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:163:7: note: possible intended match here
 tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !14
      ^
/checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs:28:12: error: CHECK: expected string not found in input
 // CHECK: call void @llvm.memcpy.{{.*}}[[DST]].i{{.*}}[[SRC]]
           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: scanning from here
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: with "DST" equal to "%dst"
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: with "SRC" equal to "%src"
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:245:7: note: possible intended match here
 tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !28
      ^

Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll
Check file: /checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            .
            .
            .
           10:  %self4.i = alloca [12 x i8], align 4 
           11:  tail call void @llvm.experimental.noalias.scope.decl(metadata !2) 
           12:  %_24.0.i = add i32 %additional, %len 
           13:  %_24.1.i = icmp ult i32 %_24.0.i, %len 
           14:  br i1 %_24.1.i, label %bb2, label %bb9.i 
           15:  
           16: bb9.i: ; preds = %start 
           17:  %self6.i = load i32, ptr %slf, align 4, !range !5, !alias.scope !2, !noundef !6 
           18:  %0 = shl nuw i32 %self6.i, 1 
           19:  %spec.store.select.i = tail call i32 @llvm.umax.i32(i32 %_24.0.i, i32 %0) 
           20:  %cap3.sroa.0.1.i = tail call i32 @llvm.umax.i32(i32 %spec.store.select.i, i32 8) 
           21:  call void @llvm.lifetime.start.p0(ptr nonnull %self4.i), !noalias !2 
           22:  %1 = getelementptr inbounds nuw i8, ptr %slf, i32 4 
           23:  %self.val18.i = load ptr, ptr %1, align 4, !alias.scope !2 
           24: ; call <alloc::raw_vec::RawVecInner>::finish_grow 
           25:  call fastcc void @_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner11finish_growCslAzzQRh6qCt_15append_elements(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %self4.i, i32 %self6.i, ptr %self.val18.i, i32 noundef %cap3.sroa.0.1.i) #10 
           26:  %_43.i = load i32, ptr %self4.i, align 4, !range !7, !noalias !2, !noundef !6 
           27:  %2 = trunc nuw i32 %_43.i to i1 
           28:  %3 = getelementptr inbounds nuw i8, ptr %self4.i, i32 4 
           29:  br i1 %2, label %bb22.i, label %bb3 
           30:  
           31: bb22.i: ; preds = %bb9.i 
           32:  %e.0.i = load i32, ptr %3, align 4, !range !8, !noalias !2, !noundef !6 
           33:  %4 = getelementptr inbounds nuw i8, ptr %self4.i, i32 8 
           34:  %e.1.i = load i32, ptr %4, align 4, !noalias !2 
           35:  call void @llvm.lifetime.end.p0(ptr nonnull %self4.i), !noalias !2 
           36:  br label %bb2 
           37:  
           38: bb2: ; preds = %bb22.i, %start 
           39:  %_0.sroa.5.0.i.ph = phi i32 [ undef, %start ], [ %e.1.i, %bb22.i ] 
           40:  %_0.sroa.0.0.i.ph = phi i32 [ 0, %start ], [ %e.0.i, %bb22.i ] 
           41: ; call alloc::raw_vec::handle_error 
           42:  tail call void @_RNvNtCsjxzvnRA7vbN_5alloc7raw_vec12handle_error(i32 noundef %_0.sroa.0.0.i.ph, i32 %_0.sroa.5.0.i.ph) #11 
           43:  unreachable 
           44:  
           45: bb3: ; preds = %bb9.i 
           46:  %v.0.i = load ptr, ptr %3, align 4, !noalias !2, !nonnull !6, !noundef !6 
           47:  call void @llvm.lifetime.end.p0(ptr nonnull %self4.i), !noalias !2 
           48:  store ptr %v.0.i, ptr %1, align 4, !alias.scope !2 
           49:  %5 = icmp sgt i32 %cap3.sroa.0.1.i, -1 
           50:  tail call void @llvm.assume(i1 %5) 
           51:  store i32 %cap3.sroa.0.1.i, ptr %slf, align 4, !alias.scope !2 
           52:  ret void 
           53: } 
           54:  
           55: ; <alloc::raw_vec::RawVecInner>::finish_grow 
           56: ; Function Attrs: cold nounwind 
           57: define internal fastcc void @_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner11finish_growCslAzzQRh6qCt_15append_elements(ptr dead_on_unwind noalias nofree noundef nonnull writable writeonly align 4 captures(none) dereferenceable(12) initializes((0, 8)) %_0, i32 %self.0.val, ptr %self.4.val, i32 noundef range(i32 8, 0) %cap) unnamed_addr #0 !guid !9 { 
           58: start: 
           59:  %_37 = icmp sgt i32 %cap, -1 
           60:  br i1 %_37, label %bb12, label %bb14 
           61:  
           62: bb12: ; preds = %start 
           63:  %0 = icmp eq i32 %self.0.val, 0 
           64:  br i1 %0, label %bb5, label %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator4grow.exit 
           65:  
           66: bb14: ; preds = %start 
           67:  %1 = getelementptr inbounds nuw i8, ptr %_0, i32 4 
           68:  store i32 0, ptr %1, align 4 
           69:  br label %bb8 
           70:  
           71: _RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator4grow.exit: ; preds = %bb12 
           72:  call void @llvm.assume(i1 true) [ "nonnull"(ptr %self.4.val) ] 
           73:  %cond.i.i = icmp uge i32 %cap, %self.0.val 
           74:  tail call void @llvm.assume(i1 %cond.i.i) 
           75: ; call __rustc::__rust_realloc 
           76:  %raw_ptr.i.i = tail call noundef ptr @_RNvCsipTCTTuPJVB_7___rustc14___rust_realloc(ptr noundef nonnull %self.4.val, i32 noundef %self.0.val, i32 noundef 1, i32 noundef range(i32 8, -2147483648) %cap) #10 
           77:  br label %bb7 
           78:  
           79: bb5: ; preds = %bb12 
           80: ; call __rustc::__rust_no_alloc_shim_is_unstable_v2 
           81:  tail call void @_RNvCsipTCTTuPJVB_7___rustc35___rust_no_alloc_shim_is_unstable_v2() #10 
           82: ; call __rustc::__rust_alloc 
           83:  %2 = tail call noundef ptr @_RNvCsipTCTTuPJVB_7___rustc12___rust_alloc(i32 noundef range(i32 1, -2147483648) %cap, i32 noundef 1) #10 
           84:  br label %bb7 
           85:  
           86: bb7: ; preds = %bb5, %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator4grow.exit 
           87:  %raw_ptr.i.i.pn = phi ptr [ %raw_ptr.i.i, %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator4grow.exit ], [ %2, %bb5 ] 
           88:  %3 = icmp eq ptr %raw_ptr.i.i.pn, null 
           89:  %4 = getelementptr inbounds nuw i8, ptr %_0, i32 4 
           90:  %5 = getelementptr inbounds nuw i8, ptr %_0, i32 8 
           91:  br i1 %3, label %bb18, label %bb19 
           92:  
           93: bb18: ; preds = %bb7 
           94:  store i32 1, ptr %4, align 4 
           95:  store i32 %cap, ptr %5, align 4 
           96:  br label %bb8 
           97:  
           98: bb19: ; preds = %bb7 
           99:  store ptr %raw_ptr.i.i.pn, ptr %4, align 4 
          100:  store i32 %cap, ptr %5, align 4 
          101:  br label %bb8 
          102:  
          103: bb8: ; preds = %bb19, %bb18, %bb14 
          104:  %.sink = phi i32 [ 0, %bb19 ], [ 1, %bb18 ], [ 1, %bb14 ] 
          105:  store i32 %.sink, ptr %_0, align 4 
          106:  ret void 
          107: } 
          108:  
          109: ; Function Attrs: nounwind 
          110: define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 { 
check:16'0                                                                                                                                                                                                                                               {                                  search range start (exclusive)
check:16'1                                                                                                                                                                                                                                                                                  error: no match found in search range
check:16'2                                                                                                                                                                                                                                                                                  with "DST" equal to "%dst"
check:16'3                                                                                                                                                                                                                                                                                  with "SRC" equal to "%src"
          111: start: 
          112:  %0 = icmp eq i32 %src.1, 0 
          113:  br i1 %0, label %bb3, label %bb5.i 
          114:  
          115: bb5.i: ; preds = %start 
          116: ; call __rustc::__rust_no_alloc_shim_is_unstable_v2 
          117:  tail call void @_RNvCsipTCTTuPJVB_7___rustc35___rust_no_alloc_shim_is_unstable_v2() #10, !noalias !11 
          118: ; call __rustc::__rust_alloc 
          119:  %1 = tail call noundef ptr @_RNvCsipTCTTuPJVB_7___rustc12___rust_alloc(i32 noundef range(i32 1, -2147483648) %src.1, i32 noundef 1) #10, !noalias !11 
          120:  %2 = icmp eq ptr %1, null 
          121:  br i1 %2, label %bb6, label %bb2 
          122:  
          123: bb6: ; preds = %bb5.i 
          124: ; call alloc::raw_vec::handle_error 
          125:  tail call void @_RNvNtCsjxzvnRA7vbN_5alloc7raw_vec12handle_error(i32 noundef 1, i32 %src.1) #11 
          126:  unreachable 
          127:  
          128: bb3: ; preds = %start, %bb2 
          129:  %3 = phi ptr [ %1, %bb2 ], [ inttoptr (i32 1 to ptr), %start ] 
          130:  %_12.sroa.9.0.ph12 = phi i32 [ %9, %bb2 ], [ 1, %start ] 
          131:  %_29 = getelementptr inbounds nuw i8, ptr %3, i32 %src.1 
          132:  %4 = ptrtoint ptr %_29 to i32 
          133:  %5 = sub nuw i32 %4, %_12.sroa.9.0.ph12 
          134:  %_18.i = icmp sgt i32 %5, -1 
          135:  tail call void @llvm.assume(i1 %_18.i) 
          136:  tail call void @llvm.experimental.noalias.scope.decl(metadata !14) 
          137:  %6 = getelementptr inbounds nuw i8, ptr %dst, i32 8 
          138:  %len.i.i = load i32, ptr %6, align 4, !alias.scope !17, !noundef !6 
          139:  %self2.i.i = load i32, ptr %dst, align 4, !range !5, !alias.scope !17, !noundef !6 
          140:  %_9.i.i = sub i32 %self2.i.i, %len.i.i 
          141:  %_7.i.i = icmp ugt i32 %5, %_9.i.i 
          142:  br i1 %_7.i.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, !prof !20 
          143:  
          144: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i: ; preds = %bb3 
          145: ; call <alloc::raw_vec::RawVecInner<_>>::reserve::do_reserve_and_handle::<alloc::alloc::Global> 
          146:  tail call fastcc void @_RINvNvMs2_NtCsjxzvnRA7vbN_5alloc7raw_vecINtB8_11RawVecInnerpE7reserve21do_reserve_and_handleNtNtBa_5alloc6GlobalECslAzzQRh6qCt_15append_elements(ptr noalias nofree noundef nonnull align 4 dereferenceable(12) %dst, i32 noundef %len.i.i, i32 noundef range(i32 0, -2147483648) %5) #10 
          147:  %len1.i = load i32, ptr %6, align 4, !alias.scope !14, !noundef !6 
          148:  %_102.i = icmp sgt i32 %len1.i, -1 
          149:  tail call void @llvm.assume(i1 %_102.i) 
          150:  br label %bb2.i1 
          151:  
          152: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i: ; preds = %bb3 
          153:  %_10.i = icmp sgt i32 %len.i.i, -1 
          154:  tail call void @llvm.assume(i1 %_10.i) 
          155:  %_6.not.i = icmp eq i32 %_12.sroa.9.0.ph12, %4 
          156:  br i1 %_6.not.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit, label %bb2.i1 
          157:  
          158: bb2.i1: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i 
          159:  %len4.i = phi i32 [ %len1.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i ], [ %len.i.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i ] 
          160:  %7 = getelementptr inbounds nuw i8, ptr %dst, i32 4 
          161:  %_11.i = load ptr, ptr %7, align 4, !alias.scope !14, !nonnull !6, !noundef !6 
          162:  %dst.i = getelementptr inbounds nuw i8, ptr %_11.i, i32 %len4.i 
          163:  tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !14 
check:16'4           ?                                                                                                                                                         possible intended match
          164:  br label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit 
          165:  
          166: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, %bb2.i1 
          167:  %len5.i = phi i32 [ %len4.i, %bb2.i1 ], [ %len.i.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i ] 
          168:  %8 = add nuw i32 %len5.i, %5 
          169:  store i32 %8, ptr %6, align 4, !alias.scope !14 
          170:  br i1 %0, label %_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements.exit, label %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i 
          171:  
          172: _RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit 
          173: ; call __rustc::__rust_dealloc 
          174:  tail call void @_RNvCsipTCTTuPJVB_7___rustc14___rust_dealloc(ptr noundef nonnull %3, i32 noundef %src.1, i32 noundef range(i32 1, -2147483647) 1) #10, !noalias !21 
          175:  br label %_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements.exit 
          176:  
          177: _RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements.exit: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit, %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i 
          178:  ret void 
          179:  
          180: bb2: ; preds = %bb5.i 
          181:  %9 = ptrtoint ptr %1 to i32 
          182:  tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %1, ptr nonnull align 1 %src.0, i32 %src.1, i1 false) 
          183:  br label %bb3 
          184: } 
          185:  
          186: ; Function Attrs: nounwind 
          187: define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 { 
check:16'5                                                         }                                                                                                                                                                                                 search range end (exclusive)
check:28'0                                                                                                                                                                                                                        {                                  search range start (exclusive)
check:28'1                                                                                                                                                                                                                                                           error: no match found in search range
check:28'2                                                                                                                                                                                                                                                           with "DST" equal to "%dst"
check:28'3                                                                                                                                                                                                                                                           with "SRC" equal to "%src"
          188: start: 
          189:  %_38.i = icmp sgt i32 %src.1, -1 
          190:  br i1 %_38.i, label %bb15.i, label %bb6 
          191:  
          192: bb15.i: ; preds = %start 
          193:  %0 = icmp eq i32 %src.1, 0 
          194:  br i1 %0, label %bb3, label %bb5.i 
          195:  
          196: bb5.i: ; preds = %bb15.i 
          197: ; call __rustc::__rust_no_alloc_shim_is_unstable_v2 
          198:  tail call void @_RNvCsipTCTTuPJVB_7___rustc35___rust_no_alloc_shim_is_unstable_v2() #10, !noalias !25 
          199: ; call __rustc::__rust_alloc 
          200:  %1 = tail call noundef ptr @_RNvCsipTCTTuPJVB_7___rustc12___rust_alloc(i32 noundef range(i32 1, -2147483648) %src.1, i32 noundef 1) #10, !noalias !25 
          201:  %2 = icmp eq ptr %1, null 
          202:  br i1 %2, label %bb6, label %bb2 
          203:  
          204: bb6: ; preds = %start, %bb5.i 
          205:  %_15.sroa.4.0.ph = phi i32 [ 1, %bb5.i ], [ 0, %start ] 
          206: ; call alloc::raw_vec::handle_error 
          207:  tail call void @_RNvNtCsjxzvnRA7vbN_5alloc7raw_vec12handle_error(i32 noundef %_15.sroa.4.0.ph, i32 %src.1) #11 
          208:  unreachable 
          209:  
          210: bb3: ; preds = %bb15.i, %bb2 
          211:  %3 = phi ptr [ %1, %bb2 ], [ inttoptr (i32 1 to ptr), %bb15.i ] 
          212:  %_15.sroa.10.015 = phi i32 [ %9, %bb2 ], [ 1, %bb15.i ] 
          213:  %_36 = getelementptr inbounds nuw i8, ptr %3, i32 %src.1 
          214:  %4 = ptrtoint ptr %_36 to i32 
          215:  %5 = sub nuw i32 %4, %_15.sroa.10.015 
          216:  %_18.i = icmp sgt i32 %5, -1 
          217:  tail call void @llvm.assume(i1 %_18.i) 
          218:  tail call void @llvm.experimental.noalias.scope.decl(metadata !28) 
          219:  %6 = getelementptr inbounds nuw i8, ptr %dst, i32 8 
          220:  %len.i.i = load i32, ptr %6, align 4, !alias.scope !31, !noundef !6 
          221:  %self2.i.i = load i32, ptr %dst, align 4, !range !5, !alias.scope !31, !noundef !6 
          222:  %_9.i.i = sub i32 %self2.i.i, %len.i.i 
          223:  %_7.i.i = icmp ugt i32 %5, %_9.i.i 
          224:  br i1 %_7.i.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, !prof !20 
          225:  
          226: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i: ; preds = %bb3 
          227: ; call <alloc::raw_vec::RawVecInner<_>>::reserve::do_reserve_and_handle::<alloc::alloc::Global> 
          228:  tail call fastcc void @_RINvNvMs2_NtCsjxzvnRA7vbN_5alloc7raw_vecINtB8_11RawVecInnerpE7reserve21do_reserve_and_handleNtNtBa_5alloc6GlobalECslAzzQRh6qCt_15append_elements(ptr noalias nofree noundef nonnull align 4 dereferenceable(12) %dst, i32 noundef %len.i.i, i32 noundef range(i32 0, -2147483648) %5) #10 
          229:  %len1.i = load i32, ptr %6, align 4, !alias.scope !28, !noundef !6 
          230:  %_102.i = icmp sgt i32 %len1.i, -1 
          231:  tail call void @llvm.assume(i1 %_102.i) 
          232:  br label %bb2.i2 
          233:  
          234: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i: ; preds = %bb3 
          235:  %_10.i = icmp sgt i32 %len.i.i, -1 
          236:  tail call void @llvm.assume(i1 %_10.i) 
          237:  %_6.not.i = icmp eq i32 %_15.sroa.10.015, %4 
          238:  br i1 %_6.not.i, label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit, label %bb2.i2 
          239:  
          240: bb2.i2: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i 
          241:  %len4.i = phi i32 [ %len1.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.thread.i ], [ %len.i.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i ] 
          242:  %7 = getelementptr inbounds nuw i8, ptr %dst, i32 4 
          243:  %_11.i = load ptr, ptr %7, align 4, !alias.scope !28, !nonnull !6, !noundef !6 
          244:  %dst.i = getelementptr inbounds nuw i8, ptr %_11.i, i32 %len4.i 
          245:  tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !28 
check:28'4           ?                                                                                                                                                         possible intended match
          246:  br label %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit 
          247:  
          248: _RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i, %bb2.i2 
          249:  %len5.i = phi i32 [ %len4.i, %bb2.i2 ], [ %len.i.i, %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements.exit.i ] 
          250:  %8 = add nuw i32 %len5.i, %5 
          251:  store i32 %8, ptr %6, align 4, !alias.scope !28 
          252:  br i1 %0, label %_RINvNtCscIKQiftepnt_4core3ptr9drop_glueNtNtCsjxzvnRA7vbN_5alloc6string6StringECslAzzQRh6qCt_15append_elements.exit, label %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i.i 
          253:  
          254: _RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i.i: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit 
          255: ; call __rustc::__rust_dealloc 
          256:  tail call void @_RNvCsipTCTTuPJVB_7___rustc14___rust_dealloc(ptr noundef nonnull %3, i32 noundef %src.1, i32 noundef range(i32 1, -2147483647) 1) #10, !noalias !34 
          257:  br label %_RINvNtCscIKQiftepnt_4core3ptr9drop_glueNtNtCsjxzvnRA7vbN_5alloc6string6StringECslAzzQRh6qCt_15append_elements.exit 
          258:  
          259: _RINvNtCscIKQiftepnt_4core3ptr9drop_glueNtNtCsjxzvnRA7vbN_5alloc6string6StringECslAzzQRh6qCt_15append_elements.exit: ; preds = %_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements.exit, %_RNvXs1_NtCsjxzvnRA7vbN_5alloc5allocNtB5_6GlobalNtNtCscIKQiftepnt_4core5alloc9Allocator10deallocate.exit.i.i.i.i.i 
          260:  ret void 
          261:  
          262: bb2: ; preds = %bb5.i 
          263:  %9 = ptrtoint ptr %1 to i32 
          264:  tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %1, ptr nonnull align 1 %src.0, i32 %src.1, i1 false) 
          265:  br label %bb3 
          266: } 
          267:  
          268: ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) 
          269: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2 
          270:  
          271: ; alloc::raw_vec::handle_error 
          272: ; Function Attrs: cold minsize noreturn nounwind optsize 
          273: declare dso_local void @_RNvNtCsjxzvnRA7vbN_5alloc7raw_vec12handle_error(i32 noundef range(i32 0, -2147483647), i32) unnamed_addr #3 
          274:  
          275: ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) 
          276: declare void @llvm.lifetime.end.p0(ptr captures(none)) #2 
          277:  
          278: ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) 
          279: declare void @llvm.assume(i1 noundef) #4 
          280:  
          281: ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) 
          282: declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg) #2 
          283:  
          284: ; __rustc::__rust_dealloc 
          285: ; Function Attrs: nounwind allockind("free") 
          286: declare dso_local void @_RNvCsipTCTTuPJVB_7___rustc14___rust_dealloc(ptr allocptr noundef nonnull captures(address), i32 noundef, i32 noundef range(i32 1, -2147483647)) unnamed_addr #5 
          287:  
          288: ; __rustc::__rust_realloc 
          289: ; Function Attrs: nounwind allockind("realloc,aligned") allocsize(3) 
          290: declare dso_local noalias noundef ptr @_RNvCsipTCTTuPJVB_7___rustc14___rust_realloc(ptr allocptr noundef nonnull, i32 noundef, i32 allocalign noundef range(i32 1, -2147483647), i32 noundef) unnamed_addr #6 
          291:  
          292: ; __rustc::__rust_no_alloc_shim_is_unstable_v2 
          293: ; Function Attrs: nounwind 
          294: declare dso_local void @_RNvCsipTCTTuPJVB_7___rustc35___rust_no_alloc_shim_is_unstable_v2() unnamed_addr #1 
          295:  
          296: ; __rustc::__rust_alloc 
          297: ; Function Attrs: nounwind allockind("alloc,uninitialized,aligned") allocsize(0) 
          298: declare dso_local noalias noundef ptr @_RNvCsipTCTTuPJVB_7___rustc12___rust_alloc(i32 noundef, i32 allocalign noundef range(i32 1, -2147483647)) unnamed_addr #7 
          299:  
          300: ; Function Attrs: nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none) 
          301: declare i32 @llvm.umax.i32(i32, i32) #8 
          302:  
          303: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) 
          304: declare void @llvm.experimental.noalias.scope.decl(metadata) #9 
          305:  
          306: attributes #0 = { cold nounwind "target-cpu"="generic" } 
          307: attributes #1 = { nounwind "target-cpu"="generic" } 
          308: attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 
          309: attributes #3 = { cold minsize noreturn nounwind optsize "target-cpu"="generic" } 
          310: attributes #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) } 
          311: attributes #5 = { nounwind allockind("free") "alloc-family"="__rust_alloc" "target-cpu"="generic" } 
          312: attributes #6 = { nounwind allockind("realloc,aligned") allocsize(3) "alloc-family"="__rust_alloc" "target-cpu"="generic" } 
          313: attributes #7 = { nounwind allockind("alloc,uninitialized,aligned") allocsize(0) "alloc-family"="__rust_alloc" "alloc-variant-zeroed"="_RNvCsipTCTTuPJVB_7___rustc19___rust_alloc_zeroed" "target-cpu"="generic" } 
          314: attributes #8 = { nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none) } 
          315: attributes #9 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } 
          316: attributes #10 = { nounwind } 
          317: attributes #11 = { noreturn nounwind } 
          318:  
          319: !llvm.ident = !{!0} 
          320:  
          321: !0 = !{!"rustc version 1.99.0-nightly (67f2613e3 2026-08-14)"} 
          322: !1 = !{i64 -4980196775791823114} 
          323: !2 = !{!3} 
          324: !3 = distinct !{!3, !4, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner14grow_amortizedCslAzzQRh6qCt_15append_elements: %self"} 
          325: !4 = distinct !{!4, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner14grow_amortizedCslAzzQRh6qCt_15append_elements"} 
          326: !5 = !{i32 0, i32 -2147483648} 
          327: !6 = !{} 
          328: !7 = !{i32 0, i32 2} 
          329: !8 = !{i32 0, i32 -2147483647} 
          330: !9 = !{i64 -8669379475398741583} 
          331: !10 = !{i64 8053589329989893220} 
          332: !11 = !{!12} 
          333: !12 = distinct !{!12, !13, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner15try_allocate_inCslAzzQRh6qCt_15append_elements: %_0"} 
          334: !13 = distinct !{!13, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner15try_allocate_inCslAzzQRh6qCt_15append_elements"} 
          335: !14 = !{!15} 
          336: !15 = distinct !{!15, !16, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements: %self"} 
          337: !16 = distinct !{!16, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements"} 
          338: !17 = !{!18, !15} 
          339: !18 = distinct !{!18, !19, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements: %self"} 
          340: !19 = distinct !{!19, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements"} 
          341: !20 = !{!"branch_weights", !"expected", i32 1, i32 2000} 
          342: !21 = !{!22} 
          343: !22 = distinct !{!22, !23, !"_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements: %_1"} 
          344: !23 = distinct !{!23, !"_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements"} 
          345: !24 = !{i64 3452204306078733376} 
          346: !25 = !{!26} 
          347: !26 = distinct !{!26, !27, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner15try_allocate_inCslAzzQRh6qCt_15append_elements: %_0"} 
          348: !27 = distinct !{!27, !"_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner15try_allocate_inCslAzzQRh6qCt_15append_elements"} 
          349: !28 = !{!29} 
          350: !29 = distinct !{!29, !30, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements: %self"} 
          351: !30 = distinct !{!30, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE15append_elementsCslAzzQRh6qCt_15append_elements"} 
          352: !31 = !{!32, !29} 
          353: !32 = distinct !{!32, !33, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements: %self"} 
          354: !33 = distinct !{!33, !"_RNvMs_NtCsjxzvnRA7vbN_5alloc3vecINtB4_3VechE7reserveCslAzzQRh6qCt_15append_elements"} 
          355: !34 = !{!35} 
          356: !35 = distinct !{!35, !36, !"_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements: %_1"} 
          357: !36 = distinct !{!36, !"_RINvNtCscIKQiftepnt_4core3ptr9drop_glueINtNtCsjxzvnRA7vbN_5alloc3vec3VechEECslAzzQRh6qCt_15append_elements"} 
check:28'5                                                                                                                                           } search range end (exclusive)
>>>>>>

------------------------------------------

error: verification with 'FileCheck' failed
status: exit status: 1
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll" "/checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs" "--check-prefix=CHECK" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs:16:12: error: CHECK: expected string not found in input
 // CHECK: call void @llvm.memcpy.{{.*}}[[DST]].i{{.*}}[[SRC]]
           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: scanning from here
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: with "DST" equal to "%dst"
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:110:236: note: with "SRC" equal to "%src"
define dso_local void @vec_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef range(i32 0, -2147483648) %src.1) unnamed_addr #1 !guid !10 {
                                                                                                                                                                                                                                           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:163:7: note: possible intended match here
 tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !14
      ^
/checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs:28:12: error: CHECK: expected string not found in input
 // CHECK: call void @llvm.memcpy.{{.*}}[[DST]].i{{.*}}[[SRC]]
           ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: scanning from here
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: with "DST" equal to "%dst"
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:187:213: note: with "SRC" equal to "%src"
define dso_local void @string_append_with_temp_alloc(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %dst, ptr noalias nofree noundef nonnull readonly captures(none) %src.0, i32 noundef %src.1) unnamed_addr #1 !guid !24 {
                                                                                                                                                                                                                    ^
/checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll:245:7: note: possible intended match here
 tail call void @llvm.memcpy.p0.p0.i32(ptr nonnull align 1 %dst.i, ptr nonnull readonly align 1 %3, i32 range(i32 0, -2147483648) %5, i1 false), !noalias !28
      ^

Input file: /checkout/obj/build/x86_64-unknown-linux-gnu/test/codegen-llvm/lib-optimizations/append-elements/append-elements.ll
Check file: /checkout/tests/codegen-llvm/lib-optimizations/append-elements.rs

-dump-input=help explains the following input dump.

Input was:
<<<<<<
            .
            .
            .
           10:  %self4.i = alloca [12 x i8], align 4 
           11:  tail call void @llvm.experimental.noalias.scope.decl(metadata !2) 
           12:  %_24.0.i = add i32 %additional, %len 
           13:  %_24.1.i = icmp ult i32 %_24.0.i, %len 
           14:  br i1 %_24.1.i, label %bb2, label %bb9.i 
           15:  
           16: bb9.i: ; preds = %start 
           17:  %self6.i = load i32, ptr %slf, align 4, !range !5, !alias.scope !2, !noundef !6 
           18:  %0 = shl nuw i32 %self6.i, 1 
           19:  %spec.store.select.i = tail call i32 @llvm.umax.i32(i32 %_24.0.i, i32 %0) 
           20:  %cap3.sroa.0.1.i = tail call i32 @llvm.umax.i32(i32 %spec.store.select.i, i32 8) 
           21:  call void @llvm.lifetime.start.p0(ptr nonnull %self4.i), !noalias !2 
           22:  %1 = getelementptr inbounds nuw i8, ptr %slf, i32 4 
           23:  %self.val18.i = load ptr, ptr %1, align 4, !alias.scope !2 
           24: ; call <alloc::raw_vec::RawVecInner>::finish_grow 
           25:  call fastcc void @_RNvMs5_NtCsjxzvnRA7vbN_5alloc7raw_vecNtB5_11RawVecInner11finish_growCslAzzQRh6qCt_15append_elements(ptr noalias nofree noundef align 4 captures(none) dereferenceable(12) %self4.i, i32 %self6.i, ptr %self.val18.i, i32 noundef %cap3.sroa.0.1.i) #10 
           26:  %_43.i = load i32, ptr %self4.i, align 4, !range !7, !noalias !2, !noundef !6 
           27:  %2 = trunc nuw i32 %_43.i to i1 
           28:  %3 = getelementptr inbounds nuw i8, ptr %self4.i, i32 4 
           29:  br i1 %2, label %bb22.i, label %bb3 
           30:  
           31: bb22.i: ; preds = %bb9.i 
           32:  %e.0.i = load i32, ptr %3, align 4, !range !8, !noalias !2, !noundef !6 
           33:  %4 = getelementptr inbounds nuw i8, ptr %self4.i, i32 8 
           34:  %e.1.i = load i32, ptr %4, align 4, !noalias !2 
           35:  call void @llvm.lifetime.end.p0(ptr nonnull %self4.i), !noalias !2 
           36:  br label %bb2 
           37:  
           38: bb2: ; preds = %bb22.i, %start 
           39:  %_0.sroa.5.0.i.ph = phi i32 [ undef, %start ], [ %e.1.i, %bb22.i ] 
           40:  %_0.sroa.0.0.i.ph = phi i32 [ 0, %start ], [ %e.0.i, %bb22.i ] 
           41: ; call alloc::raw_vec::handle_error 
           42:  tail call void @_RNvNtCsjxzvnRA7vbN_5alloc7raw_vec12handle_error(i32 noundef %_0.sroa.0.0.i.ph, i32 %_0.sroa.5.0.i.ph) #11 
           43:  unreachable 
           44:  
           45: bb3: ; preds = %bb9.i 
           46:  %v.0.i = load ptr, ptr %3, align 4, !noalias !2, !nonnull !6, !noundef !6 
           47:  call void @llvm.lifetime.end.p0(ptr nonnull %self4.i), !noalias !2 
           48:  store ptr %v.0.i, ptr %1, align 4, !alias.scope !2 
           49:  %5 = icmp sgt i32 %cap3.sroa.0.1.i, -1 
           50:  tail call void @llvm.assume(i1 %5) 
           51:  store i32 %cap3.sroa.0.1.i, ptr %slf, align 4, !alias.scope !2 
           52:  ret void 
           53: } 

@rust-bors rust-bors Bot 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-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Aug 14, 2026
@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

PR #161063, which is a member of this rollup, was unapproved.

This rollup was thus unapproved.

@JonathanBrouwer

Copy link
Copy Markdown
Contributor Author

@bors try cancel

@rustbot rustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 14, 2026
@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Try build cancelled. Cancelled workflows:

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

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-meta Area: Issues & PRs about the rust-lang/rust repository itself rollup A PR which is a rollup T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) 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. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)

Projects

None yet

Development

Successfully merging this pull request may close these issues.