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
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to