From: Ben Langmuir Date: Fri, 18 Jul 2014 18:38:24 +0000 (+0000) Subject: Revert "[modules] Fix macro hiding bug exposed if:" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a627c56110bfbd704ef62eb1d055241990018038;p=clang Revert "[modules] Fix macro hiding bug exposed if:" 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213395 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index 3f44440d4b..0698b98abb 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -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 AmbiguousMacros; llvm::DenseMap AmbiguousMacroDefs; diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 419f6b3200..f18122dd94 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -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(); } diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index f0b1752368..97a5d0e9d2 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -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(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/test/Modules/Inputs/macro-hiding/a1.h b/test/Modules/Inputs/macro-hiding/a1.h deleted file mode 100644 index b17c8eeb69..0000000000 --- a/test/Modules/Inputs/macro-hiding/a1.h +++ /dev/null @@ -1 +0,0 @@ -#define assert(x) diff --git a/test/Modules/Inputs/macro-hiding/a2.h b/test/Modules/Inputs/macro-hiding/a2.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/Modules/Inputs/macro-hiding/b1.h b/test/Modules/Inputs/macro-hiding/b1.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/Modules/Inputs/macro-hiding/b2.h b/test/Modules/Inputs/macro-hiding/b2.h deleted file mode 100644 index 83918489e9..0000000000 --- a/test/Modules/Inputs/macro-hiding/b2.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "a2.h" -#define assert(x) diff --git a/test/Modules/Inputs/macro-hiding/c1.h b/test/Modules/Inputs/macro-hiding/c1.h deleted file mode 100644 index 4b78b3c273..0000000000 --- a/test/Modules/Inputs/macro-hiding/c1.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "b1.h" -#define assert(x) diff --git a/test/Modules/Inputs/macro-hiding/module.modulemap b/test/Modules/Inputs/macro-hiding/module.modulemap deleted file mode 100644 index 2657ab1692..0000000000 --- a/test/Modules/Inputs/macro-hiding/module.modulemap +++ /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/test/Modules/macro-hiding.cpp b/test/Modules/macro-hiding.cpp deleted file mode 100644 index a7a6064e64..0000000000 --- a/test/Modules/macro-hiding.cpp +++ /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); }