jdenny marked 5 inline comments as done.
jdenny added a comment.

In D79276#2024411 <https://reviews.llvm.org/D79276#2024411>, @jhenderson wrote:

> LGTM, but might not hurt to have someone else looking at it.


I'll probably wait until Monday to give others more time to participate.

Thanks for the review!



================
Comment at: llvm/test/FileCheck/comment/bad-comment-prefix.txt:40
+RUN:                                      -check-prefixes=RUN,FOO | \
+RUN:   FileCheck -check-prefix=CHECK-PREFIX-DUP-RUN_ %s
+CHECK-PREFIX-DUP-COM: error: supplied check prefix must be unique among check 
and comment prefixes: 'COM'
----------------
jhenderson wrote:
> I'm guessing the underscore is to circumvent lit trying to run things? If so, 
> I think we need to fix lit to only run lines where the RUN: is at the start 
> of the line (ignoring whitespace and non alpha-numerics). I don't think 
> anything else makes sense.
> 
> Not related to this patch of course, so nothing to do here, unless my guess 
> is incorrect.
> I'm guessing the underscore is to circumvent lit trying to run things?

Yep.

> If so, I think we need to fix lit to only run lines where the RUN: is at the 
> start of the line (ignoring whitespace and non alpha-numerics). I don't think 
> anything else makes sense.

I agree lit should change.  That might be the right condition.  People do 
things like the following, but maybe they shouldn't:

```
clang/test/Index/complete-access-checks-crash.cpp:    Derived(). // RUN: 
c-index-test -code-completion-at=%s:10:15 %s | FileCheck %s
```

At the very least, lit shouldn't recognize `RUN:` at the ends of other words 
(where `-` is considered a word character).  Lit even recognizes `XRUN:`.


================
Comment at: llvm/test/FileCheck/comment/suffixes.txt:1-2
+# Comment prefixes plus check directive suffixes are not comment directives
+# and are treated as plain text.
+
----------------
jhenderson wrote:
> jdenny wrote:
> > jhenderson wrote:
> > > I don't think you should change anything here, but if I'm following this 
> > > right, this leads to the amusing limitation that you can "comment out" 
> > > (via --comment-prefixes) any CHECK lines that use a suffix (CHECK-NEXT, 
> > > CHECK-NOT etc) but not those that don't without changing --check-prefixes 
> > > value!
> > > 
> > > By the way, do we need to have a test-case for that? I.e. that 
> > > --comment-prefixes=CHECK-NEXT disables the CHECK-NEXT lines (assuming it 
> > > does of course)?
> > > I don't think you should change anything here, but if I'm following this 
> > > right, this leads to the amusing limitation that you can "comment out" 
> > > (via --comment-prefixes) any CHECK lines that use a suffix (CHECK-NEXT, 
> > > CHECK-NOT etc) but not those that don't without changing --check-prefixes 
> > > value!
> > 
> > That's right, but check prefixes have this problem too.  That is, you can 
> > do things like `-check-prefixes=FOO,FOO-NOT` so that `FOO-NOT` is not 
> > negative.
> > 
> > `ValidatePrefixes` should be extended to catch such cases, I think.  But in 
> > a separate patch.
> > 
> > > By the way, do we need to have a test-case for that? I.e. that 
> > > --comment-prefixes=CHECK-NEXT disables the CHECK-NEXT lines (assuming it 
> > > does of course)?
> > 
> > Hmm.  I think it's behavior we don't want to support.  Maybe the test case 
> > should be added when extending `ValidatePrefixes` as I described above?
> > 
> I agree it's separate work. FWIW, I just came up with a genuinely useful 
> use-case for it with CHECK directives, but it might just be unnecessary. 
> Imagine the case where you want a test where some specific output is printed 
> under one condition and not another condition. You'd want something like:
> 
> ```
> # RUN: ... | FileCheck %s --check-prefix=WITH
> # RUN: ... | FileCheck %s --check-prefix=WITHOUT
> 
> # WITH: some text that should be matched
> # WITHOUT-NOT: some text that should be matched
> ```
> 
> A careleses developer could change the text of "WITH" to match some new 
> behaviour without changing "WITHOUT-NOT", thus breaking the second case. You 
> could instead do:
> 
> ```
> # RUN: ... | FileCheck %s --check-prefix=CHECK-NOT
> # RUN: ... | FileCheck %s
> 
> # CHECK-NOT: some text that should be matched
> ```
> Then, if the output changed, you'd update both the regular and NOT match. I 
> might have used this pattern in a few tests in the past had it occurred to me.
> 
> Anyway, I think there are other ways of solving that problem, although not 
> without work on FileCheck (I've been prototyping a method with only limited 
> success so far), and I agree it's otherwise mostly horrible, so I'm not 
> seriously opposing the suggestion.
I agree the use case is important, and I also agree there must be a better 
solution.

The underlying issue is that we want to reuse a pattern.  Perhaps there should 
be some way to define a FileCheck variable once and reuse it among multiple 
FileCheck commands. For example:

```
# RUN: ... | FileCheck %s --check-prefix=WITH,ALL
# RUN: ... | FileCheck %s --check-prefix=WITHOUT,ALL

# ALL-DEF: [[VAR:some text that should be matched]]
# WITH: [[VAR]]
# WITHOUT-NOT: [[VAR]]
```

It should probably be possible to use regexes in such a variable.  I'm not sure 
if that's possible now.  It might require a special variable type.  We 
currently have `#` to indicate numeric variables.  Perhaps `~` would indicate 
pattern variables.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79276/new/

https://reviews.llvm.org/D79276



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to