[cfe-dev] [cfe-commits] Patch for review: enhancements/fixes to -verify

Jordan Rose jordan_rose at apple.com
Mon Jun 11 09:53:58 PDT 2012

Hi, Andy. CCing to cfe-dev since this is a change worth discussing.

Personally, I think this is great. Being able to make expected-* be preprocessor-dependent means it's a lot easier to write conditional tests, which previously you'd need to use different FileCheck invocations to handle.

I'm less excited about the non-deterministic number of warnings, since I don't think we should encourage tests that don't know exactly how many warnings will be emitted. '+' is kind of a special case for notes that we trigger more than once but don't really care about. But since this is fully backwards-compatible, this isn't a strong objection.

Good catch on the comments-in-the-line problem. I just hit that with a FileCheck test recently.

I didn't see anything obviously out-of-place here, but the -verify code isn't my area of expertise, so please wait for someone else's review.

Thanks for coming up with this!

On Jun 11, 2012, at 8:58 AM, Andy Gibbs wrote:

> Hi all,
> The -verify option has the potential for uses outside just the clang 
> test-suite, for example, within a test-suite for a 3rd-party library. 
> However, it has a number of idiosyncrasies or missing features which the 
> attached patch seeks to address.  While none of the alterations are perhaps 
> critical to the development of clang itself (that remains to be seen!), they 
> do make the -verify feature immeasurably more flexible and useful.
> In the first instance, the patch enables -verify to distinguish between 
> blocks of code which have been #if/#ifdef-ed out and those which have not. 
> The current implementation will not do this, so for example, this trivial 
> fragment will cause an "expected but not seen" failure:
> #if 0
> #error some error // expected-error {{some error}}
> #endif
> Secondly, in the current implementation, all diagnostics must be contained 
> on the actual line which generates the diagnostic.  The new implementation 
> allows a line number to be optionally specified as part of the diagnostic 
> declaration using the @ symbol, for example:
> // expected-error@<line> {{some error}}
> where <line> can be some absolute line number, for example: 10, or a 
> relative line number, for example: -1 or +5, from the current line.  Note 
> that where an absolute line number is given this is intentionally the actual 
> source line in the file in question, not one modified by the #line 
> directive.  Likewise, relative line numbers are also not affected by the 
> #line directive.
> Thirdly, in the current implementation, it is possible to specify an exact 
> number of times a diagnostic will appear, or that it will appear "1 or more" 
> times.  This new implementation extends this to enable the test case to 
> specify a more precise range.  Therefore, the following are now possible:
> (Those marked * are already possible in the current implementation)
> // expected-error 2 {{some error}} -- must appear twice*
> // expected-error + {{some error}} -- must appear once at least*
> // expected-error 1+ {{some error}} -- same as the line above
> // expected-error 0+ {{some error}} -- may or may not appear
> // expected-error 2-5 {{some error}} -- must appear at least 2 but not more 
> than 5 times.
> The patch also includes the relevant modifications necessary to the existing 
> clang test-suite.  These modifications were necessary for two reasons: since 
> #if-block processing is now included, various tests in the PCH folder were 
> now missing their relevant diagnostics.  Also #error/#warning directives 
> include all text up to the end-of-line in their message so tests containing 
> these have the diagnostics shifted onto a separate line now.
> Coincidentally, this is a good thing in any case since (as was highlighted 
> in Preprocessor/line-directive.c) the following line will always 
> (erroneously!) pass in the current implementation:
> #error AAA // expected-error {{BBB}}
> A couple of tests have also been added to test the new features of -verify.
> The attached patch is taken against the current trunk.  I hope it meets the 
> quality criteria to be considered for committal.  Please don't hesitate to 
> quiz me on any aspect of it!
> Kind regards
> Andy
> <verify-enhancement.diff>_______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

More information about the cfe-dev mailing list