Add LangOptions method to query whether we are tracking the owning module for a local...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 13 May 2017 00:00:16 +0000 (00:00 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 13 May 2017 00:00:16 +0000 (00:00 +0000)
In preparation for expanding this behavior to cover additional cases.

llvm-svn: 302969

clang/include/clang/Basic/LangOptions.h
clang/lib/AST/DeclBase.cpp
clang/lib/Sema/SemaDecl.cpp

index 20a0e58..ceaedf5 100644 (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;
   }
index 97b7465..e0c626c 100644 (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 {
index cd404c6..fb3922d 100644 (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);