On Aug 17, 2012, at 8:15 , Andy Gibbs <[email protected]> wrote:

> On Thursday, August 16, 2012 8:12 PM, Jordan Rose wrote:
>> On Aug 16, 2012, at 11:00 , Andy Gibbs wrote:
>>> ---When we get a diagnostic---
>>> if (is a macro expansion)
>>> ignore [[big culprit this one!]]
>> 
>> Why not look at where the macro is instantiated?
> 
> Is it necessary?  A macro expansion itself will not contain comments,
> and hence no directive?... (that's right isn't it?)

I'll agree that directives should not come from macros, but a macro 
/instantiation/ can result in diagnostics (that's this case), in which case we 
definitely want to make sure that the file containing the macro instantiation 
location (not its definition location!) has been parsed for directives. I'm not 
sure we'll ever actually see an issue like this, but it seems better than 
dropping it on the floor.

I just realized the DiagnosticsEngine has a SourceManager. Does it make sense 
for you to use that instead of keeping track of it separately?


Nits:

+  class UnparsedFileStatus
+          : private llvm::PointerIntPair<const FileEntry*, 1, bool> {
+    typedef llvm::PointerIntPair<const FileEntry*, 1, bool> base;

Probably should have commented on this earlier, but private inheritance is 
pretty rare in LLVM. We tend to just use a member variable instead.


+    ParsedFiles.insert(std::make_pair(FID, SM.getFileEntryForID(FID)));

Since there's no search or result checking here, I think it's a lot cleaner to 
use subscripting, i.e. "ParsedFiles[FID] …"


+    // Add FileID to unparsed.
+    UnparsedFiles.insert(std::make_pair(FID,
+                         UnparsedFileStatus(SM.getFileEntryForID(FID),
+                                            FoundDirectives)));

Ditto.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to