[cfe-dev] [Modules] Silent textual inclusion when files not found.
Ben Langmuir
blangmuir at apple.com
Wed Jun 3 08:40:26 PDT 2015
> On Jun 2, 2015, at 7:57 PM, Sean Silva <chisophugis at gmail.com> wrote:
>
> Hi all,
>
> Currently we do not seem to issue any form of diagnostic when there are missing headers named in a module map. See the attached test case. Even worse, we will just treat all headers in the module as textual. Hilarity ensues.
Yep, this is llvm.org/PR20507 <http://llvm.org/PR20507>
>
> Some prior art in this area:
> Daniel - r197485
> Ben - r206664
>
> Based on these commits, it ostensibly seems that clang does *some* sort of checking for missing files in a module map, but I can't seem to coax clang into doing this in C++ language mode.
>
> Looking at the source code, it seems like we end up conflating "unavailable" due to a failed `requires` with "a header is missing". It sounds like we essentially need two notions "unsatisfied `requires`" and "necessary header is missing" (a header guarded by an unsatisfied `requires` does not count as "necessary"). Haven't dug in deep yet, but my hypothesis is that somewhere along the way we silently treat a module with missing headers as though it had an unsatisfied `requires`, leading to us silently neglecting that it was ever in a module at all.
Yes, they both come out as the module being “unvavailable”, which is why we don’t import it. I think the right answer is that attempting to import any unavailable module (even via an auto-import) should be an error. That is:
module MissingHeader {
header “exists.h"
header “doesnt_exist.h”
}
#include <exists.h> // error, this would import MissingHeader, which is unavailable because we're missing header “doesnt_exist.h"
module Top {
header “Top.h”
module A {
requires non_existent
header “A.h”
}
module B {
header “B.h”
}
}
#include <Top.h> // OK
#include <A.h> // error, this would import Top.A, which is unavailable because of the missing requirment
#include <B.h> // OK
But handling the first case is more important I think.
>
> I'm glad to put some effort into fixing this; I spent a good part of today with a bizarre error that I traced back to this and I don't want my users to have to deal with the same. Any pointers would be appreciated.
That would be great! I was coincidentally hoping to fix this myself in the next few weeks, but if you beat me to it even better.
>
> -- Sean Silva
> <testmoduledepbuildfail.tar>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150603/90c876a6/attachment.html>
More information about the cfe-dev
mailing list