]> granicus.if.org Git - clang/commitdiff
PR22299: Relocate code for handling -fmodule-map-file= so that we don't try to
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 23 Jan 2015 00:01:13 +0000 (00:01 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 23 Jan 2015 00:01:13 +0000 (00:01 +0000)
produce diagnostics with source locations before the diagnostics system is
ready for them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226882 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInstance.cpp
lib/Frontend/FrontendAction.cpp
test/Modules/diagnostics.modulemap [new file with mode: 0644]

index 93a34b7222744619d52baa0aa894408e61ed1f3a..041a1e95225844ce7b48a86c6e72b9ac0cc636f6 100644 (file)
@@ -371,14 +371,6 @@ void CompilerInstance::createPreprocessor(TranslationUnitKind TUKind) {
     AttachHeaderIncludeGen(*PP, /*ShowAllHeaders=*/false, /*OutputPath=*/"",
                            /*ShowDepth=*/true, /*MSStyle=*/true);
   }
-
-  // Load all explictly-specified module map files.
-  for (const auto &Filename : getFrontendOpts().ModuleMapFiles) {
-    if (auto *File = getFileManager().getFile(Filename))
-      PP->getHeaderSearchInfo().loadModuleMapFile(File, /*IsSystem*/false);
-    else
-      getDiagnostics().Report(diag::err_module_map_not_found) << Filename;
-  }
 }
 
 // ASTContext
index c81c81aba4d2601ba259ca92aec48039ec914eac..0bb5d87407b56074f459bf51dd465f1cb9f31796 100644 (file)
@@ -383,6 +383,15 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
            "doesn't support modules");
   }
 
+  // If we were asked to load any module map files, do so now.
+  for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) {
+    if (auto *File = CI.getFileManager().getFile(Filename))
+      CI.getPreprocessor().getHeaderSearchInfo().loadModuleMapFile(
+          File, /*IsSystem*/false);
+    else
+      CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename;
+  }
+
   // If we were asked to load any module files, do so now.
   for (const auto &ModuleFile : CI.getFrontendOpts().ModuleFiles)
     if (!CI.loadModuleFile(ModuleFile))
diff --git a/test/Modules/diagnostics.modulemap b/test/Modules/diagnostics.modulemap
new file mode 100644 (file)
index 0000000..e28239f
--- /dev/null
@@ -0,0 +1,8 @@
+// RUN: cp %s %t-duplicate.modulemap
+// RUN: not %clang_cc1 -fmodules -fmodules-cache-path=%t -fmodule-map-file=%s -fmodule-map-file=%t-duplicate.modulemap -fsyntax-only -x c++ /dev/null 2>&1 | FileCheck --check-prefix=CHECK-DUPLICATE %s
+
+// PR22299: Ensure we can produce diagnostics for duplicate modules from -fmodule-map-file=.
+//
+// CHECK-DUPLICATE: duplicate.modulemap:[[@LINE+2]]:8: error: redefinition of module 'foo'
+// CHECK-DUPLICATE: diagnostics.modulemap:[[@LINE+1]]:8: note: previously defined here
+module foo {}