Skip to content

Commit 3dea30d

Browse files
committed
Reject attempts to build a module without -fmodules, rather than silently doing weird things.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@307316 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 2b311bb commit 3dea30d

File tree

6 files changed

+30
-11
lines changed

6 files changed

+30
-11
lines changed

include/clang/Basic/DiagnosticFrontendKinds.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ def warn_incompatible_analyzer_plugin_api : Warning<
179179
def note_incompatible_analyzer_plugin_api : Note<
180180
"current API version is '%0', but plugin was compiled with version '%1'">;
181181

182+
def err_module_build_requires_fmodules : Error<
183+
"module compilation requires '-fmodules'">;
182184
def err_module_interface_requires_modules_ts : Error<
183185
"module interface compilation requires '-fmodules-ts'">;
184186
def warn_module_config_mismatch : Warning<

include/clang/Frontend/FrontendActions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ class GenerateModuleAction : public ASTFrontendAction {
111111

112112
class GenerateModuleFromModuleMapAction : public GenerateModuleAction {
113113
private:
114+
bool BeginSourceFileAction(CompilerInstance &CI) override;
115+
114116
std::unique_ptr<raw_pwrite_stream>
115117
CreateOutputFile(CompilerInstance &CI, StringRef InFile) override;
116118
};

lib/Frontend/FrontendActions.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,16 @@ GenerateModuleAction::CreateASTConsumer(CompilerInstance &CI,
163163
return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));
164164
}
165165

166+
bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(
167+
CompilerInstance &CI) {
168+
if (!CI.getLangOpts().Modules) {
169+
CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);
170+
return false;
171+
}
172+
173+
return GenerateModuleAction::BeginSourceFileAction(CI);
174+
}
175+
166176
std::unique_ptr<raw_pwrite_stream>
167177
GenerateModuleFromModuleMapAction::CreateOutputFile(CompilerInstance &CI,
168178
StringRef InFile) {

test/Modules/missing-flag.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: not %clang_cc1 -x c++-module-map %s -emit-module -fmodule-name=Foo -o %t 2>&1 | FileCheck %s
2+
// CHECK: module compilation requires '-fmodules'
3+
module Foo {}
4+
#pragma clang module contents

test/Modules/preprocess-build.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -std=c++1z %s -verify
1+
// RUN: %clang_cc1 -std=c++1z -fmodules %s -verify
22

33
#pragma clang module build baz
44
module baz {}

test/Modules/relative-dep-gen.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
// RUN: rm -rf %t
33
// RUN: mkdir %t
44
//
5-
// 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
6-
// 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
7-
// 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
5+
// 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
6+
// 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
7+
// 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
88
//
99
// RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build.d
10-
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit.d
11-
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-implicit.d
10+
// RUN: FileCheck --check-prefix=CHECK-USE --check-prefix=CHECK-EXPLICIT %s < %t/use-explicit.d
11+
// RUN: FileCheck --check-prefix=CHECK-USE --check-prefix=CHECK-IMPLICIT %s < %t/use-implicit.d
1212
//
13-
// 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
14-
// 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
15-
// 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
13+
// 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
14+
// 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
15+
// 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
1616
//
1717
// RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build-cwd.d
1818
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit-cwd.d
@@ -23,7 +23,7 @@
2323
// RUN: cp %S/Inputs/relative-dep-gen-1.h %t/Inputs
2424
// RUN: cp %s %t
2525
// RUN: cd %t
26-
// 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
26+
// 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
2727
// RUN: cat %t/use-explicit-no-map-cwd.d
2828
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit-no-map-cwd.d
2929

@@ -35,4 +35,5 @@
3535
// CHECK-BUILD: {{[ \t]}}Inputs/relative-dep-gen-2.h
3636
// CHECK-USE: use.o:
3737
// CHECK-USE-DAG: {{[ \t]}}relative-dep-gen.cpp
38-
// CHECK-USE-DAG: {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-1.h
38+
// CHECK-EXPLICIT-DAG: mod.pcm
39+
// CHECK-IMPLICIT-DAG: {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-1.h

0 commit comments

Comments
 (0)