[PATCH] -verify enhancement to support matching "any" line in included files

Jordan Rose jordan_rose at apple.com
Tue Jul 8 09:10:55 PDT 2014


The analyzer would get mild use out of this too; we have "system header simulators" shared across multiple files, and encoding line numbers in each file that uses the header is somewhat brittle when the header needs to change. Although I just realized that #line might be able to get around that...

Jordan


On Jul 8, 2014, at 1:55 , Andy Gibbs <andyg1001 at hotmail.co.uk> wrote:

> Hi David,
> 
> This patch is not primarily for clang's test-suite but for making the "-verify" feature more useful to outside use (it is such a useful feature already but not yet perfect!).
> 
> We use "-verify", for example, to test our library code.  In many test-cases we test to ensure reasonable (consise, precise) error messages are generated when the library is used in invalid ways.  Therefore, a test-case may have many "expected-error/warning/note" lines that reference these header files. However, since the library is under development, the header files can change and this presents a big problem since every change can have a knock-on effect on all the test-cases that reference this header file (which means hundreds of files may need to be updated).
> 
> The supplied patch rectifies this is in (I hope!) a clean way.  We've been using this patch for about a year -- I thought it time to see whether other users could benefit from it.
> 
> The example in my earlier email using a system header was just a simple example to demonstrate the change.  Perhaps this is a better code snippet, using instead a library header:
> 
> int(*j)(int) = FunctorTraits<decltype(Lambda2)>::CastToFunctionPointer();
> // expected-error at util/traits/FunctorTraits.h:* {{T does not supply a valid cast operator}}
> // expected-note at -2 {{requested here}}
> 
> Regards,
> 
> Andy
> 
> 
> ----- Original Message ----- From: "David Blaikie" <dblaikie at gmail.com>
> To: "Andy Gibbs" <andyg1001 at hotmail.co.uk>
> Cc: "cfe-commits cfe" <cfe-commits at cs.uiuc.edu>
> Sent: Monday, July 07, 2014 10:33 PM
> Subject: Re: [PATCH] -verify enhancement to support matching "any" line in included files
> 
> 
>> We generally try not to test against system headers - such a test case
>> should just include a local file and then the line number would be
>> known.
>> 
>> Is there a particular need to test some behavior against a system header?
>> 
>> On Thu, Jul 3, 2014 at 6:32 AM, Andy Gibbs <andyg1001 at hotmail.co.uk> wrote:
>>> Hi,
>>> 
>>> I have made an enhancement to the -verify function of clang to support
>>> matching diagnostics in included header files where the line number is not
>>> necessarily known (or constant).
>>> 
>>> Currently, matching a diagnostic in an included file is done as in the
>>> following fragment:
>>> 
>>> // expected-warning at +2 {{incompatible}} expected-warning at +2 {{literal}}
>>> // expected-note at stdio.h:359 {{here}}
>>> printf(12);
>>> 
>>> Problem is, the line number inside stdio.h is dependent on the system, so
>>> the attached patch provides support for substituting the line number for
>>> '*', as in:
>>> 
>>> // expected-note at stdio.h:* {{here}}
>>> 
>>> so that the diagnostic is matched without the line number being known.
>>> 
>>> I've intentially limited this feature to line numbers in external files only
>>> since the line numbers in the main source file should be always "known".
>>> While this change may not have an immediate and particular purpose for the
>>> clang test-suite itself, I personally feel it is a good and useful
>>> enhancement to -verify for people (like me!) who use this for testing
>>> 3rd-party library code.
>>> 
>>> Please let me know if this has support/approval for being committed...
>>> 
>>> Thanks
>>> 
>>> Andy
>>> 
>>> 
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list