[cfe-dev] New warning for mismatched include case

Jason Haslam jason.haslam at gmail.com
Thu Jul 19 22:58:25 PDT 2012


Okay, I added caching which improved performance some. I also changed it to only check in user code, which made the Cocoa.h test case moot. I've run the attached patch over real code from LLVM and I don't see any measurable performance difference. It still may be worth disabling the check on case-sensitive file systems, although I'm not entirely sure how to do that beyond "#if defined(__APPLE__) || defined(_WIN32)".

If this looks like the right direction then I'll try to address some of the other concerns.

Jason

-------------- next part --------------
A non-text attachment was scrubbed...
Name: include_case.diff
Type: application/octet-stream
Size: 3956 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120719/85a81ac2/attachment.obj>
-------------- next part --------------



On Jul 18, 2012, at 11:26 PM, Jason Haslam wrote:

> Yes, performance is definitely an issue. I see about 30% degradation on Cocoa.h with this naive implementation. That's probably not going to fly under any circumstance. I'll take a closer look...
> 
> Jason
> 
> 
> On Jul 18, 2012, at 5:12 PM, Ted Kremenek wrote:
> 
>> Hi Jason,
>> 
>> Any idea what is the performance impact of this change?  My concern that this is potentially expensive, and we shouldn't be performing the check on a case-sensitve file system (if we can help it).  That said, many people have requested this kind of checking, so I'm happy to see you taking a stab at it.
>> 
>> Ted	
>> 
>> On Jul 18, 2012, at 3:09 PM, Jason Haslam <jason.haslam at gmail.com> wrote:
>> 
>>> The attached (incomplete proof-of-concept) patch provides a new warning that fires on case-insensitive file systems when the case of the file name in the #include directive doesn't match the case of the file name on disk. The idea is to avoid broken commits that fail to build on case-sensitive file systems. For example:
>>> 
>>> jason$ ls
>>> test.cpp test.h
>>> jason$ cat test.cpp
>>> #include "Test.h"
>>> jason$ clang++ -fsyntax-only test.cpp 
>>> test.cpp:1:10: warning: include case does not match the case of the file on disk
>>> #include "Test.h"
>>>       ^
>>> 1 warning generated.
>>> 
>>> What do you think? Is this desirable? Does the direction look right?
>>> 
>>> Jason
>>> 
>>> <include_case.diff>_______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>> 
> 



More information about the cfe-dev mailing list