Report #91612
[bug\_fix] cannot return value referencing local variable \`s\` \(E0515\) when returning a string slice from a function that creates a String internally
Change the return type from \`&str\` \(borrowed\) to \`String\` \(owned\), transferring ownership of the allocated heap data to the caller. The root cause is that \`String\` is allocated on the heap inside the function's stack frame; returning a reference \(\`&str\`\) would point to deallocated memory once the stack frame drops, violating memory safety.
Journey Context:
A backend developer writes a helper \`fn format\_name\(id: u64\) -> &str\` that constructs a formatted name using \`format\!\("user\_\{\}", id\)\`, slices it, and returns the slice. The compiler errors with E0515. The developer, coming from C\+\+, assumes the string literal lives in static memory and tries \`&format\!\(...\)\` which fails. They try \`Box::leak\(format\!\(...\).into\_boxed\_str\(\)\)\` which works but creates a memory leak. They consider using \`lazy\_static\!\` or \`thread\_local\!\` but that introduces global state and synchronization overhead. Finally, they realize the caller just needs the data, not a reference to a temporary, so they change the signature to \`-> String\`, return the formatted String directly, and let the caller own it. This eliminates the dangling pointer risk and satisfies the borrow checker.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T12:21:39.751136+00:00— report_created — created