<div dir="ltr">What's the reason that passing a module file can't imply -fmodules without the user needing to specify it?</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 6, 2017 at 2:06 PM Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Thu Jul  6 14:05:56 2017<br>
New Revision: 307316<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=307316&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=307316&view=rev</a><br>
Log:<br>
Reject attempts to build a module without -fmodules, rather than silently doing weird things.<br>
<br>
Added:<br>
    cfe/trunk/test/Modules/missing-flag.cpp<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br>
    cfe/trunk/include/clang/Frontend/FrontendActions.h<br>
    cfe/trunk/lib/Frontend/FrontendActions.cpp<br>
    cfe/trunk/test/Modules/preprocess-build.cpp<br>
    cfe/trunk/test/Modules/relative-dep-gen.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=307316&r1=307315&r2=307316&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=307316&r1=307315&r2=307316&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Thu Jul  6 14:05:56 2017<br>
@@ -179,6 +179,8 @@ def warn_incompatible_analyzer_plugin_ap<br>
 def note_incompatible_analyzer_plugin_api : Note<<br>
     "current API version is '%0', but plugin was compiled with version '%1'">;<br>
<br>
+def err_module_build_requires_fmodules : Error<<br>
+  "module compilation requires '-fmodules'">;<br>
 def err_module_interface_requires_modules_ts : Error<<br>
   "module interface compilation requires '-fmodules-ts'">;<br>
 def warn_module_config_mismatch : Warning<<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/FrontendActions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=307316&r1=307315&r2=307316&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=307316&r1=307315&r2=307316&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/FrontendActions.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/FrontendActions.h Thu Jul  6 14:05:56 2017<br>
@@ -111,6 +111,8 @@ protected:<br>
<br>
 class GenerateModuleFromModuleMapAction : public GenerateModuleAction {<br>
 private:<br>
+  bool BeginSourceFileAction(CompilerInstance &CI) override;<br>
+<br>
   std::unique_ptr<raw_pwrite_stream><br>
   CreateOutputFile(CompilerInstance &CI, StringRef InFile) override;<br>
 };<br>
<br>
Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=307316&r1=307315&r2=307316&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=307316&r1=307315&r2=307316&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/FrontendActions.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/FrontendActions.cpp Thu Jul  6 14:05:56 2017<br>
@@ -163,6 +163,16 @@ GenerateModuleAction::CreateASTConsumer(<br>
   return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));<br>
 }<br>
<br>
+bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(<br>
+    CompilerInstance &CI) {<br>
+  if (!CI.getLangOpts().Modules) {<br>
+    CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);<br>
+    return false;<br>
+  }<br>
+<br>
+  return GenerateModuleAction::BeginSourceFileAction(CI);<br>
+}<br>
+<br>
 std::unique_ptr<raw_pwrite_stream><br>
 GenerateModuleFromModuleMapAction::CreateOutputFile(CompilerInstance &CI,<br>
                                                     StringRef InFile) {<br>
<br>
Added: cfe/trunk/test/Modules/missing-flag.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/missing-flag.cpp?rev=307316&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/missing-flag.cpp?rev=307316&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Modules/missing-flag.cpp (added)<br>
+++ cfe/trunk/test/Modules/missing-flag.cpp Thu Jul  6 14:05:56 2017<br>
@@ -0,0 +1,4 @@<br>
+// RUN: not %clang_cc1 -x c++-module-map %s -emit-module -fmodule-name=Foo -o %t 2>&1 | FileCheck %s<br>
+// CHECK: module compilation requires '-fmodules'<br>
+module Foo {}<br>
+#pragma clang module contents<br>
<br>
Modified: cfe/trunk/test/Modules/preprocess-build.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/preprocess-build.cpp?rev=307316&r1=307315&r2=307316&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/preprocess-build.cpp?rev=307316&r1=307315&r2=307316&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Modules/preprocess-build.cpp (original)<br>
+++ cfe/trunk/test/Modules/preprocess-build.cpp Thu Jul  6 14:05:56 2017<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -std=c++1z %s -verify<br>
+// RUN: %clang_cc1 -std=c++1z -fmodules %s -verify<br>
<br>
 #pragma clang module build baz<br>
   module baz {}<br>
<br>
Modified: cfe/trunk/test/Modules/relative-dep-gen.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/relative-dep-gen.cpp?rev=307316&r1=307315&r2=307316&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/relative-dep-gen.cpp?rev=307316&r1=307315&r2=307316&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Modules/relative-dep-gen.cpp (original)<br>
+++ cfe/trunk/test/Modules/relative-dep-gen.cpp Thu Jul  6 14:05:56 2017<br>
@@ -2,17 +2,17 @@<br>
 // RUN: rm -rf %t<br>
 // RUN: mkdir %t<br>
 //<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen.modulemap -dependency-file %t/build.d -MT mod.pcm -o %t/mod.pcm<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen.modulemap -fmodule-file=%t/mod.pcm -dependency-file %t/use-explicit.d -MT use.o relative-dep-gen.cpp -fsyntax-only<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen.modulemap -dependency-file %t/use-implicit.d relative-dep-gen.cpp -MT use.o -fsyntax-only<br>
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen.modulemap -dependency-file %t/build.d -MT mod.pcm -o %t/mod.pcm<br>
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen.modulemap -fmodule-file=%t/mod.pcm -dependency-file %t/use-explicit.d -MT use.o relative-dep-gen.cpp -fsyntax-only<br>
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fmodule-map-file=Inputs/relative-dep-gen.modulemap -dependency-file %t/use-implicit.d relative-dep-gen.cpp -MT use.o -fsyntax-only<br>
 //<br>
 // RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build.d<br>
-// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit.d<br>
-// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-implicit.d<br>
+// RUN: FileCheck --check-prefix=CHECK-USE --check-prefix=CHECK-EXPLICIT %s < %t/use-explicit.d<br>
+// RUN: FileCheck --check-prefix=CHECK-USE --check-prefix=CHECK-IMPLICIT %s < %t/use-implicit.d<br>
 //<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/build-cwd.d -MT mod.pcm -o %t/mod-cwd.pcm -fmodule-map-file-home-is-cwd<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -fmodule-file=%t/mod-cwd.pcm -dependency-file %t/use-explicit-cwd.d -MT use.o relative-dep-gen.cpp -fsyntax-only -fmodule-map-file-home-is-cwd<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/use-implicit-cwd.d relative-dep-gen.cpp -MT use.o -fsyntax-only -fmodule-map-file-home-is-cwd<br>
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/build-cwd.d -MT mod.pcm -o %t/mod-cwd.pcm -fmodule-map-file-home-is-cwd<br>
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -fmodule-file=%t/mod-cwd.pcm -dependency-file %t/use-explicit-cwd.d -MT use.o relative-dep-gen.cpp -fsyntax-only -fmodule-map-file-home-is-cwd<br>
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/use-implicit-cwd.d relative-dep-gen.cpp -MT use.o -fsyntax-only -fmodule-map-file-home-is-cwd<br>
 //<br>
 // RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build-cwd.d<br>
 // RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit-cwd.d<br>
@@ -23,7 +23,7 @@<br>
 // RUN: cp %S/Inputs/relative-dep-gen-1.h %t/Inputs<br>
 // RUN: cp %s %t<br>
 // RUN: cd %t<br>
-// RUN: %clang_cc1 -cc1 -fno-implicit-modules -fmodule-file=%t/mod-cwd.pcm -dependency-file %t/use-explicit-no-map-cwd.d -MT use.o relative-dep-gen.cpp -fsyntax-only -fmodule-map-file-home-is-cwd<br>
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-file=%t/mod-cwd.pcm -dependency-file %t/use-explicit-no-map-cwd.d -MT use.o relative-dep-gen.cpp -fsyntax-only -fmodule-map-file-home-is-cwd<br>
 // RUN: cat %t/use-explicit-no-map-cwd.d<br>
 // RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit-no-map-cwd.d<br>
<br>
@@ -35,4 +35,5 @@<br>
 // CHECK-BUILD:   {{[ \t]}}Inputs/relative-dep-gen-2.h<br>
 // CHECK-USE: use.o:<br>
 // CHECK-USE-DAG:   {{[ \t]}}relative-dep-gen.cpp<br>
-// CHECK-USE-DAG:   {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-1.h<br>
+// CHECK-EXPLICIT-DAG:   mod.pcm<br>
+// CHECK-IMPLICIT-DAG:   {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-1.h<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>