Fixed problem with exclude header. The exclude header argument needs to be relative to the module.map file.

llvm-svn: 206342
This commit is contained in:
John Thompson 2014-04-16 00:07:06 +00:00
parent 2f75076de1
commit 28331ae67e
2 changed files with 1 additions and 23 deletions

View File

@ -1006,8 +1006,6 @@ namespace clang {
void parseConflict();
void parseInferredModuleDecl(bool Framework, bool Explicit);
bool parseOptionalAttributes(Attributes &Attrs);
const DirectoryEntry *getOverriddenHeaderSearchDir();
public:
explicit ModuleMapParser(Lexer &L, SourceManager &SourceMgr,
@ -1628,10 +1626,6 @@ void ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken,
if (llvm::sys::path::is_absolute(Header.FileName)) {
PathName = Header.FileName;
File = SourceMgr.getFileManager().getFile(PathName);
} else if (const DirectoryEntry *Dir = getOverriddenHeaderSearchDir()) {
PathName = Dir->getName();
llvm::sys::path::append(PathName, Header.FileName);
File = SourceMgr.getFileManager().getFile(PathName);
} else {
// Search for the header file within the search directory.
PathName = Directory->getName();
@ -2184,22 +2178,6 @@ bool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {
return HadError;
}
/// \brief If there is a specific header search directory due the presence
/// of an umbrella directory, retrieve that directory. Otherwise, returns null.
const DirectoryEntry *ModuleMapParser::getOverriddenHeaderSearchDir() {
for (Module *Mod = ActiveModule; Mod; Mod = Mod->Parent) {
// If we have an umbrella directory, use that.
if (Mod->hasUmbrellaDir())
return Mod->getUmbrellaDir();
// If we have a framework directory, stop looking.
if (Mod->IsFramework)
return 0;
}
return 0;
}
/// \brief Parse a module map file.
///
/// module-map-file:

View File

@ -1,3 +1,3 @@
module x { umbrella "x" exclude header "x/bad.h" exclude header "y/b.h" module * {} }
module x { umbrella "x" exclude header "x/bad.h" module * {} }
module y { umbrella "y" module * {} }
module bad { header "x/bad.h" }