Skip to content

Add String<A> type with custom allocator parameter#149328

Open
shua wants to merge 8 commits into
rust-lang:mainfrom
shua:stralloc
Open

Add String<A> type with custom allocator parameter#149328
shua wants to merge 8 commits into
rust-lang:mainfrom
shua:stralloc

Conversation

@shua
Copy link
Copy Markdown

@shua shua commented Nov 25, 2025

View all comments

This change is part of the allocator_api feature set #32838 (also see wg-allocators roadmap or libs-team ACP).
The previous attempts at adding an allocator parameter to string are at rust-lang/rust#101551, and rust-lang/rust#79500 (I think those authors should get much of the credit here, I am re-writing what they worked out in those threads).

workaround

There is a type inference ambiguity introduced when adding a generic parameter to a type which previously had none, even when that parameter has a default value (more details in rust-lang/rust#98931). I've done the same workaround as rust-lang/rust#101551, which is to make alloc::string::String a type alias to String<Global>, but I've arranged the modules a bit differently to make rebase/merges a bit easier.

This workaround unfortunately changes the type name of the String language item, and that would be user-facing in error or diagnostic output. I understand from this comment that this change is acceptable.

changes to existing API

Most of the methods on the original String have been implemented for the generic version instead. I don't foresee anything more moving from String<Global> to String<A>, as the remaining methods are all constructors which implicitly use the Global allocator.

There are three general types of changes:

  1. methods which don't allocate: here we just change impl Foo for String to impl<A: Allocator> Foo for String<A>
  2. converting to/from other allocator generic types like Vec<u8, A> and Box<str, A>: here we can use the existing allocator from those types.
  3. methods which clone from some other type with an allocator: here it's ambiguous whether the end result should be String<A>, String<Global>, or String<impl Allocator + Default>, etc; in general I try to leave these out of this change, but where some analogous change was made to Vec<T, A> I follow that.

new methods

Some methods have been added to String<A> which are not strictly necessary to land this change, but are considered helpful enough to users, and close enough to existing precedent in Vec<T, A>. Specifically, 4 new constructors (new_in, with_capacity_in, try_with_capacity_in, from_raw_parts_in), 1 destructor (into_raw_parts_with_alloc), and 1 getter (allocator). Technically, the updated from_utf8_unchecked should be sufficient for constructing, but we can add some safe constructors so users don't have to sully themselves.

not implemented

Variants of from_utf{8,16}* which internally allocate or use Cow have been punted on this PR, maybe a followup would make sense to either rewrite them, or add some *_in variant.

@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Nov 25, 2025

The rustc-dev-guide subtree was changed. If this PR only touches the dev guide consider submitting a PR directly to rust-lang/rustc-dev-guide otherwise thank you for updating the dev guide with your changes.

cc @BoxyUwU, @jieyouxu, @Kobzol, @tshepang

This PR modifies tests/ui/issues/. If this PR is adding new tests to tests/ui/issues/,
please refrain from doing so, and instead add it to more descriptive subdirectories.

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

rust-analyzer is developed in its own repository. If possible, consider making this change to rust-lang/rust-analyzer instead.

cc @rust-lang/rust-analyzer

@rustbot rustbot added A-rustc-dev-guide Area: rustc-dev-guide A-rustdoc-search Area: Rustdoc's search feature labels Nov 25, 2025
@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented Nov 25, 2025

r? @Mark-Simulacrum

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

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. 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-rust-analyzer Relevant to the rust-analyzer 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. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) labels Nov 25, 2025
@shua
Copy link
Copy Markdown
Author

shua commented Nov 25, 2025

maybe r? @Amanieu as the reviewer of the previous PR has more context

edit: whoops saw previous reviewer actually was Mark-Simulcrum, Amanieu was just last to leave a review. If it makes sense to swap it back, please do!

@rustbot rustbot assigned Amanieu and unassigned Mark-Simulacrum Nov 25, 2025
@cyrgani cyrgani added the A-allocators Area: Custom and system allocators label Nov 25, 2025
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rustbot rustbot added the T-release Relevant to the release subteam, which will review and decide on the PR/issue. label Nov 26, 2025
@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Copy Markdown
Collaborator

bors commented Nov 26, 2025

☔ The latest upstream changes (presumably #147799) made this pull request unmergeable. Please resolve the merge conflicts.

@rustbot

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@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 Mar 2, 2026
@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Mar 2, 2026

Commit ff51650 has been unapproved.

This PR was contained in a rollup (#153303), which was also unapproved.

@shua
Copy link
Copy Markdown
Author

shua commented Mar 2, 2026

for some reason, when rustdoc is building the reference docs, it thinks alloc::string::String is a struct, and so makes and [`String`] links into a link to alloc/string/struct.String.html. The correct file should be type.String.html, but I am not able to change the reference documentation because it's a git subtree. Should I add some exception to linkchecker, even if it is correctly flagging a bad link and followup with a PR to the reference docs, or should I spend more time trying to figure out what rustdoc is doing?

@rust-bors

This comment has been minimized.

@Amanieu
Copy link
Copy Markdown
Member

Amanieu commented Mar 3, 2026

for some reason, when rustdoc is building the reference docs, it thinks alloc::string::String is a struct, and so makes and [`String`] links into a link to alloc/string/struct.String.html. The correct file should be type.String.html, but I am not able to change the reference documentation because it's a git subtree. Should I add some exception to linkchecker, even if it is correctly flagging a bad link and followup with a PR to the reference docs, or should I spend more time trying to figure out what rustdoc is doing?

cc @rust-lang/lang-docs

@ehuss
Copy link
Copy Markdown
Contributor

ehuss commented Mar 3, 2026

The links are generated directly by rustdoc. If rustdoc is generating the wrong link for something like [`String`], then it seems like it would be good to first investigate that?

And if the link for https://doc.rust-lang.org/std/string/struct.String.html is going away, that seems especially concerning since that very common type probably has links to it from all over the internet.

@shua
Copy link
Copy Markdown
Author

shua commented Mar 4, 2026

It's strange that rustdoc seems to do this correctly everywhere else, eg when building doc comments, it's only when generating the mdbook for src/doc/reference that the links are wrong. Either rustdoc or this mdbook-spec tool inside the src/doc/reference. I'll have to dig in a little more when I have time.

@bjorn3
Copy link
Copy Markdown
Member

bjorn3 commented Mar 17, 2026

There is a type inference ambiguity introduced when adding a generic parameter to a type which previously had none, even when that parameter has a default value (more details in #98931). I've done the same #79499 (comment) as #101551, which is to make alloc::string::String a type alias to String, but I've arranged the modules a bit differently to make rebase/merges a bit easier.

Why was this not necessary for Vec? All stable functions that construct a String still force the global allocator to be used, right? That should be enough to guide type inference I would think when combined with a default for the type parameter for when you explicitly write String as type.

@zachs18
Copy link
Copy Markdown
Contributor

zachs18 commented Mar 17, 2026

All stable functions that construct a String still force the global allocator to be used, right? That should be enough to guide type inference I would think when combined with a default for the type parameter for when you explicitly write String as type.

Note that using String as the base of a path does not apply the type parameter defaults, unlike using <String> as the base of the path, or using String as a type annotation. E.g. if you use String::whatever to get an associated item from a blanket-impl'd trait, that would no longer work since String::path would not constrain A (only <String>::path would): playground.

See also my comments from my attempt at doing this: #101551 (comment) #101551 (comment)

[...] As to why adding the allocator parameter to Vec and other containers didn't break existing code, I don't recall all of the reasoning at the moment, but IIRC this issue doesn't affect Vec or other stdlib containers (as much) because String is the only one that doesn't already have any generics, so the other containers already have to rely on either explicit annotations or type inference for their element type(s), so adding the allocator type doesn't change much for them. [...]

@traviscross
Copy link
Copy Markdown
Contributor

And if the link for https://doc.rust-lang.org/std/string/struct.String.html is going away, that seems especially concerning since that very common type probably has links to it from all over the internet.

This does seem concerning. Is there anything we could do here? E.g., could we use #[cfg(doc)] in a clever way?

@shua
Copy link
Copy Markdown
Author

shua commented Apr 7, 2026

My attempts at #[cfg(doc)] finagling have been so far unsuccessful. Just trying something like

#[cfg(not(doc))]
mod global { struct String<A> { ...} }
#[cfg(not(doc))]
type String = global::String<Global>;
#[cfg(doc)]
struct String<A> { ... }

looks like it should work, but fails trying to document methods on String which have relative links.

impl String {
    /// see [`str::is_foo`]
    /// [`str::is_foo`]: ../../../primitive.str.html#is_foo
    pub fn ...
}

specifically, the path needs either ../../.. or ../.. depending on whether the struct is alloc::string::String or alloc::string::global::String. So some checks were failing if I made the link ../../.. and others failing with ../...

One suggestion was to somehow insert a page redirect from struct.String.html, but I'm worried that will redirect to type.String.html and people will start using that address, and we'll have to forever keep one of those addresses redirecting to the other.

Hopefully, I can figure out some cfg(doc) which both generates the docs at struct.String.html, and appeases CI doc tests

@rustbot

This comment has been minimized.

shua added 7 commits May 9, 2026 23:21
This is a third attempt at implementing adding Allocator support to
the std lib's `String`.  Still stuck on the same issue with type
inference failing on the newly generic `String<A>`, but I opted to do
even less than the previous WIP work, and have added no new functions
(`String<A>` can be constructed via `Vec<u8, A>` or `Box<str, A>`),
and have moved only the struct definition to its own mod to make
rebasing a bit easier if/when main changes underneath me.
This adds a diagnostic name `string_in_global` so that clippy can easily
check for the alloc::string::String type alias.
added some code in linkchecker to check the generic::String docs when
trying to resolve links to alloc::string::String type alias. There's
some lazy-loading that the browser does, but linkchecker doesn't, so
maybe some general-purpose solution would be better, but this seemed
better than a big list of exceptions.
Yes, you could just use `unsafe { from_utf8_unchecked }``, but people get
antsy about `unsafe`, so add some Vec ctor/dtor equivalents.
@rustbot
Copy link
Copy Markdown
Collaborator

rustbot commented May 9, 2026

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

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

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer
Copy link
Copy Markdown
Collaborator

The job aarch64-gnu-llvm-21-2 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
##[endgroup]
Executing "/scripts/stage_2_test_set2.sh"
+ /scripts/stage_2_test_set2.sh
+ '[' 1 == 1 ']'
+ echo 'PR_CI_JOB set; skipping tidy'
+ SKIP_TIDY='--skip tidy'
+ ../x.py --stage 2 test --skip tidy --skip tests --skip coverage-map --skip coverage-run --skip library --skip tidyselftest
PR_CI_JOB set; skipping tidy
##[group]Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.04s
##[endgroup]
---
##[endgroup]
[TIMING:end] tool::ToolBuild { build_compiler: Compiler { stage: 0, host: aarch64-unknown-linux-gnu, forced_compiler: false }, target: aarch64-unknown-linux-gnu, tool: "linkchecker", path: "src/tools/linkchecker", mode: ToolBootstrap, source_type: InTree, extra_features: [], allow_features: "", cargo_args: [], artifact_kind: Binary } -- 0.137
[TIMING:end] tool::Linkchecker { compiler: Compiler { stage: 0, host: aarch64-unknown-linux-gnu, forced_compiler: false }, target: aarch64-unknown-linux-gnu } -- 0.000
##[group]Testing stage1 Linkcheck (aarch64-unknown-linux-gnu)
reference/names/name-resolution.html:452: broken link - `alloc/string/type.String.html`
reference/print.html:48602: broken link - `alloc/string/type.String.html`
proc_macro/struct.Punct.html:31: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.Literal.html:295: broken link - `alloc/string/type.String.html`
proc_macro/struct.Literal.html:321: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.Span.html:23: broken link - `alloc/string/type.String.html`
proc_macro/struct.Span.html:36: broken link - `alloc/string/type.String.html`
proc_macro/struct.Span.html:42: broken link - `alloc/string/type.String.html`
proc_macro/struct.Span.html:44: broken link - `alloc/string/type.String.html`
proc_macro/struct.Span.html:46: broken link - `alloc/string/type.String.html`
proc_macro/struct.Span.html:48: broken link - `alloc/string/type.String.html`
proc_macro/tracked/fn.env_var.html:1: broken link - `alloc/string/type.String.html`
proc_macro/struct.Ident.html:39: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.ExpandError.html:13: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.Diagnostic.html:3: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:6: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:10: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:11: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:14: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:15: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:18: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:19: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:22: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:23: broken link - `alloc/string/type.String.html`
proc_macro/struct.Diagnostic.html:27: broken link - `alloc/string/type.String.html`
proc_macro/enum.TokenTree.html:41: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.LexError.html:15: broken link - `alloc/string/generic/struct.String.html`
proc_macro/trait.ToTokens.html:43: broken link - `alloc/string/type.String.html`
proc_macro/struct.TokenStream.html:49: broken link - `alloc/string/generic/struct.String.html`
proc_macro/struct.Group.html:38: broken link - `alloc/string/generic/struct.String.html`
test/struct.TestDesc.html:14: broken link - `alloc/string/type.String.html`
test/enum.TestName.html:3: broken link - `alloc/string/type.String.html`
test/enum.TestName.html:5: broken link - `alloc/string/type.String.html`
test/enum.TestName.html:19: broken link - `alloc/string/generic/struct.String.html`
test/test/struct.TestDesc.html:14: broken link - `alloc/string/type.String.html`
test/test/enum.TestName.html:3: broken link - `alloc/string/type.String.html`
test/test/enum.TestName.html:5: broken link - `alloc/string/type.String.html`
test/test/enum.TestName.html:19: broken link - `alloc/string/generic/struct.String.html`
test/test/fn.parse_opts.html:1: broken link - `alloc/string/type.String.html`
test/test/fn.parse_opts.html:1: broken link - `alloc/string/type.String.html`
test/test/struct.MetricMap.html:12: broken link - `alloc/string/type.String.html`
test/test/struct.TestExecTime.html:14: broken link - `alloc/string/generic/struct.String.html`
test/test/struct.TestOpts.html:3: broken link - `alloc/string/type.String.html`
test/test/struct.TestOpts.html:17: broken link - `alloc/string/type.String.html`
test/test/struct.TestOpts.html:21: broken link - `alloc/string/type.String.html`
test/test/struct.TestOpts.html:21: broken link - `alloc/string/type.String.html`
test/test/enum.TestResult.html:4: broken link - `alloc/string/type.String.html`
test/test/enum.TestResult.html:8: broken link - `alloc/string/type.String.html`
test/struct.TestOpts.html:3: broken link - `alloc/string/type.String.html`
test/struct.TestOpts.html:17: broken link - `alloc/string/type.String.html`
test/struct.TestOpts.html:21: broken link - `alloc/string/type.String.html`
test/struct.TestOpts.html:21: broken link - `alloc/string/type.String.html`
test/fn.print_merged_doctests_times.html:2: broken link - `alloc/string/type.String.html`
test/fn.test_main.html:2: broken link - `alloc/string/type.String.html`
test/bench/struct.Bencher.html:10: broken link - `alloc/string/type.String.html`
test/bench/struct.Bencher.html:11: broken link - `alloc/string/type.String.html`
test/bench/fn.run_once.html:1: broken link - `alloc/string/type.String.html`
test/bench/fn.run_once.html:2: broken link - `alloc/string/type.String.html`
test/bench/fn.fmt_bench_samples.html:1: broken link - `alloc/string/type.String.html`
test/bench/fn.benchmark.html:8: broken link - `alloc/string/type.String.html`
test/fn.test_main_with_exit_callback.html:2: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:2: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:3: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:4: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:5: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:6: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:7: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/enum.TestFn.html:8: broken link - `alloc/string/type.String.html`
test/fn.assert_test_result.html:1: broken link - `alloc/string/type.String.html`
std/ops/trait.Deref.html:61: broken link - `alloc/string/type.String.html`
core/ops/trait.Deref.html:61: broken link - `alloc/string/type.String.html`
book/ch02-00-guessing-game-tutorial.html:366: broken link - `std/string/struct.String.html`
book/print.html:1078: broken link - `std/string/struct.String.html`
checked links in: 26.2s
number of HTML files scanned: 62152
number of HTML redirects found: 22160
number of links checked: 2912997
number of links ignored due to external: 179110
number of links ignored due to exceptions: 24
number of intra doc links ignored: 9
errors found: 78
found some broken links
NOTE: if you are adding or renaming a markdown file in a mdBook, don't forget to register the page in SUMMARY.md
Bootstrap failed while executing `--stage 2 test --skip tidy --skip tests --skip coverage-map --skip coverage-run --skip library --skip tidyselftest`
Command `/checkout/obj/build/aarch64-unknown-linux-gnu/stage1-tools-bin/linkchecker /checkout/obj/build/aarch64-unknown-linux-gnu/doc` failed with exit code 1
Created at: src/bootstrap/src/core/build_steps/tool.rs:1618:23
Executed at: src/bootstrap/src/core/build_steps/test.rs:191:77

---
   2: <std::backtrace::Backtrace>::create
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/backtrace.rs:331:13
   3: <bootstrap::utils::exec::DeferredCommand>::finish_process
             at /checkout/src/bootstrap/src/utils/exec.rs:939:17
   4: <bootstrap::utils::exec::DeferredCommand>::wait_for_output::<&bootstrap::utils::exec::ExecutionContext>
             at /checkout/src/bootstrap/src/utils/exec.rs:831:21
   5: <bootstrap::utils::exec::ExecutionContext>::run
             at /checkout/src/bootstrap/src/utils/exec.rs:741:45
   6: <bootstrap::utils::exec::BootstrapCommand>::run::<&bootstrap::core::builder::Builder>
             at /checkout/src/bootstrap/src/utils/exec.rs:339:27
   7: <bootstrap::core::build_steps::test::Linkcheck as bootstrap::core::builder::Step>::run
             at /checkout/src/bootstrap/src/core/build_steps/test.rs:191:77
   8: <bootstrap::core::builder::Builder>::ensure::<bootstrap::core::build_steps::test::Linkcheck>
             at /checkout/src/bootstrap/src/core/builder/mod.rs:1595:36
   9: <bootstrap::core::build_steps::test::Linkcheck as bootstrap::core::builder::Step>::make_run
             at /checkout/src/bootstrap/src/core/build_steps/test.rs:137:21
  10: <bootstrap::core::builder::StepDescription>::maybe_run
             at /checkout/src/bootstrap/src/core/builder/mod.rs:476:13
  11: bootstrap::core::builder::cli_paths::match_paths_to_steps_and_run
             at /checkout/src/bootstrap/src/core/builder/cli_paths.rs:141:22
  12: <bootstrap::core::builder::Builder>::run_step_descriptions
             at /checkout/src/bootstrap/src/core/builder/mod.rs:1138:9
  13: <bootstrap::core::builder::Builder>::execute_cli
             at /checkout/src/bootstrap/src/core/builder/mod.rs:1117:14
  14: <bootstrap::Build>::build
             at /checkout/src/bootstrap/src/lib.rs:803:25
  15: bootstrap::main
             at /checkout/src/bootstrap/src/bin/main.rs:130:11
  16: <fn() as core::ops::function::FnOnce<()>>::call_once
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/core/src/ops/function.rs:250:5
  17: std::sys::backtrace::__rust_begin_short_backtrace::<fn(), ()>
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/sys/backtrace.rs:166:18
  18: std::rt::lang_start::<()>::{closure#0}
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/rt.rs:206:18
  19: <&dyn core::ops::function::Fn<(), Output = i32> + core::panic::unwind_safe::RefUnwindSafe + core::marker::Sync as core::ops::function::FnOnce<()>>::call_once
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/core/src/ops/function.rs:287:21
  20: std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::panic::unwind_safe::RefUnwindSafe + core::marker::Sync, i32>
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/panicking.rs:581:40
  21: std::panicking::catch_unwind::<i32, &dyn core::ops::function::Fn<(), Output = i32> + core::panic::unwind_safe::RefUnwindSafe + core::marker::Sync>
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/panicking.rs:544:19
  22: std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::panic::unwind_safe::RefUnwindSafe + core::marker::Sync, i32>
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/panic.rs:359:14
  23: std::rt::lang_start_internal::{closure#0}
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/rt.rs:175:24
  24: std::panicking::catch_unwind::do_call::<std::rt::lang_start_internal::{closure#0}, isize>
             at /rustc/ef0fb8a2563200e322fa4419f09f65a63742038c/library/std/src/panicking.rs:581:40
---
  31: __libc_start_main
  32: _start


Command has failed. Rerun with -v to see more details.
Build completed unsuccessfully in 0:40:12
  local time: Sat May  9 22:32:51 UTC 2026
  network time: Sat, 09 May 2026 22:32:51 GMT
##[error]Process completed with exit code 1.
##[group]Run echo "disk usage:"

@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented May 12, 2026

☔ The latest upstream changes (presumably #156473) made this pull request unmergeable. Please resolve the merge conflicts.

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

Labels

A-allocators Area: Custom and system allocators A-rustc-dev-guide Area: rustc-dev-guide A-rustdoc-js Area: Rustdoc's JS front-end A-rustdoc-search Area: Rustdoc's search feature S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-clippy Relevant to the Clippy team. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-release Relevant to the release subteam, which will review and decide on the PR/issue. T-rust-analyzer Relevant to the rust-analyzer 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. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output. 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.