[PATCH] [modules] PR20507: Avoid silent textual inclusion.
Sean Silva
chisophugis at gmail.com
Thu Jul 2 17:02:04 PDT 2015
On Wed, Jul 1, 2015 at 3:32 PM, Ben Langmuir <blangmuir at apple.com> wrote:
> I tried this patch out and found a few issues I've commented on inline.
> It also exposes the two issues below:
>
> 1. This patch exposes a compatibility issue with our 'Darwin' module map
> file (the module map that covers most of /usr/include on Darwin platforms).
>
> error: module 'Darwin.C.excluded' requires feature 'excluded'
>
> This "excluded" submodule was used as a hack for "assert.h" before the
> explicit support for "exclude" and "textual" headers were added to clang.
> After this patch, it won't be possible to include assert.h on Darwin,
> because the module it is in is missing a requirement. I think it would be
> very bad to break compatibility here, so I propose we add a compatibility
> hack to module map parsing that treats a module with a the requirement
> "excluded" as if all its headers were declared with "exclude". What do you
> think? I'm happy to implement this.
>
> 2. If a require decl is written *after* a header decl in a module, that
> header still gets treated as required. We should fix that before this is
> committed. E.g.
>
>
>
> module Top {
> module A { header "foo.h" requires nope }
> module B { requires nope header "bar.h" }
> }
>
> We'll complain about missing foo.h, but not about bar.h.
>
I can't reproduce this locally (with or without my patch). What concrete
command line are you using, and what are you seeing?
-- Sean Silva
>
>
> ================
> Comment at: lib/Lex/PPDirectives.cpp:1671
> @@ +1670,3 @@
> + Diag(MissingHeader.FileNameLoc, diag::err_module_unavailable)
> + << M->getFullModuleName() << Requirement.second <<
> Requirement.first;
> + }
> ----------------
> 1. This uses MissingHeader.FileNameLoc, which we just proved is invalid :-)
> 2. We should also show diag::note_implicit_top_level_module_import_here in
> this diagnostic.
>
> ================
> Comment at: test/Modules/missing-header.cpp:13
> @@ +12,2 @@
> +// We should not attempt to build the module.
> +// CHECK-NOT: could not build module 'missing_headers'
> ----------------
> We should have a test for including a header from a module with a missing
> requirement. And one where a missing header from a different submodule is
> okay because the submodule is missing a requirement.
>
> http://reviews.llvm.org/D10423
>
> EMAIL PREFERENCES
> http://reviews.llvm.org/settings/panel/emailpreferences/
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150702/9d1ae695/attachment.html>
More information about the cfe-commits
mailing list