atrosinenko wrote:

Huh, my first thought was: "It won't work, `--implicit-check-not` simply 
inserts `...-NOT` directives between each pair of consecutive positive 
directives, so it would only operate on the lines of input not covered by the 
explicit positive directives". My idea was that, since you essentially perform 
the checks on the only interesting line of `clang`'s output, you have to use 
some clever mix of `...-SAME:` and `...-NOT:` directives. To confirm my 
understanding, I replaced `--implicit-check-not='"-fptrauth-'` with 
`--implicit-check-not='"-emit-obj'` (the latter substring was simply copied 
from the actual output)... and `FileCheck` successfully rejected its input!

After a bit more experiments, I realized that it looks like `FileCheck` tracks 
the current input position as the byte index (or maybe UTF-8 character, or 
something like this - this is not that important) and not the line number, as I 
thought before :)

For example, this input
```
line 1
line 2 some text
line 3
```
is accepted for
```
CHECK: line 2
CHECK: some
```
but not for
```
CHECK: some
CHECK: line 2
```
Furthermore, just as expected, the example input is accepted for
```
CHECK: line 2
CHECK-SAME: some text
```
and rejected for
```
CHECK: line 1
CHECK-SAME: some text
```
but it is also rejected for
```
CHECK: some text
CHECK-SAME: line 2
```
That is, the 
[`-SAME:`](https://llvm.org/docs/CommandGuide/FileCheck.html#the-check-same-directive)
 directive merely rejects the match if there are any newlines between the 
previous and the current matches - nothing more. This seems to be the 
**formal** meaning of `...-SAME:` and not "matches happen on the same line as 
the previous match".

https://github.com/llvm/llvm-project/pull/212445
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to