aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Serialization/ASTReader.h7
-rw-r--r--lib/Serialization/ASTReader.cpp53
-rw-r--r--test/Modules/Inputs/diamond_bottom.h1
-rw-r--r--test/Modules/Inputs/diamond_left.h1
-rw-r--r--test/Modules/Inputs/diamond_right.h1
-rw-r--r--test/Modules/Inputs/diamond_top.h1
-rw-r--r--test/Modules/diamond.c14
7 files changed, 16 insertions, 62 deletions
diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h
index f00e805863..514d36db91 100644
--- a/include/clang/Serialization/ASTReader.h
+++ b/include/clang/Serialization/ASTReader.h
@@ -507,11 +507,8 @@ public:
///
/// \param ImportedBy The module that is importing this module, or NULL if
/// this module is imported directly by the user.
- ///
- /// \return A pointer to the module that corresponds to this file name,
- /// and a boolean indicating whether the module was newly added.
- std::pair<Module *, bool>
- addModule(StringRef FileName, ModuleKind Type, Module *ImportedBy);
+ Module &addModule(StringRef FileName, ModuleKind Type,
+ Module *ImportedBy);
/// \brief Add an in-memory buffer the list of known buffers
void addInMemoryBuffer(StringRef FileName, llvm::MemoryBuffer *Buffer);
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index b635b38c10..d81e9d8a36 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -2831,23 +2831,7 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName,
ModuleKind Type,
Module *ImportedBy) {
- Module *M;
- bool NewModule;
- llvm::tie(M, NewModule) = ModuleMgr.addModule(FileName, Type, ImportedBy);
-
- if (!M) {
- // We couldn't load the module.
- std::string Msg = "Unable to load module \"" + FileName.str() + "\"";
- Error(Msg);
- return Failure;
- }
-
- if (!NewModule) {
- // We've already loaded this module.
- return Success;
- }
-
- Module &F = *M;
+ Module &F = ModuleMgr.addModule(FileName, Type, ImportedBy);
if (FileName != "-") {
CurrentDir = llvm::sys::path::parent_path(FileName);
@@ -5725,34 +5709,25 @@ llvm::MemoryBuffer *ModuleManager::lookupBuffer(StringRef Name) {
return InMemoryBuffers[Entry];
}
-std::pair<Module *, bool>
-ModuleManager::addModule(StringRef FileName, ModuleKind Type,
- Module *ImportedBy) {
+/// \brief Creates a new module and adds it to the list of known modules
+Module &ModuleManager::addModule(StringRef FileName, ModuleKind Type,
+ Module *ImportedBy) {
+ Module *Current = new Module(Type);
+ Current->FileName = FileName.str();
+ Chain.push_back(Current);
+
const FileEntry *Entry = FileMgr.getFile(FileName);
- if (!Entry)
- return std::make_pair(static_cast<Module*>(0), false);
-
- // Check whether we already loaded this module, before
- Module *&ModuleEntry = Modules[Entry];
- bool NewModule = false;
- if (!ModuleEntry) {
- // Allocate a new module.
- Module *New = new Module(Type);
- New->FileName = FileName.str();
- Chain.push_back(New);
-
- NewModule = true;
- ModuleEntry = New;
- }
+ // FIXME: Check whether we already loaded this module, before
+ Modules[Entry] = Current;
if (ImportedBy) {
- ModuleEntry->ImportedBy.insert(ImportedBy);
- ImportedBy->Imports.insert(ModuleEntry);
+ Current->ImportedBy.insert(ImportedBy);
+ ImportedBy->Imports.insert(Current);
} else {
- ModuleEntry->DirectlyImported = true;
+ Current->DirectlyImported = true;
}
- return std::make_pair(ModuleEntry, NewModule);
+ return *Current;
}
void ModuleManager::addInMemoryBuffer(StringRef FileName,
diff --git a/test/Modules/Inputs/diamond_bottom.h b/test/Modules/Inputs/diamond_bottom.h
deleted file mode 100644
index 40afc9b152..0000000000
--- a/test/Modules/Inputs/diamond_bottom.h
+++ /dev/null
@@ -1 +0,0 @@
-char bottom(char *x);
diff --git a/test/Modules/Inputs/diamond_left.h b/test/Modules/Inputs/diamond_left.h
deleted file mode 100644
index dfdd803a0a..0000000000
--- a/test/Modules/Inputs/diamond_left.h
+++ /dev/null
@@ -1 +0,0 @@
-float left(float *);
diff --git a/test/Modules/Inputs/diamond_right.h b/test/Modules/Inputs/diamond_right.h
deleted file mode 100644
index bbed7ec805..0000000000
--- a/test/Modules/Inputs/diamond_right.h
+++ /dev/null
@@ -1 +0,0 @@
-double right(double *);
diff --git a/test/Modules/Inputs/diamond_top.h b/test/Modules/Inputs/diamond_top.h
deleted file mode 100644
index 189687aab1..0000000000
--- a/test/Modules/Inputs/diamond_top.h
+++ /dev/null
@@ -1 +0,0 @@
-int top(int *);
diff --git a/test/Modules/diamond.c b/test/Modules/diamond.c
deleted file mode 100644
index fdec7b3aab..0000000000
--- a/test/Modules/diamond.c
+++ /dev/null
@@ -1,14 +0,0 @@
-// in diamond-bottom.h: expected-note{{passing argument to parameter 'x' here}}
-void test_diamond(int i, float f, double d, char c) {
- top(&i);
- left(&f);
- right(&d);
- bottom(&c);
- bottom(&d); // expected-warning{{incompatible pointer types passing 'double *' to parameter of type 'char *'}}
-}
-
-// RUN: %clang_cc1 -emit-pch -o %t_top.h.pch %S/Inputs/diamond_top.h
-// RUN: %clang_cc1 -import-module %t_top.h.pch -emit-pch -o %t_left.h.pch %S/Inputs/diamond_left.h
-// RUN: %clang_cc1 -import-module %t_top.h.pch -emit-pch -o %t_right.h.pch %S/Inputs/diamond_right.h
-// RUN: %clang_cc1 -import-module %t_left.h.pch -import-module %t_right.h.pch -emit-pch -o %t_bottom.h.pch %S/Inputs/diamond_bottom.h
-// RUN: %clang_cc1 -import-module %t_bottom.h.pch -verify %s