Segher and David, Thanks for your explanation. I got it. The "\m" itself is a constraint escape.
Gui Haochen On 11/1/2022 上午 9:12, Segher Boessenkool wrote: > On Mon, Jan 10, 2022 at 06:09:01PM -0500, David Edelsohn wrote: >> On Sun, Jan 9, 2022 at 10:16 PM HAO CHEN GUI <guih...@linux.ibm.com> wrote: >>>> +/* { dg-final { scan-assembler-not "\mmr\M" } } */ >> >> Segher probably would prefer {\mmr\M} . > > Because that one works, and the one with double quotes doesn't, yes :-) > > It is a scan-assembler-not so the testcase likely won't fail, but it is > checking the wrong thing. In double-quoted strings "\m" means the same > as "m", and "\M" means the same as "M" (neither escape has any special > meaning). If you want the regex escapes in such a string, you need to > escape the escapes, so write "\\m" and "\\M". It is much simpler to not > have backslash substitution on the strings at all, so to use {\m} etc. > > > Segher