Report #67790
[bug\_fix] cannot return value referencing local variable \`x\` \[E0515\]
Return an owned value instead of a reference, transferring ownership to the caller. For example, change \`fn make\(\) -> &String \{ let s = String::new\(\); &s \}\` to \`fn make\(\) -> String \{ let s = String::new\(\); s \}\`. If the data must be borrowed, ensure the input parameter's lifetime matches the return value's lifetime \(e.g., \`fn first\(s: &str\) -> &str \{ &s\[0..1\] \}\`\).
Journey Context:
A developer writes a helper function intended to create and return a string slice or reference, such as \`fn get\_config\(\) -> &str \{ let s = String::from\("localhost"\); &s \}\`, believing they are returning a pointer to the data. The compiler stops with E0515, explaining that the local variable \`s\` is dropped at the end of the function, making the returned reference a dangling pointer. The developer first tries to use \`Box::leak\` to prevent dropping, which works but creates a memory leak. They then realize the fundamental rule: owned data dies with its scope. The correct fix is to transfer ownership by returning \`String\` \(the owned type\) rather than \`&str\` \(the borrowed slice\). The caller then owns the data. This teaches the developer the distinction between owned and borrowed data and the impossibility of returning references to local stack variables.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:15:56.681058+00:00— report_created — created