Add LangOptions method to query whether we are tracking the owning module for a local declaration.

In preparation for expanding this behavior to cover additional cases.

llvm-svn: 302969
This commit is contained in:
Richard Smith 2017-05-13 00:00:16 +00:00
parent 66bdfca77a
commit 3533397a3a
3 changed files with 9 additions and 4 deletions

View File

@ -166,6 +166,11 @@ public:
return getCompilingModule() != CMK_None;
}
/// Do we need to track the owning module for a local declaration?
bool trackLocalOwningModule() const {
return ModulesLocalVisibility;
}
bool isSignedOverflowDefined() const {
return getSignedOverflowBehavior() == SOB_Defined;
}

View File

@ -75,7 +75,7 @@ void *Decl::operator new(std::size_t Size, const ASTContext &Ctx,
assert(!Parent || &Parent->getParentASTContext() == &Ctx);
// With local visibility enabled, we track the owning module even for local
// declarations.
if (Ctx.getLangOpts().ModulesLocalVisibility) {
if (Ctx.getLangOpts().trackLocalOwningModule()) {
// Ensure required alignment of the resulting object by adding extra
// padding at the start if required.
size_t ExtraAlign =
@ -96,7 +96,7 @@ Module *Decl::getOwningModuleSlow() const {
}
bool Decl::hasLocalOwningModuleStorage() const {
return getASTContext().getLangOpts().ModulesLocalVisibility;
return getASTContext().getLangOpts().trackLocalOwningModule();
}
const char *Decl::getDeclKindName() const {

View File

@ -16038,7 +16038,7 @@ void Sema::ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod) {
// The enclosing context is now part of this module.
// FIXME: Consider creating a child DeclContext to hold the entities
// lexically within the module.
if (getLangOpts().ModulesLocalVisibility) {
if (getLangOpts().trackLocalOwningModule()) {
cast<Decl>(CurContext)->setHidden(true);
cast<Decl>(CurContext)->setLocalOwningModule(Mod);
}
@ -16072,7 +16072,7 @@ void Sema::ActOnModuleEnd(SourceLocation EomLoc, Module *Mod) {
BuildModuleInclude(DirectiveLoc, Mod);
// Any further declarations are in whatever module we returned to.
if (getLangOpts().ModulesLocalVisibility) {
if (getLangOpts().trackLocalOwningModule()) {
cast<Decl>(CurContext)->setLocalOwningModule(getCurrentModule());
if (!getCurrentModule())
cast<Decl>(CurContext)->setHidden(false);