[cfe-commits] [Patch 7 of 7] -verify fixes and enhancement

Jordan Rose jordan_rose at apple.com
Tue Jul 3 08:18:21 PDT 2012


On Jul 2, 2012, at 10:39 PM, Andy Gibbs wrote:

> On Tuesday, July 03, 2012 2:33 AM, Jordan Rose wrote:
>>> Index: tools/clang/test/Modules/Inputs/Module.framework/Headers/Module.h
>>> ==================================================================
>>> --- tools/clang/test/Modules/Inputs/Module.framework/Headers/Module.h
>>> +++ tools/clang/test/Modules/Inputs/Module.framework/Headers/Module.h
>>> @@ -1,6 +1,6 @@
>>> -// expected-warning{{umbrella header}}
>>> +// expected-warning 0-1 {{umbrella header}}
>>> 
>>> #ifndef MODULE_H
>>> #define MODULE_H
>>> const char *getModuleVersion(void);
>> 
>> This does not mean the same thing. Why is it being changed?
> 
> You are right, it means the expected warning may or may not appear once.
> What you observe here is a test-case bug which was exposed by handling
> included files properly once my patch is applied.  I imagine that if proper
> handling of include files was always the case, this test-case would have
> been written differently...
> 
> Let me give an example: (assuming my patch isn't applied)
> 
> ///// test-case-include.h
> // expected-warning{{some warning}}
> 
> ///// test-case.c
> #include "test-case-include.h"
> 
> What would you expect if you ran the test-case with -verify?  I should
> expect that it fails since there is an unseen warning, however, it will
> pass.  This is one of the bugs in -verify which is now fixed.
> 
> In the case above, Module.h is shared across a number of tests.  In some
> tests the include file was parsed correctly and in others it was not.  (I
> made some comments about a net with holes in another post and this
> is one example of where it applied!)  Unfortunately, this incorrect parsing
> coincided with the cases where the diagnostic also not generated (if you
> look at the original implementation you will understand why), so the
> test-case bug was missed.  Since the diagnostic sometimes is and
> sometimes is not generated, hence the "0-1".

I see. It doesn't look like the "umbrella header" warning (-Wincomplete-umbrella) is exercised anywhere else, though. Perhaps it should be put into a test of its own? (I think it's reasonable to make a separate "Umbrella.framework" because of the existing expectation in Module.framework.)

On the other hand, I can see an argument for wanting -verify checks to only appear in the main source file, but for that we should probably wait and see about adding a file:line mode.

Thanks for the explanation.


>> In general I think the "referenced here" / "declared here" notes don't need to be
>> moved. Sure, going forward we should be writing them using @line, but I think
>> it's okay to leave existing ones as is. Although I would actually expect there to be
>> many more such notes, so were you already only doing a few of them? How
>> were they being chosen?
> 
> You mean the PCH test-cases?  Well in this case, as you know, the PCH doesn't
> include comments within it once it is generated, hence these comments must
> be moved out of the PCH declaration into the actual test-case -- i.e. out of the
> #if/#endif that is used for the PCH generation.
> 
> Can I refer you to my submission post which, hopefully, explains a lot of the
> rationale behind the patch, the necessary test-case changes, the bugs fixed, etc.:
> 
> http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120611/058902.html

*facepalm* Should have noticed they were all PCH. Thanks, Andy.

As I said before (without context) I don't like the idea of reparsing "unseen" files at the end; I think our implementation of CommentHandler and VerifyDiagnosticsHandler should just be good enough to handle these cases, and/or that -verify doesn't support expectations in header files.

In general, though, I think this is a very useful cleanup/enhancement to -verify, and although I think these policy issues should be resolved (and one more person should probably review the patches) I'm hoping they can go in soon.

Thanks again!
Jordan



More information about the cfe-commits mailing list