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)