I don't believe macro assemblers do a flow-based analysis to verify that the register allocation for variables is consistent; from what I understand the most you get is just a scoped alias for the name of the register. Of course, I could be missing something. If you know of anything beyond the relevant work I cite, please let me know.
I had some similar ideas for an assembler targeting MIPS, I wanted to use symbolic names, reserved within called scopes, and have the assembler find an allocation or error (requiring an explicit decision of what to spill), didn't find relevant examples at the time (circa 2018). Ultimately I decided I was wasting too much time on the assembler and went with global allocations for the most part.