Revert "[modules] Fix macro hiding bug exposed if:"
authorBen Langmuir <blangmuir@apple.com>
Fri, 18 Jul 2014 18:38:24 +0000 (18:38 +0000)
committerBen Langmuir <blangmuir@apple.com>
Fri, 18 Jul 2014 18:38:24 +0000 (18:38 +0000)
This is breaking the system modules on Darwin, because something that
was defined and re-exported no longer is.  Might be this patch, or might
just be a really poor interaction with an existing visibility bug.

This reverts commit r213348.

llvm-svn: 213395

clang/include/clang/Serialization/ASTReader.h
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/test/Modules/Inputs/macro-hiding/a1.h [deleted file]
clang/test/Modules/Inputs/macro-hiding/a2.h [deleted file]
clang/test/Modules/Inputs/macro-hiding/b1.h [deleted file]
clang/test/Modules/Inputs/macro-hiding/b2.h [deleted file]
clang/test/Modules/Inputs/macro-hiding/c1.h [deleted file]
clang/test/Modules/Inputs/macro-hiding/module.modulemap [deleted file]
clang/test/Modules/macro-hiding.cpp [deleted file]

index 3f44440..0698b98 100644 (file)
@@ -1366,8 +1366,7 @@ public:
                          bool Complain);
 
   /// \brief Make the names within this set of hidden names visible.
-  void makeNamesVisible(const HiddenNames &Names, Module *Owner,
-                        bool FromFinalization);
+  void makeNamesVisible(const HiddenNames &Names, Module *Owner);
 
   /// \brief Set the AST callbacks listener.
   void setListener(ASTReaderListener *listener) {
@@ -1832,7 +1831,7 @@ public:
                                  ModuleFile &M, uint64_t Offset);
 
   void installImportedMacro(IdentifierInfo *II, ModuleMacroInfo *MMI,
-                            Module *Owner, bool FromFinalization);
+                            Module *Owner);
 
   typedef llvm::TinyPtrVector<DefMacroDirective *> AmbiguousMacros;
   llvm::DenseMap<IdentifierInfo*, AmbiguousMacros> AmbiguousMacroDefs;
index 419f6b3..f18122d 100644 (file)
@@ -1790,7 +1790,7 @@ void ASTReader::resolvePendingMacro(IdentifierInfo *II,
     // install if we make this module visible.
     HiddenNamesMap[Owner].HiddenMacros.insert(std::make_pair(II, MMI));
   } else {
-    installImportedMacro(II, MMI, Owner, /*FromFinalization*/false);
+    installImportedMacro(II, MMI, Owner);
   }
 }
 
@@ -1941,11 +1941,11 @@ ASTReader::removeOverriddenMacros(IdentifierInfo *II,
 }
 
 void ASTReader::installImportedMacro(IdentifierInfo *II, ModuleMacroInfo *MMI,
-                                     Module *Owner, bool FromFinalization) {
+                                     Module *Owner) {
   assert(II && Owner);
 
   SourceLocation ImportLoc = Owner->MacroVisibilityLoc;
-  if (ImportLoc.isInvalid() && !FromFinalization) {
+  if (ImportLoc.isInvalid()) {
     // FIXME: If we made macros from this module visible but didn't provide a
     // source location for the import, we don't have a location for the macro.
     // Use the location at which the containing module file was first imported
@@ -3320,9 +3320,7 @@ static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
   }
 }
 
-void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner,
-                                 bool FromFinalization) {
-  // FIXME: Only do this if Owner->NameVisibility == AllVisible.
+void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
   for (unsigned I = 0, N = Names.HiddenDecls.size(); I != N; ++I) {
     Decl *D = Names.HiddenDecls[I];
     bool wasHidden = D->Hidden;
@@ -3335,12 +3333,10 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner,
     }
   }
 
-  assert((FromFinalization || Owner->NameVisibility >= Module::MacrosVisible) &&
-         "nothing to make visible?");
   for (HiddenMacrosMap::const_iterator I = Names.HiddenMacros.begin(),
                                        E = Names.HiddenMacros.end();
        I != E; ++I)
-    installImportedMacro(I->first, I->second, Owner, FromFinalization);
+    installImportedMacro(I->first, I->second, Owner);
 }
 
 void ASTReader::makeModuleVisible(Module *Mod,
@@ -3374,8 +3370,7 @@ void ASTReader::makeModuleVisible(Module *Mod,
     // mark them as visible.
     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
     if (Hidden != HiddenNamesMap.end()) {
-      makeNamesVisible(Hidden->second, Hidden->first,
-                       /*FromFinalization*/false);
+      makeNamesVisible(Hidden->second, Hidden->first);
       HiddenNamesMap.erase(Hidden);
     }
 
@@ -3902,7 +3897,7 @@ void ASTReader::finalizeForWriting() {
   for (HiddenNamesMapType::iterator Hidden = HiddenNamesMap.begin(),
                                  HiddenEnd = HiddenNamesMap.end();
        Hidden != HiddenEnd; ++Hidden) {
-    makeNamesVisible(Hidden->second, Hidden->first, /*FromFinalization*/true);
+    makeNamesVisible(Hidden->second, Hidden->first);
   }
   HiddenNamesMap.clear();
 }
index f0b1752..97a5d0e 100644 (file)
@@ -3089,17 +3089,7 @@ class ASTIdentifierTableTrait {
   }
 
   SubmoduleID getSubmoduleID(MacroDirective *MD) {
-    if (MD->getLocation().isValid())
-      return Writer.inferSubmoduleIDFromLocation(MD->getLocation());
-
-    // If we have no directive location, this macro was installed when
-    // finalizing the ASTReader.
-    if (DefMacroDirective *DefMD = dyn_cast<DefMacroDirective>(MD))
-      return DefMD->getInfo()->getOwningModuleID();
-
-    // Skip imports that only produce #undefs for now.
-    // FIXME: We should still re-export them!
-    return 0;
+    return Writer.inferSubmoduleIDFromLocation(MD->getLocation());
   }
 
 public:
diff --git a/clang/test/Modules/Inputs/macro-hiding/a1.h b/clang/test/Modules/Inputs/macro-hiding/a1.h
deleted file mode 100644 (file)
index b17c8ee..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define assert(x)
diff --git a/clang/test/Modules/Inputs/macro-hiding/a2.h b/clang/test/Modules/Inputs/macro-hiding/a2.h
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/clang/test/Modules/Inputs/macro-hiding/b1.h b/clang/test/Modules/Inputs/macro-hiding/b1.h
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/clang/test/Modules/Inputs/macro-hiding/b2.h b/clang/test/Modules/Inputs/macro-hiding/b2.h
deleted file mode 100644 (file)
index 8391848..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "a2.h"
-#define assert(x)
diff --git a/clang/test/Modules/Inputs/macro-hiding/c1.h b/clang/test/Modules/Inputs/macro-hiding/c1.h
deleted file mode 100644 (file)
index 4b78b3c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "b1.h"
-#define assert(x)
diff --git a/clang/test/Modules/Inputs/macro-hiding/module.modulemap b/clang/test/Modules/Inputs/macro-hiding/module.modulemap
deleted file mode 100644 (file)
index 2657ab1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-module a {
-  module a1 { header "a1.h" export * }
-  module a2 { header "a2.h" export * }
-}
-module b {
-  module b1 { header "b1.h" export * }
-  module b2 { header "b2.h" export * }
-}
-module c {
-  module c1 { header "c1.h" export * }
-}
diff --git a/clang/test/Modules/macro-hiding.cpp b/clang/test/Modules/macro-hiding.cpp
deleted file mode 100644 (file)
index a7a6064..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-// RUN: rm -rf %t
-// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%S/Inputs/macro-hiding %s
-#include "c1.h"
-#include "b2.h"
-
-void h() { assert(true); }