On Thu, 2024-08-15 at 14:15 -0700, Andrii Nakryiko wrote: [...] > > +/* program entry for main(), regular function prologue */ > > +__jit_x86(" endbr64") > > +__jit_x86(" nopl (%rax,%rax)") > > +__jit_x86(" xorq %rax, %rax") > > +__jit_x86(" pushq %rbp") > > +__jit_x86(" movq %rsp, %rbp") > > I'm a bit too lazy to fish it out of the code, so I'll just ask. > Does matching of __jit_x86() string behave in the same way as __msg(). > I.e., there could be unexpected lines that would be skipped, as long > as we find a match for each __jit_x86() one? Yes, behaves same way as __msg(). > Isn't that a bit counter-intuitive and potentially dangerous behavior > for checking disassembly? If my assumption is correct, maybe we should > add some sort of `__jit_x86("...")` placeholder to explicitly mark > that we allow some amount of lines to be skipped, but otherwise be > strict and require matching line-by-line? This is a valid concern. What you suggest with "..." looks good. Another option is to follow llvm-lit conventions and add __jit_x86_next("<whatever>"), which would only match if pattern is on line below any previous match. (And later add __jit_x86_next_not, and make these *_not, *_next variants accessible for every __msg-like macro). Link: https://llvm.org/docs/CommandGuide/FileCheck.html#the-check-next-directive [...]