bruno added a comment.
> The right thing to do would be to track the set of headers whose #import /
> #include-with-#pragma-once is
> visible, and only skip inclusions if there is a *visible* #import /
> #include-with-#pragma-once of that header.
This makes sense, but the situation is a bit more weird with the builtins: at
the time clang skips entering
/Users/bruno/Dev/srcs/llvm/debug/bin/../lib/clang/4.0.0/include/stddef.h
because there's already a #import associated with it, clang tries to get the
module, in this case it finds "libc++.stddef", but `makeModuleVisible` does not
export the contents
of /Users/bruno/Dev/srcs/llvm/debug/bin/../lib/clang/4.0.0/include/stddef.h:
// If we don't need to enter the file, stop now.
if (!ShouldEnter) {
// If this is a module import, make it visible if needed.
if (auto *M = SuggestedModule.getModule()) {
makeModuleVisible(M, HashLoc);
...
}
return;
}
(lldb) p M->dump()
module stddef [system] {
header
"/Users/bruno/Dev/srcs/llvm/debug/bin/../lib/clang/4.0.0/include/stddef.h"
textual header "stddef.h"
export *
}
Is this what it's supposed to happen with a (textual) builtin header? It seems
to me that since the first #import was done after collecting the headers to
build the module, the content should already been present/available in the AST
for the module.
https://reviews.llvm.org/D26267
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits