[NFC] Only attach a declaration to global module fragment if it appears in a module
authorChuanqi Xu <yedeng.yd@linux.alibaba.com>
Wed, 8 Dec 2021 09:11:40 +0000 (17:11 +0800)
committerChuanqi Xu <yedeng.yd@linux.alibaba.com>
Wed, 8 Dec 2021 09:16:31 +0000 (17:16 +0800)
clang/lib/Sema/SemaDeclCXX.cpp

index 558ee3f..4a0eda2 100644 (file)
@@ -16153,7 +16153,7 @@ Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
   ///   - ...
   ///   - appears within a linkage-specification,
   ///   it is attached to the global module.
-  if (getLangOpts().CPlusPlusModules) {
+  if (getLangOpts().CPlusPlusModules && getCurrentModule()) {
     Module *GlobalModule =
         PushGlobalModuleFragment(ExternLoc, /*IsImplicit=*/true);
     D->setModuleOwnershipKind(Decl::ModuleOwnershipKind::ModulePrivate);
@@ -16177,7 +16177,7 @@ Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
     LSDecl->setRBraceLoc(RBraceLoc);
   }
 
-  if (getLangOpts().CPlusPlusModules)
+  if (getLangOpts().CPlusPlusModules && getCurrentModule())
     PopGlobalModuleFragment();
 
   PopDeclContext();