https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104236
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Nick Desaulniers from comment #3)
> Thanks for the feedback. I guess I was expecting these two to be somewhat
> equivalent:
>
> void x (int a) {
> if (a)
> asm("# %0"::"i"(__COUNTER__));
> else
> asm("# %0"::"i"(__COUNTER__));
> }
>
> void y (int a) {
> if (a)
> asm("# %=");
> else
> asm("# %=");
> }
They are not. I was just about going to suggest the use of __COUNTER__ as the
correct way of implementing the inline-asm also.
For GCC, %= gets resolved at the very end of compiling when outputting the asm
to the output file.
GCC does touch the string or look into the inline-asm string during compiling
except to duplicate it or to see if it is an exact match (remove duplicates).