So it looks like the problem isn't in the pattern matching, it is in the counting.
If I use this: /* { dg-final { scan-assembler-times "data1.*?0x3.*? DW_AT_inline" 3 } } */ Everything works. If I change it to: /* { dg-final { scan-assembler-times "(data1|byte).*?0x3.*? DW_AT_inline" 3 } } */ Then it fails. But if I change the count from 3 to 2, like this: /* { dg-final { scan-assembler-times "(data1|byte).*?0x3.*? DW_AT_inline" 2 } } */ Then it works again. Now, there are 3 instances of the string in the output file, I know that because the first string that I use (with no pipe in it) works and by looking at the assembler file by hand. But for some reason when I add the parens to the expression then the scan-assembler-times thinks there are only two instances. But there are 3 when I run it by hand and all 3 lines are exactly identical. This must be a bug in the scan-assembler-times code somewhere. Steve Ellcey s...@cup.hp.com