r345963 - Revert "Fix regression in behavior of clang -x c++-header -fmodule-name=XXX"

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 2 03:50:26 PDT 2018


Author: ibiryukov
Date: Fri Nov  2 03:50:26 2018
New Revision: 345963

URL: http://llvm.org/viewvc/llvm-project?rev=345963&view=rev
Log:
Revert "Fix regression in behavior of clang -x c++-header -fmodule-name=XXX"

This reverts commit r345803 and r345915 (a follow-up fix to r345803).

Reason: r345803 blocks our internal integrate because of the new
warnings showing up in too many places. The fix is actually correct,
we will reland it after figuring out how to integrate properly.

Removed:
    cfe/trunk/test/Modules/strict-decluse-headers.cpp
Modified:
    cfe/trunk/lib/Driver/ToolChains/Clang.cpp
    cfe/trunk/lib/Frontend/CompilerInstance.cpp
    cfe/trunk/lib/Lex/ModuleMap.cpp
    cfe/trunk/test/Driver/header-module.cpp

Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=345963&r1=345962&r2=345963&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Fri Nov  2 03:50:26 2018
@@ -3250,15 +3250,18 @@ void Clang::ConstructJob(Compilation &C,
   bool IsCuda = JA.isOffloading(Action::OFK_Cuda);
   bool IsHIP = JA.isOffloading(Action::OFK_HIP);
   bool IsOpenMPDevice = JA.isDeviceOffloading(Action::OFK_OpenMP);
+  bool IsModulePrecompile =
+      isa<PrecompileJobAction>(JA) && JA.getType() == types::TY_ModuleFile;
   bool IsHeaderModulePrecompile = isa<HeaderModulePrecompileJobAction>(JA);
 
   // A header module compilation doesn't have a main input file, so invent a
   // fake one as a placeholder.
+  // FIXME: Pick the language based on the header file language.
   const char *ModuleName = [&]{
     auto *ModuleNameArg = Args.getLastArg(options::OPT_fmodule_name_EQ);
     return ModuleNameArg ? ModuleNameArg->getValue() : "";
   }();
-  InputInfo HeaderModuleInput(Inputs[0].getType(), ModuleName, ModuleName);
+  InputInfo HeaderModuleInput(types::TY_CXXModule, ModuleName, ModuleName);
 
   const InputInfo &Input =
       IsHeaderModulePrecompile ? HeaderModuleInput : Inputs[0];
@@ -3269,9 +3272,10 @@ void Clang::ConstructJob(Compilation &C,
   for (const InputInfo &I : Inputs) {
     if (&I == &Input) {
       // This is the primary input.
-    } else if (IsHeaderModulePrecompile &&
+    } else if (IsModulePrecompile &&
                types::getPrecompiledType(I.getType()) == types::TY_PCH) {
-      types::ID Expected = HeaderModuleInput.getType();
+      types::ID Expected =
+          types::lookupHeaderTypeForSourceType(Inputs[0].getType());
       if (I.getType() != Expected) {
         D.Diag(diag::err_drv_module_header_wrong_kind)
             << I.getFilename() << types::getTypeName(I.getType())

Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=345963&r1=345962&r2=345963&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Fri Nov  2 03:50:26 2018
@@ -372,9 +372,6 @@ static void InitializeFileRemapping(Diag
 void CompilerInstance::createPreprocessor(TranslationUnitKind TUKind) {
   const PreprocessorOptions &PPOpts = getPreprocessorOpts();
 
-  // The module manager holds a reference to the old preprocessor (if any).
-  ModuleManager.reset();
-
   // Create a PTH manager if we are using some form of a token cache.
   PTHManager *PTHMgr = nullptr;
   if (!PPOpts.TokenCache.empty())

Modified: cfe/trunk/lib/Lex/ModuleMap.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=345963&r1=345962&r2=345963&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/ModuleMap.cpp (original)
+++ cfe/trunk/lib/Lex/ModuleMap.cpp Fri Nov  2 03:50:26 2018
@@ -523,7 +523,7 @@ void ModuleMap::diagnoseHeaderInclusion(
 
   // At this point, only non-modular includes remain.
 
-  if (RequestingModule && LangOpts.ModulesStrictDeclUse) {
+  if (LangOpts.ModulesStrictDeclUse) {
     Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module)
         << RequestingModule->getTopLevelModule()->Name << Filename;
   } else if (RequestingModule && RequestingModuleIsModuleInterface &&

Modified: cfe/trunk/test/Driver/header-module.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/header-module.cpp?rev=345963&r1=345962&r2=345963&view=diff
==============================================================================
--- cfe/trunk/test/Driver/header-module.cpp (original)
+++ cfe/trunk/test/Driver/header-module.cpp Fri Nov  2 03:50:26 2018
@@ -7,18 +7,7 @@
 // CHECK-PRECOMPILE-SAME: -fno-implicit-modules
 // CHECK-PRECOMPILE-SAME: -fmodule-name=foobar
 // CHECK-PRECOMPILE-SAME: -o {{.*}}.pcm
-// CHECK-PRECOMPILE-SAME: -x c++-header
+// CHECK-PRECOMPILE-SAME: -x c++
 // CHECK-PRECOMPILE-SAME: header1.h
 // CHECK-PRECOMPILE-SAME: header2.h
 // CHECK-PRECOMPILE-SAME: header3.h
-//
-// RUN: %clang -fmodules-ts -fmodule-name=foobar -x c++-header -fsyntax-only %S/Inputs/header1.h %S/Inputs/header2.h %S/Inputs/header3.h -v 2>&1 | FileCheck %s --check-prefix=CHECK-SYNTAX-ONLY
-// CHECK-SYNTAX-ONLY: -cc1 {{.*}} -fsyntax-only
-// CHECK-SYNTAX-ONLY-SAME: -fmodules-ts
-// CHECK-SYNTAX-ONLY-SAME: -fno-implicit-modules
-// CHECK-SYNTAX-ONLY-SAME: -fmodule-name=foobar
-// CHECK-SYNTAX-ONLY-NOT: -o{{ }}
-// CHECK-SYNTAX-ONLY-SAME: -x c++-header
-// CHECK-SYNTAX-ONLY-SAME: header1.h
-// CHECK-SYNTAX-ONLY-SAME: header2.h
-// CHECK-SYNTAX-ONLY-SAME: header3.h

Removed: cfe/trunk/test/Modules/strict-decluse-headers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/strict-decluse-headers.cpp?rev=345962&view=auto
==============================================================================
--- cfe/trunk/test/Modules/strict-decluse-headers.cpp (original)
+++ cfe/trunk/test/Modules/strict-decluse-headers.cpp (removed)
@@ -1,17 +0,0 @@
-// RUN: rm -rf %t
-// RUN: mkdir %t
-// RUN: touch %t/foo.h
-// RUN: echo '#include "foo.h"' > %t/bar.h
-// RUN: touch %t/baz.h
-// RUN: echo 'module X { header "bar.h" header "baz.h" }' > %t/map
-//
-// RUN: not %clang_cc1 -fsyntax-only -fmodules -fmodule-map-file=%t/map -I%t -fmodules-strict-decluse -fmodule-name=X -x c++ %t/bar.h %t/baz.h 2>&1 | FileCheck %s
-// RUN: not %clang_cc1 -fsyntax-only -fmodules -fmodule-map-file=%t/map -I%t -fmodules-strict-decluse -fmodule-name=X -x c++ %t/baz.h %t/bar.h 2>&1 | FileCheck %s
-//
-// Don't crash on this: (FIXME: we should produce an error that the specified module name is not known)
-// RUN: %clang_cc1 -fsyntax-only -fmodules -I%t -fmodules-strict-decluse -fmodule-name=X -x c++ %t/baz.h %t/bar.h
-//
-// Don't crash on this: (FIXME: we should produce an error that the specified file is not part of the specified module)
-// RUN: %clang_cc1 -fsyntax-only -fmodules -fmodule-map-file=%t/map -I%t -fmodules-strict-decluse -fmodule-name=X -x c++ %t/foo.h
-//
-// CHECK: module X does not depend on a module exporting 'foo.h'




More information about the cfe-commits mailing list