Add warning check for missing module map file specified with -fmodule-map-file. Hopefully I got the warning put in right. Please review.
Details
Diff Detail
Event Timeline
Sean, thanks for adding Daniel.
Daniel, thanks for the review. I've updated accordingly per your comments. But note that I had to have at least one include in the test, or the check is not performed. It seems like this should be okay, since any code using modules will have some include or import. Otherwise I would need to do the check earlier when options are processed.
(Question for Daniel:) Why do we defer loading the explicitly-specified module map files until we perform a lookup? It seems like that will not work for Objective-C, where a module can be imported without ever looking up a file (by using @import). As John notes, this also means that there can be corner cases where we don't diagnose a missing module map file that was specified on the command line.
include/clang/Basic/DiagnosticLexKinds.td | ||
---|---|---|
616–618 | I think this should be an error rather than a warning. I don't think there are any other cases where we ignore a missing input file that was specified on the command line. Also, diagnostic messages should start with a lowercase letter. |
Moved loading of -fmodule-map-file files to HeaderSearch initialization in Preprocessor initialization.
Changed diagnostic to an error.
Sorry, I missed the hard tab, braces, and etc. However, if I remove the clearing of the ModuleMapFiles member, one of the tests, Modules/modular_maps.cpp segfaults deep in some AST code, but only on running the test on Linux, so it's kind of hard to debug, not being much of a Linux/gdb guy. Did I put this code in the right place? I was kind of uncomfortable putting it in the HeaderSearch constructor, but it is a convenient place, since HeaderSearch has convenient members. I don't see any other references to the ModuleMapFiles member, so I'm not sure what triggers the segfault only on Linux, unless it's some memory-stomping or post-free-write issue somewhere.
I played with this some more, and determined that the best place to load
the module map files is from the frontend rather than from header search; I
modified your patch to do that and landed it as r223561.
Diagnostic messages should start with a lowercase letter.