<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jun 19, 2015 at 5:33 PM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Fri, Jun 19, 2015 at 4:31 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span>On Fri, Jun 19, 2015 at 4:18 PM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>================<br>
Comment at: include/clang/Basic/DiagnosticLexKinds.td:626<br>
@@ -625,1 +625,3 @@<br>
+def note_implicit_top_level_module_import_here : Note<<br>
+ "submodule of top-level module '%0' implicitly imported here">;<br>
def warn_uncovered_module_header : Warning<<br>
----------------<br>
</span><span>benlangmuir wrote:<br>
> I'd just drop "submodule of top-level ".<br>
</span>I think it's an important qualification because the module that was in fact imported is not %0. %0 is the top-level module containing it, and the error is because some submodule of %0 (perhaps the one being imported, perhaps not) has the missing file.<br>
<br>
>From a user's perspective: "The header I included didn't ask for %0 to be imported. It asked for this submodule of it". Ideally we would be able to somehow communicate the "unity build" aspect of top-level modules for this to make sense, but I couldn't find a way to fit all that in a diagnostic.<br>
<br>
Does that make sense?</blockquote><div><br></div></span><div>We use this kind of introductory text for a diagnostic produced within a module:</div><div><pre style="color:rgb(0,0,0)">In module '<top-level module>' imported from <use of submodule>:</pre></div><div>... and a similar note for a diagnostic that occurs while implicitly building a module, so removing the "submodule of top-level" from your diagnostic would be consistent with that. In fact, I'm not sure your note is necessary; don't we already produce a "While building <top-level module> imported from <somewhere>" message prior to emitting the error message?</div></div></div></div></blockquote><div><br></div></div></div><div>Are you saying that these things automatically happen? The test output of test/Modules/missing-header.cpp with the current patch is as follows:</div><div><br></div><div><p style="margin:0px;font-size:12px;font-family:Menlo">/Users/Sean/pg/llvm/tools/clang/test/Modules/Inputs/submodules/module.map:15:27: error: header 'missing.h' not found</p>
<p style="margin:0px;font-size:12px;font-family:Menlo"> module missing { header "missing.h" }</p>
<p style="margin:0px;font-size:12px;font-family:Menlo"> ^</p>
<p style="margin:0px;font-size:12px;font-family:Menlo">/Users/Sean/pg/llvm/tools/clang/test/Modules/missing-header.cpp:10:10: note: submodule of top-level module 'missing_headers' implicitly imported here</p>
<p style="margin:0px;font-size:12px;font-family:Menlo">#include "not_missing.h"</p>
<p style="margin:0px;font-size:12px;font-family:Menlo"> ^</p>
<p style="margin:0px;font-size:12px;font-family:Menlo">1 error generated.</p></div><div><br></div><div>There doesn't appear to be any "In module ...." or "While building ...". Under what circumstances are those emitted? Or do I need to add something to have them be emitted?</div></div></div></div></blockquote><div><br></div><div>Ah, your diagnostic location is pointing to the module map, not to some file within the module (from the source manager's point of view). These extra lines are produced by the same code that handles the "In file included from"-style diagnostics, based on the inclusion information carried by the SourceLocation.</div></div></div></div>