Selaa lähdekoodia

Revert r302932, as it appears to be breaking stage2 for some of our modules-enabled buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@302947 91177308-0d34-0410-b5e6-96231b3b80d8
Richard Smith 8 vuotta sitten
vanhempi
commit
2dac30a6d7
1 muutettua tiedostoa jossa 12 lisäystä ja 7 poistoa
  1. 12 7
      lib/Lex/PPLexerChange.cpp

+ 12 - 7
lib/Lex/PPLexerChange.cpp

@@ -731,7 +731,7 @@ Module *Preprocessor::LeaveSubmodule(bool ForPragma) {
   Module *LeavingMod = Info.M;
   SourceLocation ImportLoc = Info.ImportLoc;
 
-  if (!needModuleMacros() ||
+  if (!needModuleMacros() || 
       (!getLangOpts().ModulesLocalVisibility &&
        LeavingMod->getTopLevelModuleName() != getLangOpts().CurrentModule)) {
     // If we don't need module macros, or this is not a module for which we
@@ -777,6 +777,17 @@ Module *Preprocessor::LeaveSubmodule(bool ForPragma) {
     for (auto *MD = Macro.getLatest(); MD != OldMD; MD = MD->getPrevious()) {
       assert(MD && "broken macro directive chain");
 
+      // Stop on macros defined in other submodules of this module that we
+      // #included along the way. There's no point doing this if we're
+      // tracking local submodule visibility, since there can be no such
+      // directives in our list.
+      if (!getLangOpts().ModulesLocalVisibility) {
+        Module *Mod = getModuleContainingLocation(MD->getLocation());
+        if (Mod != LeavingMod &&
+            Mod->getTopLevelModule() == LeavingMod->getTopLevelModule())
+          break;
+      }
+
       if (auto *VisMD = dyn_cast<VisibilityMacroDirective>(MD)) {
         // The latest visibility directive for a name in a submodule affects
         // all the directives that come before it.
@@ -798,12 +809,6 @@ Module *Preprocessor::LeaveSubmodule(bool ForPragma) {
         if (Def || !Macro.getOverriddenMacros().empty())
           addModuleMacro(LeavingMod, II, Def,
                          Macro.getOverriddenMacros(), IsNew);
-
-        if (!getLangOpts().ModulesLocalVisibility) {
-          // This macro is exposed to the rest of this compilation as a
-          // ModuleMacro; we don't need to track its MacroDirective any more.
-          Macro.setLatest(nullptr);
-        }
         break;
       }
     }