[PATCH] D132779: Enforce module decl-use restrictions and private header restrictions in textual headers
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 21 13:56:33 PDT 2023
jansvoboda11 added a comment.
Hi @rsmith, this commit makes it possible for `HeaderInfo::LookupFile()` to be called with different `RequestingModule` within single `CompilerInstance`. This is problematic, since some modules may see headers other modules can't (due to `[no_undeclared_includes]`). This can permanently mess up contents of the lookup cache (`HeaderSearch::LookupFileCache`) that uses only the lookup name as the key. You can see the minimal reproducer below. On our side, we can work around this by using `-fno-modules-validate-textual-header-includes`, but I think this will need to be fixed before that options goes away.
// RUN: rm -rf %t
// RUN: split-file %s %t
//--- include/module.modulemap
module A [no_undeclared_includes] { textual header "A.h" }
module B { header "B.h" }
//--- include/A.h
#if __has_include(<B.h>)
#error Even textual headers within module A now inherit [no_undeclared_includes] \
and thus do not have that include.
#endif
//--- include/B.h
//--- tu.c
#if !__has_include(<B.h>)
#error Main TU does have that include.
#endif
#include "A.h"
#if !__has_include(<B.h>)
#error Main TU still has that include.
// We hit the above because the unsuccessful __has_include check in A.h taints
// lookup cache (HeaderSearch::LookupFileCache) of this CompilerInstance.
#endif
// RUN: %clang_cc1 -I %t/include -fmodules -fimplicit-module-maps \
// RUN: -fmodules-cache-path=%t/cache -fsyntax-only %t/tu.c
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132779/new/
https://reviews.llvm.org/D132779
More information about the cfe-commits
mailing list