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.
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.
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.
– Sean Silva
testmoduledepbuildfail.tar (5.5 KB)