don't expand subexprs of for loop, just re-expand whole thing.

Fixes #15167
added compile-fail test for 15167
make macros hygienic