summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2018-11-02 10:50:26 +0000
committerIlya Biryukov <ibiryukov@google.com>2018-11-02 10:50:26 +0000
commitce03b9e086a3f50f9e5f55973d4b77df94a65b4d (patch)
treea3f6672502d8a69f44c77197d07061050b129abe /lib
parent8c76673bb8861b77d5de8ff455663ab7e7285ee6 (diff)
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@345963 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Driver/ToolChains/Clang.cpp10
-rw-r--r--lib/Frontend/CompilerInstance.cpp3
-rw-r--r--lib/Lex/ModuleMap.cpp2
3 files changed, 8 insertions, 7 deletions
diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp
index 926db3d4f9..a8ddd8adc3 100644
--- a/lib/Driver/ToolChains/Clang.cpp
+++ b/lib/Driver/ToolChains/Clang.cpp
@@ -3250,15 +3250,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
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, const JobAction &JA,
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())
diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp
index 719474dc76..a9c51d49f6 100644
--- a/lib/Frontend/CompilerInstance.cpp
+++ b/lib/Frontend/CompilerInstance.cpp
@@ -372,9 +372,6 @@ static void InitializeFileRemapping(DiagnosticsEngine &Diags,
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())
diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp
index 13d2b728f5..d44bf124ff 100644
--- a/lib/Lex/ModuleMap.cpp
+++ b/lib/Lex/ModuleMap.cpp
@@ -523,7 +523,7 @@ void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule,
// 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 &&