aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-03-20 03:59:18 +0000
committerDouglas Gregor <dgregor@apple.com>2013-03-20 03:59:18 +0000
commit970e441671be130c9a12b7eda2a0b795008812a5 (patch)
treefac8ef40951d213d39f66480e67c054d4710cb8c
parent576f32c5e1f3ac5555ea20bb9effce2d59ad2fa9 (diff)
Make sure that Module::ConfigMacrosExhaustive gets initialized and deserialized correctly.
This fixes regressions introduced in r177466 that caused several module tests to fail sporadically. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177481 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Basic/Module.cpp7
-rw-r--r--lib/Serialization/ASTReader.cpp9
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp
index 019d04732b..197c53fb14 100644
--- a/lib/Basic/Module.cpp
+++ b/lib/Basic/Module.cpp
@@ -28,7 +28,8 @@ Module::Module(StringRef Name, SourceLocation DefinitionLoc, Module *Parent,
Umbrella(), ASTFile(0), IsAvailable(true), IsFromModuleFile(false),
IsFramework(IsFramework), IsExplicit(IsExplicit), IsSystem(false),
InferSubmodules(false), InferExplicitSubmodules(false),
- InferExportWildcard(false), NameVisibility(Hidden)
+ InferExportWildcard(false), ConfigMacrosExhaustive(false),
+ NameVisibility(Hidden)
{
if (Parent) {
if (!Parent->isAvailable())
@@ -46,7 +47,6 @@ Module::~Module() {
I != IEnd; ++I) {
delete *I;
}
-
}
/// \brief Determine whether a translation unit built using the current
@@ -284,12 +284,13 @@ void Module::print(raw_ostream &OS, unsigned Indent) const {
OS.indent(Indent + 2);
OS << "config_macros ";
if (ConfigMacrosExhaustive)
- OS << "[exhausive]";
+ OS << "[exhaustive]";
for (unsigned I = 0, N = ConfigMacros.size(); I != N; ++I) {
if (I)
OS << ", ";
OS << ConfigMacros[I];
}
+ OS << "\n";
}
for (unsigned I = 0, N = Headers.size(); I != N; ++I) {
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 00e5ce910b..126770b5b8 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -3475,7 +3475,7 @@ bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
return true;
}
- if (Record.size() < 7) {
+ if (Record.size() < 8) {
Error("malformed module definition");
return true;
}
@@ -3489,7 +3489,8 @@ bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
bool InferSubmodules = Record[5];
bool InferExplicitSubmodules = Record[6];
bool InferExportWildcard = Record[7];
-
+ bool ConfigMacrosExhaustive = Record[8];
+
Module *ParentModule = 0;
if (Parent)
ParentModule = getSubmodule(Parent);
@@ -3527,13 +3528,15 @@ bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
CurrentModule->InferSubmodules = InferSubmodules;
CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
CurrentModule->InferExportWildcard = InferExportWildcard;
+ CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
if (DeserializationListener)
DeserializationListener->ModuleRead(GlobalID, CurrentModule);
SubmodulesLoaded[GlobalIndex] = CurrentModule;
- // Clear out link libraries; the module file has them.
+ // Clear out link libraries and config macros; the module file has them.
CurrentModule->LinkLibraries.clear();
+ CurrentModule->ConfigMacros.clear();
break;
}