jdenny added a comment.




================
Comment at: lib/Frontend/CompilerInvocation.cpp:1095
+      if (Diags) {
+        Diags->Report(diag::err_drv_invalid_value) << "-verify=" << Prefix;
+        Diags->Report(diag::note_drv_verify_prefix_unique);
----------------
hfinkel wrote:
> jdenny wrote:
> > hfinkel wrote:
> > > If this were going to be an error, then it should have error message that 
> > > explains the problem (e.g., duplicate --verify prefix). I don't believe 
> > > that we should make this an error (i.e., I think that we should allow 
> > > duplicate --verify options with the same prefixes).
> > > If this were going to be an error, then it should have error message that 
> > > explains the problem (e.g., duplicate --verify prefix).
> > 
> > Are you saying you prefer that to be in the error instead of the note 
> > (where it is now)?
> > 
> > > I don't believe that we should make this an error (i.e., I think that we 
> > > should allow duplicate --verify options with the same prefixes).
> > 
> > I see two reasons to permit duplicate explicit prefixes:
> > 
> > 1. It simplifies the documentation some (see previous comment).
> > 
> > 2. Typically, it's convenient to permit command-line options to be repeated 
> > so that groups of options can be collected in shell or make variables 
> > without having to worry about conflicts between groups.  On the other hand, 
> > I'm having trouble imagining that use case for -verify options, which I 
> > believe would normally appear directly in command lines in test source 
> > files.  Have you seen use cases (perhaps with FileCheck) where it would be 
> > useful?
> > 
> > I see three reasons not to permit duplicate explicit prefixes:
> > 
> > 1. Not permitting duplicates is consistent with FileCheck's 
> > --check-prefix[es].
> > 
> > 2. If we change our mind, we can later relax the restriction without 
> > breaking backward compatibility, but we cannot go the other direction.
> > 
> > 3. Suppose a developer wants to extend an existing test case by adding new 
> > -verify prefixes to existing clang command lines that already uses many 
> > -verify prefixes.  If the developer accidentally duplicates an existing 
> > prefix, the test case surely will not behave as expected, but it should be 
> > easier to understand what has gone wrong if the compiler complains about 
> > duplicate prefixes.
> > 
> > I'm not adamant about the current behavior, but I think we should consider 
> > these points before deciding.
> >> If this were going to be an error, then it should have error message that 
> >> explains the problem (e.g., duplicate --verify prefix).
> > Are you saying you prefer that to be in the error instead of the note 
> > (where it is now)?
> 
> No, I'm saying that if we retain this as an error at all, then it needs 
> better text. I'd prefer it not be an error.
> 
> > I see three reasons not to permit duplicate explicit prefixes:
> 
> I don't have a strong opinion, but in general, prohibiting duplicating 
> command-line options hurts composability of command lines and makes scripting 
> more difficult. That's a general statement (i.e., not tied to this use case), 
> but as a result, I feel that should be the default unless a good reason 
> (technical or otherwise) is presented.
> 
> In this case, checking for duplicates adds complexity to the implementation, 
> and as far as I can tell, adds little value. Obviously, when writing checks, 
> the author should check that they work. Moreover, the implementation will 
> already complain if there are unmatched diagnostics, or if nothing matches, 
> so the chance of accidentally mistyping the verify prefix seems low. 
> 
> > 1. Not permitting duplicates is consistent with FileCheck's 
> > --check-prefix[es].
> 
> I don't find this compelling. In part, this is because FileCheck can't 
> complain about unmatched output (that wouldn't make sense), and so the chance 
> of error with FileCheck is much higher.
> 
> > 2. If we change our mind, we can later relax the restriction without 
> > breaking backward compatibility, but we cannot go the other direction.
> 
> Not for this kind of option, really. This is a tool for Clang developers. If 
> we found in the future that allowing duplicates where a large source of 
> errors, we'd just change it.
> 
> > 3. Suppose a developer wants to extend an existing test case by adding new 
> > -verify prefixes to existing clang command lines that already uses many 
> > -verify prefixes. If the developer accidentally duplicates an existing 
> > prefix, the test case surely will not behave as expected, but it should be 
> > easier to understand what has gone wrong if the compiler complains about 
> > duplicate prefixes.
> 
> If someone else feels strongly about this, please speak up. I don't see this 
> as worth the implementation complexity nor sufficient justification to 
> override what I see as the best practice of allowing duplicate options.
> 
> > 
> > I'm not adamant about the current behavior, but I think we should consider 
> > these points before deciding.
> 
> Sure.
I'm not sure why, but Phabricator doesn't give me the menu option to quote your 
comment in full this time, so I'll copy and paste just the most important lines.

> No, I'm saying that if we retain this as an error at all, then it needs 
> better text. I'd prefer it not be an error.

Does the text for spelling errors, which are diagnosed immediately before this, 
look good to you?

> In this case, checking for duplicates adds complexity to the implementation

But really not very much.

> FileCheck can't complain about unmatched output (that wouldn't make sense), 
> and so the chance of error with FileCheck is much higher.

That's an important distinction I hadn't appreciated.

> This is a tool for Clang developers. If we found in the future that allowing 
> duplicates where a large source of errors, we'd just change it.

That argument convinces me.  Unless someone objects before I get to it, I'll 
remove the restriction for duplicates.


https://reviews.llvm.org/D39694



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

Reply via email to