Match guard can both move and static-promote a single constant (original) (raw)
I'm not sure if this is a bug or not.
I expected the below code to produce a compile error, but instead it compiles fine.
struct Thing;
fn foo() -> &'static Thing { let y; match Thing { x if { y = &x; true } => { // This drop should invalidate y drop(x); y } _ => { panic!(); } } }
It seems that the single Thing constant is both moved and static-promoted. This seems very strange.
Related to #144939. Discovered in #141295 (comment).
@rustbot labels +A-patterns +A-const-eval
Meta
Reproduces on the playground with version 1.91.0-nightly (2025-08-09 ca77504943887037504c)