From 96f5551b036590fed75490f4c2fe4c5af0224f9b Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 4 Jun 2015 23:35:19 +0000 Subject: Fixed modularize to warn about missing headers referenced in a module map. llvm-svn: 239122 --- clang-tools-extra/modularize/ModularizeUtilities.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'clang-tools-extra/modularize/ModularizeUtilities.cpp') diff --git a/clang-tools-extra/modularize/ModularizeUtilities.cpp b/clang-tools-extra/modularize/ModularizeUtilities.cpp index 62b6e911fbf..7594b6725cc 100644 --- a/clang-tools-extra/modularize/ModularizeUtilities.cpp +++ b/clang-tools-extra/modularize/ModularizeUtilities.cpp @@ -46,6 +46,7 @@ ModularizeUtilities::ModularizeUtilities(std::vector &InputPaths, : InputFilePaths(InputPaths), HeaderPrefix(Prefix), HasModuleMap(false), + MissingHeaderCount(0), // Init clang stuff needed for loading the module map and preprocessing. LangOpts(new LangOptions()), DiagIDs(new DiagnosticIDs()), DiagnosticOpts(new DiagnosticOptions()), @@ -234,6 +235,9 @@ std::error_code ModularizeUtilities::loadModuleMap( // Do matching end call. DC.EndSourceFile(); + // Reset missing header count. + MissingHeaderCount = 0; + if (!collectModuleMapHeaders(ModMap.get())) return std::error_code(1, std::generic_category()); @@ -243,6 +247,10 @@ std::error_code ModularizeUtilities::loadModuleMap( // Indicate we are using module maps. HasModuleMap = true; + // Return code of 1 for missing headers. + if (MissingHeaderCount) + return std::error_code(1, std::generic_category()); + return std::error_code(); } @@ -310,6 +318,17 @@ bool ModularizeUtilities::collectModuleHeaders(const Module &Mod) { HeaderFileNames.push_back(HeaderPath); } + int MissingCountThisModule = Mod.MissingHeaders.size(); + + for (int Index = 0; Index < MissingCountThisModule; ++Index) { + std::string MissingFile = Mod.MissingHeaders[Index].FileName; + SourceLocation Loc = Mod.MissingHeaders[Index].FileNameLoc; + errs() << Loc.printToString(*SourceMgr) + << ": error : Header not found: " << MissingFile << "\n"; + } + + MissingHeaderCount += MissingCountThisModule; + return true; } -- cgit v1.2.1